Forum Discussion

lkarolak's avatar
lkarolak
Frequent Visitor
8 years ago
Solved

Grouping by consecutive dates into date ranges

This is my current data table structure:   Date            Name --------------------- 01.03.2018  Mark 02.03.2018  Mark 03.03.2018  Mark 07.03.2018  John 08.03.2018  John 15.03.2018  Steve ...
  • Zubair_Muhammad's avatar
    Zubair_Muhammad
    8 years ago

    lkarolak

     

    Essentially I have added 3 calculated columns to identify the boundaries of consective dates which can then be used for Groupings

     

    SeriesBoundaries =
    VAR PriorName =
        CALCULATE (
            VALUES ( TableName[Name] ),
            FILTER (
                ALLEXCEPT ( TableName, TableName[Name] ),
                TableName[SeriesStart]
                    = EARLIER ( TableName[SeriesStart] ) - 1
            )
        )
    VAR NextName =
        CALCULATE (
            VALUES ( TableName[Name] ),
            FILTER (
                ALLEXCEPT ( TableName, TableName[Name] ),
                TableName[SeriesStart]
                    = EARLIER ( TableName[SeriesStart] ) + 1
            )
        )
    RETURN
        IF (
            PriorName <> TableName[Name],
            "Series Start",
            IF ( NextName <> TableName[Name], "Series End" )
        )

     

  • Zubair_Muhammad's avatar
    Zubair_Muhammad
    8 years ago

    HI lkarolak

     

    Please change the formua of Series Start as follows

     

    SeriesStart =
    VAR PreviousDate =
        CALCULATE (
            MAX ( TableName[Date ] ),
            FILTER ( TableName, TableName[Date ] < EARLIER ( TableName[Date ] ) )
        )
    VAR PreviousName =
        CALCULATE (
            FIRSTNONBLANK ( TableName[Name], 1 ),
            FILTER ( TableName, TableName[Date ] = PreviousDate )
        )
    VAR myrank =
        RANKX ( TableName, TableName[Date ],, ASC, DENSE )
    RETURN
        IF (
            PreviousDate
                <> TableName[Date ] - 1
                && TableName[Name] = PreviousName,
            myrank + 1,
            myrank
        )