Forum Discussion

Kumar_0606's avatar
Kumar_0606
Icon for Helper I rankHelper I
1 year ago
Solved

How to create custom date calculations in Date Table

Hello Experts,   I'm a Beginner and just started creating Data Table in Power BI desktop. In Date table i have created basic columns like Year, Month, Quarter, Week etc. Now i need CM, PM, CQ, PQ...
  • Elena_Kalina's avatar
    Elena_Kalina
    1 year ago

    Hi Kumar_0606 

    Let me help you create the posting period column and explain the best approach for your relative period requirements.

    Single Table Solution

    1. Create or Identify Your Date Table

    If you don't have a date table yet, create one with this DAX:

    DateTable = 
    VAR MinDate = DATE(2020, 1, 1)  // Adjust start date as needed
    VAR MaxDate = DATE(2025, 12, 31) // Adjust end date as needed
    RETURN
    ADDCOLUMNS(
        CALENDAR(MinDate, MaxDate),
        "DateKey", YEAR([Date]) * 10000 + MONTH([Date]) * 100 + DAY([Date]),
        "PostingPeriod", YEAR([Date]) * 100 + MONTH([Date]), // Creates YYYYMM format
        "Year", YEAR([Date]),
        "MonthNumber", MONTH([Date]),
        "MonthName", FORMAT([Date], "MMMM"),
        "Quarter", "Q" & ROUNDUP(MONTH([Date])/3, 0)
    )

    2. Verify Your PostingPeriod Column

    The PostingPeriod column will show values like:

    • 202501 for January 2025

    • 202506 for June 2025

    • 202412 for December 2024

    Multiple Tables Approach (More Advanced)

    1 Create Base Date Table (same as above)

    2 Create Relative Period Types Table

    Create a separate table with your period types (in Power Query or DAX):

    RelativePeriodTypes = 
    DATATABLE(
        "RelativePeriodType", STRING,
        {
            {"CM"}, {"PM"}, {"CQ"}, {"PQ"}, 
            {"CYTD"}, {"PYTD"}, {"PYCM"},
            {"PYCQ"}, {"PYSM"}, {"PYSQ"}
        }
    )

    3Create Combined Table with Relationships

    RelativePeriodTable = 
    GENERATE(
        'DateTable',
        'RelativePeriodTypes',
        VAR CurrentDate = 'DateTable'[Date]
        VAR PeriodType = 'RelativePeriodTypes'[RelativePeriodType]
        VAR RelPeriod = 
            SWITCH(
                PeriodType,
                "CM", 'DateTable'[PostingPeriod],
                "PM", IF('DateTable'[MonthNumber] = 1, 
                         ('DateTable'[Year]-1)*100 + 12, 
                         'DateTable'[Year]*100 + 'DateTable'[MonthNumber]-1),
                "CQ", 'DateTable'[Year]*100 + (ROUNDUP('DateTable'[MonthNumber]/3, 0)-1)*3 +1,
                // Add other period types similarly
                BLANK()
            )
        RETURN
            ROW(
                "Posting Period", 'DateTable'[PostingPeriod],
                "Rel Posting Period", RelPeriod,
                "Relative Period", PeriodType
            )
    )