Forum Discussion

david_young's avatar
david_young
Regular Visitor
7 years ago
Solved

Add Missing Date Rows to Table based on ID, Date, and Status

Hello, I am trying to generate a row for records between 2 non-incremental dates in DAX.   This is the dataset that I am currently working with:          ID           dayMonthYear      status ...
  • david_young's avatar
    7 years ago

    Hi Everyone,

     

    I was able to solve this using a table and a dynamic column.

     

    Initial 'Daily Burndown' generates a table that assigns every date to an ID.

     

     

    Daily Burndown = 
    
    VAR myCalendar =
        CALENDAR (
            MIN ( Table[dayMonthYear] ),
            MAX ( Table[dayMonthYear] )
        )
    VAR CJ =
        CROSSJOIN ( myCalendar, Table )
    VAR WR =
        ADDCOLUMNS (
            SUMMARIZE ( CJ, [Date], [ID] ),
            "Update Date", LOOKUPVALUE ( Table[dayMonthYear],
                [dayMonthYear], [Date],
                [ID], [ID]
            )       
        )
    
    RETURN
    WR

     

     

    Next I need to add a column to the new 'Daily Burndown' table to determine what the status is on the days that are not populated in the original table.

     

    This code determines the last time a date changed and populates the blank rows with the earliest date before the next date. Once we have that date, we can use a LOOKUP from the original table the exact status and populate that in the row.

     

     

    Report Status = 
    
    VAR previousrow =
        TOPN (
            1,
            FILTER (
               'Daily Burndown',
                [ID] = EARLIER ( [ID] )
                    && [Date] < EARLIER ( [Date] )
                    && 'Daily Burndown'[Update Date] <> BLANK ()
            ),
            [Date], DESC
        )
    
    VAR row_2 =
        IF (
            'Daily Burndown'[Update Date] = BLANK (),
            MINX ( previousrow, [Date] ),
            [Date]
        )
    
    VAR look_up =
        LOOKUPVALUE (
            Table[Report Status],
            Table[ID], [ID],
            Table[dayMonthYear], row_2
        )
        
    RETURN
        look_up