Wicked Smart Data
LearnArticlesAbout
Sign InSign Up
LearnArticlesAboutContact
Sign InSign Up
Wicked Smart Data

The go-to platform for professionals who want to master data, automation, and AI — from Excel fundamentals to cutting-edge machine learning.

Platform

  • Learning Paths
  • Articles
  • About
  • Contact

Connect

  • Contact Us
  • RSS Feed

© 2026 Wicked Smart Data. All rights reserved.

Privacy PolicyTerms of Service
All Articles
Time Intelligence in DAX: YTD, MTD, Previous Period, and Rolling Averages

Time Intelligence in DAX: YTD, MTD, Previous Period, and Rolling Averages

Power BI⚡ Practitioner15 min readApr 18, 2026Updated Apr 18, 2026
Table of Contents
  • Prerequisites
  • The Foundation: Date Tables and Context
  • Year-to-Date (YTD) Calculations
  • Using Built-in YTD Functions
  • YTD vs Previous YTD
  • Handling Fiscal Years
  • Month-to-Date and Quarter-to-Date
  • Previous Period Comparisons
  • Sequential Period Comparisons
  • Flexible Period Shifts
  • Parallel Period Analysis
  • Rolling Averages and Moving Calculations
  • Basic Rolling Averages
  • Moving Sums and Totals

You're analyzing quarterly sales performance when your manager drops by with an urgent request: "I need to see our YTD revenue compared to last year's YTD, plus a 12-month rolling average to smooth out seasonality. Oh, and can you show MTD performance against the same month last year?" Sound familiar? Welcome to the world of time intelligence in DAX, where a solid understanding of date calculations can transform you from report builder to business insight generator.

Time intelligence functions are among the most powerful tools in DAX, enabling you to create sophisticated temporal comparisons that drive real business decisions. Whether you're tracking KPIs against targets, identifying trends through rolling averages, or comparing performance across different time periods, mastering these functions is essential for any serious Power BI developer.

What you'll learn:

  • How to implement YTD, QTD, and MTD calculations using both built-in functions and custom logic
  • Create previous period comparisons (prior year, last month, etc.) using time intelligence functions
  • Build rolling averages and moving calculations for trend analysis
  • Handle common edge cases like broken date relationships and non-standard calendars
  • Optimize time intelligence calculations for better performance
  • Debug and troubleshoot time intelligence issues in complex data models

Prerequisites

You should be comfortable with basic DAX syntax, understand how relationships work in Power BI data models, and have experience creating calculated columns and measures. Most importantly, you need a solid grasp of how date tables work — if you're still unclear on why every good data model needs a proper date dimension, review that concept before diving into time intelligence.

The Foundation: Date Tables and Context

Before we dive into specific functions, let's establish the foundation. Time intelligence in DAX relies on a properly configured date table. This isn't optional — it's the bedrock that makes everything else possible.

Your date table needs to be marked as a date table in Power BI, contain every date in your analysis period without gaps, and maintain proper relationships with your fact tables. Here's what a proper date table relationship looks like in a sales scenario:

// Example Date table structure
Date Table: Date[Date] (marked as date table)
Sales Table: Sales[OrderDate]
Relationship: Date[Date] -> Sales[OrderDate] (many-to-one)

Time intelligence functions work by manipulating filter context on your date table. When you call TOTALYTD(), DAX takes the current date context and expands it to include all dates from the beginning of the year to the current date. Understanding this context manipulation is crucial for troubleshooting when things don't work as expected.

Critical insight: Time intelligence functions only work with date tables marked as date tables. If your calculations aren't working, verify your date table configuration first.

Year-to-Date (YTD) Calculations

Let's start with YTD calculations, probably the most common time intelligence requirement. DAX provides built-in functions, but understanding both the simple and complex approaches will make you more effective.

Using Built-in YTD Functions

The simplest approach uses TOTALYTD():

Sales YTD = TOTALYTD(SUM(Sales[Amount]), Date[Date])

This measure takes the sum of sales and calculates the year-to-date total based on the current filter context. If you're viewing data for March 15th, it sums all sales from January 1st through March 15th of the current year.

For more complex scenarios, you might need the underlying logic:

Sales YTD Custom = 
CALCULATE(
    SUM(Sales[Amount]),
    DATESYTD(Date[Date])
)

Both approaches produce identical results, but the custom version gives you more flexibility for additional filters or modifications.

YTD vs Previous YTD

Business users often want to compare current YTD performance against the same period last year. Here's how to build that comparison:

Sales YTD Previous Year = 
CALCULATE(
    [Sales YTD],
    SAMEPERIODLASTYEAR(Date[Date])
)

YTD Growth = 
DIVIDE(
    [Sales YTD] - [Sales YTD Previous Year],
    [Sales YTD Previous Year]
)

The SAMEPERIODLASTYEAR() function shifts the date context back by exactly one year. If you're analyzing March 15, 2024, it shifts the context to March 15, 2023, then applies the YTD calculation to that shifted period.

Handling Fiscal Years

Many organizations operate on fiscal years that don't align with calendar years. DAX handles this elegantly:

// Assuming fiscal year starts April 1st
Sales Fiscal YTD = 
TOTALYTD(
    SUM(Sales[Amount]), 
    Date[Date], 
    "3/31"  // Fiscal year ends March 31st
)

The third parameter specifies the fiscal year-end date. DAX automatically calculates the fiscal YTD based on this custom year definition.

Month-to-Date and Quarter-to-Date

MTD and QTD follow the same patterns as YTD but with different time boundaries:

Sales MTD = TOTALMTD(SUM(Sales[Amount]), Date[Date])

Sales QTD = TOTALQTD(SUM(Sales[Amount]), Date[Date])

// Custom implementations for more control
Sales MTD Custom = 
CALCULATE(
    SUM(Sales[Amount]),
    DATESMTD(Date[Date])
)

Sales QTD Custom = 
CALCULATE(
    SUM(Sales[Amount]),
    DATESQTD(Date[Date])
)

These functions are particularly useful in executive dashboards where leaders need to understand performance within the current period. A common pattern is showing MTD performance alongside the full previous month for context:

Sales Previous Month = 
CALCULATE(
    SUM(Sales[Amount]),
    PREVIOUSMONTH(Date[Date])
)

MTD vs Previous Month Growth = 
// This compares MTD to the full previous month
// Useful for understanding trajectory
DIVIDE(
    [Sales MTD] - [Sales Previous Month],
    [Sales Previous Month]
)

Previous Period Comparisons

Beyond same-period-last-year comparisons, you often need flexible previous period analysis. DAX provides several functions for this:

Sequential Period Comparisons

Sales Previous Month = 
CALCULATE(
    SUM(Sales[Amount]),
    PREVIOUSMONTH(Date[Date])
)

Sales Previous Quarter = 
CALCULATE(
    SUM(Sales[Amount]),
    PREVIOUSQUARTER(Date[Date])
)

Sales Previous Year = 
CALCULATE(
    SUM(Sales[Amount]),
    PREVIOUSYEAR(Date[Date])
)

These functions shift the filter context to the immediately preceding period of the specified granularity. PREVIOUSMONTH() gives you the full previous month, not the previous month-to-date.

Flexible Period Shifts

For more complex scenarios, use DATEADD():

Sales 6 Months Ago = 
CALCULATE(
    SUM(Sales[Amount]),
    DATEADD(Date[Date], -6, MONTH)
)

Sales 2 Years Ago = 
CALCULATE(
    SUM(Sales[Amount]),
    DATEADD(Date[Date], -2, YEAR)
)

// Weekly comparisons
Sales Previous Week = 
CALCULATE(
    SUM(Sales[Amount]),
    DATEADD(Date[Date], -7, DAY)
)

DATEADD() is incredibly flexible, accepting positive or negative integers and various time units (DAY, MONTH, QUARTER, YEAR).

Parallel Period Analysis

Sometimes you need to compare against the same period in a different timeframe. The PARALLELPERIOD() function handles this:

Sales Same Quarter Last Year = 
CALCULATE(
    SUM(Sales[Amount]),
    PARALLELPERIOD(Date[Date], -4, QUARTER)
)

This shifts the context back four quarters, giving you the same quarter from the previous year — particularly useful for seasonal businesses where quarter-over-quarter comparisons matter more than month-over-month.

Rolling Averages and Moving Calculations

Rolling averages smooth out short-term fluctuations to reveal underlying trends. They're essential for sales forecasting, performance tracking, and identifying seasonal patterns.

Basic Rolling Averages

A 12-month rolling average requires calculating the average over the current month plus the previous 11 months:

Sales 12-Month Rolling Average = 
VAR CurrentDate = MAX(Date[Date])
VAR Last12Months = 
    DATESINPERIOD(
        Date[Date],
        CurrentDate,
        -12,
        MONTH
    )
RETURN
    CALCULATE(
        AVERAGEX(
            VALUES(Date[Year-Month]),
            [Total Sales]
        ),
        Last12Months
    )

This approach uses DATESINPERIOD() to create a dynamic date range, then calculates the average across months within that range. The AVERAGEX() function averages the monthly totals, not the individual transactions.

For daily rolling averages, the pattern is similar but simpler:

Sales 30-Day Rolling Average = 
AVERAGEX(
    DATESINPERIOD(Date[Date], MAX(Date[Date]), -30, DAY),
    [Total Sales]
)

Moving Sums and Totals

Rolling totals follow the same pattern:

Sales Rolling 6-Month Total = 
CALCULATE(
    [Total Sales],
    DATESINPERIOD(Date[Date], MAX(Date[Date]), -6, MONTH)
)

Sales Rolling 90-Day Total = 
CALCULATE(
    [Total Sales],
    DATESINPERIOD(Date[Date], MAX(Date[Date]), -90, DAY)
)

These measures create dynamic totals that always include the specified period leading up to the current date context. They're particularly valuable for identifying trends and smoothing seasonal variations.

Weighted Moving Averages

Sometimes you want recent periods to have more influence on the average. Here's a weighted 12-month average where recent months count more:

Sales Weighted 12-Month Average = 
VAR CurrentDate = MAX(Date[Date])
VAR WeightedSum = 
    SUMX(
        GENERATE(
            DATESINPERIOD(Date[Date], CurrentDate, -12, MONTH),
            VAR CurrentMonth = Date[Date]
            VAR MonthsFromEnd = 
                DATEDIFF(CurrentMonth, CurrentDate, MONTH) + 1
            VAR Weight = MonthsFromEnd  // Recent months have higher weights
            RETURN ROW("Month", CurrentMonth, "Weight", Weight)
        ),
        [Weight] * CALCULATE([Total Sales], Date[Date] = [Month])
    )
VAR TotalWeight = SUMX(GENERATE({1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}), [Value])
RETURN
    DIVIDE(WeightedSum, TotalWeight)

This advanced calculation assigns higher weights to more recent months, making the moving average more responsive to recent changes.

Advanced Time Intelligence Patterns

Custom Calendar Periods

Not every business operates on standard calendars. Retail companies often use 4-4-5 calendars, while others have custom seasons or campaigns:

// Custom period based on business logic
Sales Current Campaign = 
VAR CampaignStart = DATE(2024, 3, 15)
VAR CampaignEnd = DATE(2024, 6, 15)
RETURN
    CALCULATE(
        [Total Sales],
        Date[Date] >= CampaignStart && Date[Date] <= CampaignEnd
    )

// Period-over-period for custom periods
Sales Previous Campaign = 
VAR PrevCampaignStart = DATE(2023, 3, 15)
VAR PrevCampaignEnd = DATE(2023, 6, 15)
RETURN
    CALCULATE(
        [Total Sales],
        Date[Date] >= PrevCampaignStart && Date[Date] <= PrevCampaignEnd
    )

Dynamic Period Selection

Sometimes you need measures that adapt based on user selections or current date:

Sales Dynamic YTD = 
VAR SelectedYear = YEAR(MAX(Date[Date]))
VAR CurrentYear = YEAR(TODAY())
VAR IsCurrentYear = SelectedYear = CurrentYear
VAR YTDDate = 
    IF(
        IsCurrentYear,
        TODAY(),
        DATE(SelectedYear, 12, 31)
    )
RETURN
    CALCULATE(
        [Total Sales],
        FILTER(
            ALL(Date),
            Date[Date] <= YTDDate &&
            YEAR(Date[Date]) = SelectedYear
        )
    )

This measure returns true YTD for the current year but full-year totals for historical years, providing more useful comparisons in historical analysis.

Handling Missing Data in Time Series

Time intelligence calculations can break when you have gaps in your data. Here's how to handle missing periods:

Sales with Missing Data Handling = 
VAR AvailableDates = 
    CALCULATETABLE(
        VALUES(Date[Date]),
        FILTER(Sales, Sales[Amount] <> BLANK())
    )
VAR ValidDateRange = 
    DATESINPERIOD(
        Date[Date],
        MAX(AvailableDates),
        -12,
        MONTH
    )
RETURN
    CALCULATE(
        [Total Sales],
        INTERSECT(ValidDateRange, AvailableDates)
    )

This approach identifies dates with actual data and limits calculations to those periods, preventing misleading averages caused by zero-filled gaps.

Performance Considerations

Time intelligence functions can be performance-intensive, especially in large datasets. Here are key optimization strategies:

Use Built-in Functions When Possible

DAX's built-in time intelligence functions are highly optimized:

// Preferred - optimized by the engine
Sales YTD Optimized = TOTALYTD([Total Sales], Date[Date])

// Slower - requires more complex evaluation
Sales YTD Manual = 
CALCULATE(
    [Total Sales],
    FILTER(
        ALL(Date),
        Date[Date] <= MAX(Date[Date]) &&
        YEAR(Date[Date]) = YEAR(MAX(Date[Date]))
    )
)

Avoid Complex Iterators in Time Calculations

When building rolling averages, be mindful of iterator complexity:

// More efficient - fewer iterations
Rolling Average Efficient = 
AVERAGEX(
    DATESINPERIOD(Date[Date], MAX(Date[Date]), -12, MONTH),
    [Monthly Sales]
)

// Less efficient - nested iterations
Rolling Average Inefficient = 
AVERAGEX(
    DATESINPERIOD(Date[Date], MAX(Date[Date]), -12, MONTH),
    SUMX(
        RELATEDTABLE(Sales),
        Sales[Amount]
    )
)

Pre-calculate Common Periods

For frequently used time intelligence measures, consider pre-calculating values in calculated columns:

// In Date table
IsCurrentYTD = 
Date[Date] <= TODAY() && 
YEAR(Date[Date]) = YEAR(TODAY())

IsPreviousYTD = 
Date[Date] <= DATE(YEAR(TODAY()) - 1, MONTH(TODAY()), DAY(TODAY())) && 
YEAR(Date[Date]) = YEAR(TODAY()) - 1

Then use these in measures for better performance:

Current YTD Sales = 
CALCULATE(
    [Total Sales],
    Date[IsCurrentYTD] = TRUE
)

Hands-On Exercise

Let's build a comprehensive time intelligence dashboard for a retail company. You'll create measures that demonstrate all the concepts we've covered.

Dataset Setup

Assume you have these tables:

  • Sales: SalesDate, ProductID, Amount, Quantity
  • Date: Date, Year, Month, Quarter, DayOfWeek
  • Products: ProductID, ProductName, Category

Step 1: Basic Time Intelligence Measures

Create these foundational measures:

Total Sales = SUM(Sales[Amount])

Sales YTD = TOTALYTD([Total Sales], Date[Date])

Sales MTD = TOTALMTD([Total Sales], Date[Date])

Sales QTD = TOTALQTD([Total Sales], Date[Date])

Step 2: Previous Period Comparisons

Add comparative measures:

Sales Previous Month = 
CALCULATE(
    [Total Sales],
    PREVIOUSMONTH(Date[Date])
)

Sales Same Month Last Year = 
CALCULATE(
    [Total Sales],
    SAMEPERIODLASTYEAR(Date[Date])
)

Sales YTD Previous Year = 
CALCULATE(
    [Sales YTD],
    SAMEPERIODLASTYEAR(Date[Date])
)

Step 3: Growth Calculations

Create percentage change measures:

MOM Growth = 
DIVIDE(
    [Total Sales] - [Sales Previous Month],
    [Sales Previous Month]
)

YOY Growth = 
DIVIDE(
    [Total Sales] - [Sales Same Month Last Year],
    [Sales Same Month Last Year]
)

YTD vs Previous YTD Growth = 
DIVIDE(
    [Sales YTD] - [Sales YTD Previous Year],
    [Sales YTD Previous Year]
)

Step 4: Rolling Averages

Implement trend analysis measures:

12-Month Rolling Average = 
AVERAGEX(
    DATESINPERIOD(Date[Date], MAX(Date[Date]), -12, MONTH),
    [Total Sales]
)

90-Day Rolling Total = 
CALCULATE(
    [Total Sales],
    DATESINPERIOD(Date[Date], MAX(Date[Date]), -90, DAY)
)

Weekly Average (Last 12 Weeks) = 
VAR WeeklyTotals = 
    ADDCOLUMNS(
        DATESINPERIOD(Date[Date], MAX(Date[Date]), -84, DAY),
        "WeekNum", WEEKNUM(Date[Date]),
        "Year", YEAR(Date[Date])
    )
VAR WeeklySums = 
    SUMMARIZE(
        WeeklyTotals,
        [Year],
        [WeekNum],
        "WeeklySales", [Total Sales]
    )
RETURN
    AVERAGEX(WeeklySums, [WeeklySales])

Step 5: Advanced Dashboard Measures

Create measures for executive reporting:

Sales Performance vs Target = 
VAR Target = 1000000  // Could be from a Targets table
VAR Actual = [Sales YTD]
VAR Performance = DIVIDE(Actual, Target)
RETURN Performance

Trend Direction = 
VAR Current3Month = 
    CALCULATE(
        [Total Sales],
        DATESINPERIOD(Date[Date], MAX(Date[Date]), -3, MONTH)
    )
VAR Previous3Month = 
    CALCULATE(
        [Total Sales],
        DATESINPERIOD(
            Date[Date], 
            EOMONTH(MAX(Date[Date]), -3), 
            -3, 
            MONTH
        )
    )
VAR TrendPercent = DIVIDE(Current3Month - Previous3Month, Previous3Month)
RETURN
    SWITCH(
        TRUE(),
        TrendPercent > 0.05, "📈 Strong Growth",
        TrendPercent > 0, "↗️ Growing",
        TrendPercent > -0.05, "➡️ Stable",
        "📉 Declining"
    )

Step 6: Testing and Validation

Create measures to validate your time intelligence:

YTD Validation = 
// This should equal Sales YTD
CALCULATE(
    [Total Sales],
    FILTER(
        ALL(Date),
        Date[Date] <= MAX(Date[Date]) &&
        YEAR(Date[Date]) = YEAR(MAX(Date[Date]))
    )
)

Rolling Average Check = 
// Manual calculation to verify rolling average
VAR MonthsInPeriod = 12
VAR TotalAmount = 
    CALCULATE(
        [Total Sales],
        DATESINPERIOD(Date[Date], MAX(Date[Date]), -MonthsInPeriod, MONTH)
    )
VAR MonthCount = 
    CALCULATE(
        DISTINCTCOUNT(Date[Month]),
        DATESINPERIOD(Date[Date], MAX(Date[Date]), -MonthsInPeriod, MONTH)
    )
RETURN DIVIDE(TotalAmount, MonthCount)

Common Mistakes & Troubleshooting

Missing or Incorrect Date Table Relationships

Problem: Time intelligence functions return blank or incorrect values.

Solution: Verify your date table is properly marked as a date table and has correct relationships:

// Check if date table is properly configured
Date Table Check = 
IF(
    ISFILTERED(Date[Date]),
    "Date table is working",
    "Check date table configuration"
)

Gaps in Date Table

Problem: YTD calculations show unexpected results due to missing dates.

Solution: Ensure your date table covers all necessary dates without gaps:

Date Coverage Check = 
VAR MinSalesDate = MIN(Sales[SalesDate])
VAR MaxSalesDate = MAX(Sales[SalesDate])
VAR DateTableMin = MIN(Date[Date])
VAR DateTableMax = MAX(Date[Date])
RETURN
    IF(
        DateTableMin <= MinSalesDate && DateTableMax >= MaxSalesDate,
        "Date coverage OK",
        "Date table missing dates"
    )

Context Transition Issues

Problem: Time intelligence functions work in some visuals but not others.

Understanding: Time intelligence functions require proper filter context. They work differently in calculated columns versus measures:

// This works in measures but not calculated columns
Sales YTD Measure = TOTALYTD([Total Sales], Date[Date])

// For calculated columns, you need explicit context
Sales YTD Column = 
CALCULATE(
    TOTALYTD([Total Sales], Date[Date]),
    ALL(Date)
)

Performance Issues with Complex Rolling Calculations

Problem: Rolling average calculations are too slow.

Solution: Optimize by reducing iterations and using efficient date functions:

// Slower approach
Rolling Average Slow = 
AVERAGEX(
    FILTER(
        ALL(Date),
        Date[Date] <= MAX(Date[Date]) &&
        Date[Date] > EOMONTH(MAX(Date[Date]), -12)
    ),
    [Total Sales]
)

// Faster approach
Rolling Average Fast = 
AVERAGEX(
    DATESINPERIOD(Date[Date], MAX(Date[Date]), -12, MONTH),
    [Total Sales]
)

Fiscal Year Confusion

Problem: YTD calculations don't align with business fiscal year.

Solution: Always specify fiscal year-end when needed:

// For fiscal year ending June 30
Fiscal YTD = 
TOTALYTD([Total Sales], Date[Date], "6/30")

// Or create a fiscal date table with proper fiscal year columns
Fiscal YTD Custom = 
CALCULATE(
    [Total Sales],
    FILTER(
        ALL(Date),
        Date[FiscalYear] = MAX(Date[FiscalYear]) &&
        Date[Date] <= MAX(Date[Date])
    )
)

Blank Handling in Previous Period Comparisons

Problem: Growth calculations show errors when previous periods have no data.

Solution: Use proper blank handling:

YOY Growth Safe = 
VAR CurrentPeriod = [Total Sales]
VAR PreviousPeriod = [Sales Same Month Last Year]
RETURN
    IF(
        AND(NOT ISBLANK(CurrentPeriod), NOT ISBLANK(PreviousPeriod)),
        DIVIDE(CurrentPeriod - PreviousPeriod, PreviousPeriod),
        BLANK()
    )

Summary & Next Steps

Time intelligence in DAX transforms raw transactional data into meaningful business insights. You've learned to create YTD, MTD, and QTD calculations, implement previous period comparisons, and build rolling averages for trend analysis. These aren't just technical exercises — they're the building blocks of executive dashboards, sales forecasting models, and strategic planning tools.

The key to mastering time intelligence lies in understanding how DAX manipulates filter context. Every time intelligence function works by modifying which dates are included in calculations. Whether you're using TOTALYTD() to expand context to year-beginning or SAMEPERIODLASTYEAR() to shift context backward, you're manipulating the same fundamental mechanism.

Performance matters in time intelligence. Built-in functions are optimized, pre-calculated columns can speed up common calculations, and understanding when to use different approaches will keep your reports responsive even with large datasets.

Your next learning objectives should include:

  • Advanced date table design for complex business calendars
  • Time intelligence in DirectQuery and live connection scenarios
  • Custom time intelligence for non-standard business periods
  • Combining time intelligence with complex business logic and multiple fact tables
  • Building automated anomaly detection using rolling statistics

The patterns you've learned here scale to handle sophisticated business requirements. Whether you're building financial consolidation reports, supply chain analytics, or marketing performance dashboards, these time intelligence foundations will serve you well. Practice with your own datasets, experiment with different time periods, and remember that the best time intelligence implementation is the one that answers the business question clearly and performs well at scale.

Learning Path: DAX Mastery

Previous

Master Time Intelligence in DAX: YTD, MTD, Previous Period & Rolling Averages

Related Articles

Power BI🌱 Foundation

Master Time Intelligence in DAX: YTD, MTD, Previous Period & Rolling Averages

13 min
Power BI🔥 Expert

Master DAX CALCULATE and Filter Context in Power BI

17 min
Power BI🌱 Foundation

DAX Fundamentals: When to Use Calculated Columns vs Measures in Power BI

11 min

On this page

  • Prerequisites
  • The Foundation: Date Tables and Context
  • Year-to-Date (YTD) Calculations
  • Using Built-in YTD Functions
  • YTD vs Previous YTD
  • Handling Fiscal Years
  • Month-to-Date and Quarter-to-Date
  • Previous Period Comparisons
  • Sequential Period Comparisons
  • Flexible Period Shifts
  • Parallel Period Analysis
  • Weighted Moving Averages
  • Advanced Time Intelligence Patterns
  • Custom Calendar Periods
  • Dynamic Period Selection
  • Handling Missing Data in Time Series
  • Performance Considerations
  • Use Built-in Functions When Possible
  • Avoid Complex Iterators in Time Calculations
  • Pre-calculate Common Periods
  • Hands-On Exercise
  • Dataset Setup
  • Step 1: Basic Time Intelligence Measures
  • Step 2: Previous Period Comparisons
  • Step 3: Growth Calculations
  • Step 4: Rolling Averages
  • Step 5: Advanced Dashboard Measures
  • Step 6: Testing and Validation
  • Common Mistakes & Troubleshooting
  • Missing or Incorrect Date Table Relationships
  • Gaps in Date Table
  • Context Transition Issues
  • Performance Issues with Complex Rolling Calculations
  • Fiscal Year Confusion
  • Blank Handling in Previous Period Comparisons
  • Summary & Next Steps
  • Rolling Averages and Moving Calculations
  • Basic Rolling Averages
  • Moving Sums and Totals
  • Weighted Moving Averages
  • Advanced Time Intelligence Patterns
  • Custom Calendar Periods
  • Dynamic Period Selection
  • Handling Missing Data in Time Series
  • Performance Considerations
  • Use Built-in Functions When Possible
  • Avoid Complex Iterators in Time Calculations
  • Pre-calculate Common Periods
  • Hands-On Exercise
  • Dataset Setup
  • Step 1: Basic Time Intelligence Measures
  • Step 2: Previous Period Comparisons
  • Step 3: Growth Calculations
  • Step 4: Rolling Averages
  • Step 5: Advanced Dashboard Measures
  • Step 6: Testing and Validation
  • Common Mistakes & Troubleshooting
  • Missing or Incorrect Date Table Relationships
  • Gaps in Date Table
  • Context Transition Issues
  • Performance Issues with Complex Rolling Calculations
  • Fiscal Year Confusion
  • Blank Handling in Previous Period Comparisons
  • Summary & Next Steps