๐ Introduction
Time Intelligence Visual is a custom visual for Microsoft Power BI that transforms how you analyze time-based data. Unlike standard Power BI charts, it provides dynamic period switching, smart comparisons, and interactive filtering โ all inside a single visual, with zero DAX time-intelligence measures required.
Dynamic Time Intelligence
Automatically aggregate and analyze data by Day, Week, Month, Quarter, or Year with a single click.
Smart Comparisons
Compare periods sequentially or positionally with intelligent previous-period matching.
Interactive Filtering
5 dynamic dropdowns let users explore data by Year, Quarter, Month without slicer clutter.
Period Summary
Intelligent narrative showing highest, lowest, totals, and overall trends at a glance.
80+ Customizations
Complete control over colors, styles, labels, legends, animations, and more.
Fully Accessible
Keyboard navigation, screen reader support, high-contrast mode compliant.
Who Should Use This Visual?
- Finance teams โ revenue trending, budget vs actual, variance analysis
- HR analytics โ headcount tracking, hiring trends, turnover analysis
- Sales performance โ period-over-period sales, quota tracking, territory comparison
- Operations โ production metrics, efficiency tracking, capacity planning
- Marketing โ campaign performance, lead generation, ROI tracking
- Executive dashboards โ high-level KPI tracking with drill-down capability
๐ฅ Installation
Import from File (.pbiviz)
Open Power BI Desktop
Launch Microsoft Power BI Desktop on your computer.
Open the Import Menu
In the Visualizations pane, click the three dots (โฆ) โ Import a visual from a file.
Select the .pbiviz file
Browse to the TimeIntelligenceVisual.pbiviz file included in your download.
Confirm the security prompt
Click OK on the "uncertified visual" warning. This is expected โ the visual is direct-sold, not distributed through AppSource.
Done
The visual icon now appears in your Visualizations pane, ready to use in any report.
Power BI Service (Cloud)
Once imported in Desktop, the visual travels with your report automatically when you publish to Power BI Service. Recipients viewing the report don't need to install anything separately.
๐ Quick Start Guide (5 Minutes)
Step 1 โ Add the Visual
Click the visual icon
An empty placeholder appears on your report canvas.
Step 2 โ Add Your Data
Add a Date field
Drag a Date or DateTime column into the Date field well. Example: OrderDate, HireDate.
Add a Measure
Drag a numeric measure into Values. Example: Sales, Headcount.
Step 3 โ Configure Time Period
Select a period
Use the Period dropdown in the control bar: Daily ยท Weekly ยท Monthly ยท Quarterly ยท Yearly ยท YTD.
Step 4 โ Add Comparison (optional)
Enable comparison
Use the Compare dropdown: vs Previous Period or vs Same Period Last Year.
Step 5 โ Drill in with filters
Use Year / Quarter / Month dropdowns
Narrow the chart to a specific year, quarter, or month โ the visual recalculates comparisons automatically.
Sample Scenario
Business question: "Show monthly sales in 2024 Q2 compared to the previous quarter."
| Setting | Value |
|---|---|
| Date field | OrderDate |
| Values | Sales |
| Period | Monthly |
| Compare | vs Previous Period |
| Year | 2024 |
| Quarter | Q2 |
Result: April, May, June 2024 (Q2) shown against January, February, March 2024 (Q1 โ the previous period).
๐ Data Requirements
Field Wells
| Field Well | Type | Required | Max | Description |
|---|---|---|---|---|
| Date | Date / DateTime | โ Yes | 1 | Date field for grouping (daily granularity recommended) |
| Values | Numeric | โ Yes | 1โ5 | Measure to display (first measure is charted) |
| Tooltips | Any | Optional | 0โ5 | Additional fields shown on hover |
Date Field Requirements
โ Supported
- Standard Date column (e.g. 2024-01-15)
- DateTime column
- Date column from a Date dimension table
โ Not supported
- Text columns storing dates (e.g. "January 2024" as text)
- Power BI date hierarchies (Year > Quarter > Month > Day) โ use the base date column
- Numeric date representations (e.g. 20240115)
= Table.TransformColumnTypes(#"Previous Step", {{"DateColumn", type date}})Values Field Best Practices
- Use SUM for additive metrics (Sales, Quantity, Hires)
- Use AVERAGE for non-additive metrics (Price, Score, Rating)
- Negative values are supported โ bars extend below zero
- Skip custom time-intelligence DAX โ the visual computes YTD/MTD/QTD/CAGR itself
Data Volume Guidance
| Row Count | Performance | Recommendation |
|---|---|---|
| < 10,000 | ๐ข Excellent | No optimization needed |
| 10,000โ50,000 | ๐ข Good | Works great with all features |
| 50,000โ100,000 | ๐ก Fair | Consider disabling animations |
| > 100,000 | ๐ Slow | Pre-aggregate data before loading |
โ๏ธ Basic Setup
Resize the visual
Recommended minimum: 600 ร 400px. The control bar wraps dropdowns automatically on smaller sizes.
Populate field wells
Date โ your date column. Values โ up to 5 measures (first one is charted). Tooltips (optional) โ extra context fields.
Set your defaults in the Format pane
Configure Default Time Period, Default Comparison, and Default to Latest Year so the report opens exactly how you want it, every time.
๐๏ธ Control Bar & Dynamic Filters
Five interactive dropdown filters let end users explore data without cluttering the report with slicers.
1. ๐ Period
| Option | Groups by | Example |
|---|---|---|
| Daily | 1 day | Jan 1, Jan 2, Jan 3โฆ |
| Weekly | 1 ISO week | W01, W02, W03โฆ |
| Monthly | 1 month | Jan 2024, Feb 2024โฆ |
| Quarterly | 1 quarter | Q1 2024, Q2 2024โฆ |
| Yearly | 1 year | 2022, 2023, 2024โฆ |
| YTD | Cumulative by month | Jan YTD, Feb YTDโฆ |
2. โ Compare
| Option | Behavior | Use case |
|---|---|---|
| No Comparison | Current period only | Simple trend view |
| vs Previous Period | Each period vs immediately preceding one | MoM, QoQ growth |
| vs Same Period Last Year | Each period vs same period, prior year | YoY growth |
Sequential vs Positional
Sequential (default): Jan 2024 vs Dec 2023 Feb 2024 vs Jan 2024 Positional (when a sub-period is filtered), e.g. Weekly + Month=March: Week 1 of March vs Week 1 of February Week 2 of March vs Week 2 of February
3. ๐ Year / โง Quarter / ๐ Month
- Year โ hidden when Period = Yearly. "Default to Latest Year" auto-selects the newest year.
- Quarter โ shown for Daily/Weekly/Monthly/YTD. Hidden for Quarterly/Yearly.
- Month โ shown only for Daily/Weekly. Options narrow automatically to the selected quarter.
Active Filter Chips
Selected filters appear as chips below the control bar with individual โ clear buttons and a "Clear All" action when 2+ filters are active.
Format Pane โ Control Bar Settings
Appearance
Show Control Bar
Default: On
Toggle the entire bar on/off
Position
Default: Top
Top or bottom of the visual
Height
Default: 40px (28โ80)
Auto-expands when dropdowns wrap
Background Color
Default: #F5F7FA
Text Color
Default: #333333
Accent Color
Default: #4472C4
Focus states, selected options
Font Size
Default: 12px (8โ18)
Dropdown labels
Dropdown Options Font Size
Default: 12px (8โ16)
Menu item text
Default Selections
Default Time Period
Default: Monthly
Default Comparison
Default: No Comparison
Default to Latest Year
Default: Off
Auto-select most recent year
Default Quarter
Default: All Quarters
or a specific quarter / Latest Quarter
Default Month
Default: All Months
or a specific month / Latest Month
Visibility Toggles
Show Year Filter
Default: On
Permanently hide dropdown
Show Quarter Filter
Default: On
Show Month Filter
Default: On
Responsive Behavior
- >700px: all dropdowns on one row
- 500โ700px: wraps to two rows
- <500px: stacks vertically, labels become icons
๐ Time Periods Deep Dive
Daily
One bar per calendar day.
Best for: Detailed day-by-day analysis, daily patterns.
Example use case: Daily website traffic, daily sales, daily production.
Weekly
One bar per ISO week (MonโSun). Some years have 53 weeks.
Best for: Smoothing daily volatility, weekly business cycles.
Example use case: Weekly call volume, weekly hiring.
Monthly
One bar per calendar month.
Best for: Standard business reporting, budget vs actual.
Example use case: Monthly revenue, monthly headcount.
Quarterly
One bar per quarter (Q1 JanโMar, Q2 AprโJun, Q3 JulโSep, Q4 OctโDec).
Best for: Board reporting, quarterly targets.
Example use case: Quarterly sales vs target.
Yearly
One bar per calendar or fiscal year.
Best for: Long-term trends, YoY growth.
Example use case: Annual revenue growth.
YTD
Cumulative total from Jan 1 to end of each month.
Best for: Progress toward annual goals.
Example use case: YTD revenue vs annual budget.
โ Comparison Modes
Comparisons work automatically once you choose a Compare mode โ no DAX needed. The engine intelligently decides between sequential and positional matching based on your active filters (see the Control Bar section for a full breakdown), so "Week 2 of March" always compares against "Week 2 of February" rather than an arbitrary prior week.
Positional matching examples
- Weekly + Month filter โ weeks in selected month vs weeks in previous month
- Weekly + Quarter filter โ weeks in selected quarter vs weeks in previous quarter
- Daily + Month filter โ days in selected month vs days in previous month
- Daily + Quarter filter โ days in selected quarter vs days in previous quarter
- Monthly + Quarter filter โ months in selected quarter vs months in previous quarter
๐ Chart Types & Styles
- Column (vertical) or Bar (horizontal) orientation
- Side by Side โ current and previous bars sit next to each other
- Overlapped โ bars overlap by a configurable % for compact comparison
- Behind (Ghost) โ previous period rendered as a lighter "ghost" bar behind current
- Previous bar position: Left / Right / Behind the current bar
- Fully configurable: bar spacing, corner radius, bar width %, overlap %
๐ Period Summary
Replaces the traditional chart title with a dynamic, data-driven narrative rendered above the chart.
What it shows
- ๐ Highest value + period name
- ๐ Lowest value + period name
- ฮฃ Total across all visible periods
- xฬ Average (optional)
- Overall % change vs previous (when comparison is active)
3 Narrative Styles
| Style | Example |
|---|---|
| Full | "Sales was highest in Feb 2024 at 7 | Lowest in W05 at 1 | ฮฃ Total: 19 | โฒ Overall increased by 12.5% vs previous" |
| Compact | "โฒ Feb 2024: 7 | โผ W05: 1 | ฮฃ 19 | โฒ 12.5%" |
| Minimal | "โฒ7 ยท โผ1 ยท ฮฃ 19 ยท โฒ12.5%" |
Customizable: font size, family, color, bold, alignment, background + transparency, display units, decimal places, highlight/positive/negative colors. Responsive โ the measure name auto-hides on small screens.
๐ท๏ธ Data Labels
- Position: Outside End ยท Inside End ยท Inside Base ยท Inside Center
- Show/hide previous-period labels independently
- Optional background with transparency control
- Display units + decimal places
- Full font control (size, family, color, bold, italic)
๐ Axes Configuration
X & Y Axis
- Show/hide each axis independently
- Title text, font, color
- Label font size, color, family, rotation, word-wrap, max width
- Grid lines: show/hide, color, width, style (solid/dashed/dotted)
- Y-axis position (left/right), display units, decimal places, min/max range override
๐ % Change & Error Bars
- 4 styles: Arrow (โฒโผ) ยท Line with Cap ยท Whisker ยท Bracket
- Positive/negative colors, thickness, cap width
- Label position: above bar ยท top of chart ยท on bar
- Toggle absolute change value instead of percentage
๐ Trend Line & Moving Average
- Trend line drawn over current-period bars, with animated drawing effect
- Configurable moving-average window (any number of periods)
- Line color, width, style (solid/dashed/dotted)
- Data-point dots with configurable size and elastic pop-in animation
๐๏ธ Legend & Tooltip
Legend
- 8 position anchors: top, topCenter, bottom, bottomCenter, left, right, etc.
- Custom labels for "Current" and "Previous" period series
- Full font customization
Tooltip
- Smart auto-positioning โ stays within chart bounds even near edges
- Shows current value, previous value, % change, absolute change, YTD, running total, moving average, CAGR
- Separate decimal-place settings for values vs percentages
- Background, text color, font size fully customizable
๐ฌ Animation
- 12 easing types: Linear, Ease In, Ease Out, Ease In-Out, Bounce, Elastic, Back, Cubic, Circle, Exponential, Polynomial, Sinusoidal
- Stagger option โ bars animate one after another with configurable delay
- Duration range: 100โ3000ms
- Trend line and moving average animate with a drawing effect; dots use elastic pop-in
๐งฎ Time Intelligence Calculations
All calculated automatically โ no DAX required:
- YTD โ Year to Date
- MTD / QTD โ Month / Quarter to Date
- Running Total โ recalculated after filtering for accuracy
- Moving Average โ configurable window
- CAGR โ Compound Annual Growth Rate
๐ Cross-Filtering & Selection
- Click a bar to cross-filter other visuals on the page
- Multi-select with Ctrl+Click
- Selected bars get a configurable highlight border; unselected bars dim to a configurable opacity
- Click an empty area to clear selection; right-click for a context menu
โฟ Accessibility
- Full keyboard navigation โ Tab, Arrow keys, Enter, Spacebar
- ARIA labels for screen readers, including custom dropdown components
- Focus indicators and focus trapping inside open dropdowns
- High-contrast mode support
- Screen-reader announcements on data changes
Error Handling
- Invalid date detection and empty-data states handled gracefully
- Negative value support โ bars extend below zero
- Large number formatting up to trillions+
- Date-range validation warnings surfaced in the browser console (F12)
๐ผ Real-World Use Cases
Monthly Revenue Tracking
Business need: Track monthly sales revenue with comparison to the previous month, highlighting growth.
Configuration:
- Period: Monthly
- Compare: vs Previous Period
- Year: 2024 (or All Years for trend)
- % Change: Arrow style
- Period Summary: Full narrative with Total and % change
Weekly Hiring Analysis by Quarter
Business need: See weekly hiring patterns within Q2 compared to Q1.
Configuration:
- Period: Weekly
- Compare: vs Previous Period
- Year: 2024
- Quarter: Q2
- Comparison style: Behind (Ghost) to see overlap
Year-over-Year Retail Performance
Business need: Compare this year's monthly sales against the same month last year, store by store.
Configuration:
- Period: Monthly
- Compare: vs Same Period Last Year
- Pattern fill on previous-year bars for print clarity
- Trend line enabled to show trajectory
Contact-Centre Call Volume
Business need: Daily call volume vs the same day last week, with a moving average smoothing daily noise.
Configuration:
- Period: Daily
- Compare: vs Previous Period
- Moving Average: 7-period window
- Error bars: Whisker style
โจ Best Practices
Data Modeling
- Use a dedicated Date dimension table where possible
- Ensure date columns are genuine Date type, not Text
- Pre-aggregate very large datasets in Power Query
Visual Design
- Choose colors with sufficient contrast for accessibility
- Use pattern fills for previous-period bars if the report may be printed in grayscale
- Enable data labels for precise values in exec-facing reports
- Keep Period Summary visible for context โ it replaces a static title effectively
Performance
- Disable animation for datasets over ~50,000 rows
- Prefer Import mode over DirectQuery where possible
- Filter data in Power Query before loading into the model
๐ง Troubleshooting Guide
โ Visual shows "No data"
Possible causes:
- No Date or Values field added
- All data filtered out by Year/Quarter/Month selections
- Date column contains invalid dates
Solutions:
- Verify Date and Values fields are populated
- Reset all filters to "All"
- Check the date column's data type
- Open F12 console for validation warnings
โ Import blocked / security warning won't clear
Possible causes:
- Tenant policy disallows custom visuals from files
Solutions:
- Ask your Power BI admin to enable "custom visuals from files" in Tenant Settings
- Try importing in Power BI Desktop first, then publish
โ Comparisons look wrong when a sub-period is filtered
Possible causes:
- Expected positional comparison being confused with sequential
Solutions:
- Re-read the Comparison Modes section โ the visual switches automatically based on active filters
- Confirm you have data for the equivalent prior period in your dataset
โ Chart feels slow with large datasets
Possible causes:
- Very high row count with animation enabled
Solutions:
- Disable Animation in the Format pane
- Pre-aggregate to daily/weekly grain in Power Query
- Switch from DirectQuery to Import mode
โ Control bar dropdowns overlap or look cramped
Possible causes:
- Visual is too narrow for the number of visible filters
Solutions:
- Resize the visual wider (600px+ recommended)
- Hide unused filters (Year/Quarter/Month) in the Format pane
- The bar auto-wraps โ this is expected behavior below 700px