Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
3 years ago
Solved

Counting the rows in a category

Hello everyone, I'm trying to create a calculated column where I count the numer of consecutive weeks that an employee is in a determined quartile. It should be a DAX calculated column. To take into ...
  • ImkeF's avatar
    3 years ago

    Hi Anonymous ,
    you can modify the measure like so:

    WeeksInQuartile = 
    VAR __previousWeek = 'Table'[id_week] - 1
    VAR __Result = 
    RANKX (
        FILTER( 
            'Table',
            'Table'[id_employee] = EARLIER('Table'[id_employee])
                && 'Table'[quartile] = EARLIER('Table'[quartile])
                && 'Table'[quartile] = CALCULATE(MAX('Table'[quartile]), FILTER(all('Table'), 'Table'[id_week] = __previousWeek))
        ),
        'Table'[id_week],
        'Table'[id_week],
        ASC
    )
    Return
    __Result




  • ImkeF's avatar
    3 years ago

    Hello Anonymous ,
    thanks for taking the time to point out the error in the previous formula.
    Please try out this new approach:

    WeeksInQuartile =
    VAR __StartRangeWeek =
        MAXX (
            FILTER (
                'Table',
                'Table'[id_employee] = EARLIER ( 'Table'[id_employee] )
                    && 'Table'[id_week] <= EARLIER ( 'Table'[id_week] )
                    && 'Table'[quartile] <> EARLIER ( 'Table'[quartile] )
            ),
            'Table'[id_week]
        )
    VAR __EndRangeWeek =
        MINX (
            FILTER (
                'Table',
                'Table'[id_employee] = EARLIER ( 'Table'[id_employee] )
                    && 'Table'[id_week] >= EARLIER ( 'Table'[id_week] )
                    && 'Table'[quartile] <> EARLIER ( 'Table'[quartile] )
            ),
            'Table'[id_week]
        )
    VAR __Result =
        RANKX (
            FILTER (
                'Table',
                'Table'[id_employee] = EARLIER ( 'Table'[id_employee] )
                    && 'Table'[quartile] = EARLIER ( 'Table'[quartile] )
                    && 'Table'[id_week] > __StartRangeWeek
                    && 'Table'[id_week]
                        < IF (
                            __EndRangeWeek = BLANK (),
                            EARLIER ( 'Table'[id_week] ) + 1,
                            __EndRangeWeek
                        )
            ),
            'Table'[id_week],
            'Table'[id_week],
            ASC
        )
    RETURN
        __Result

    Performance will probably be terrible on large datasets.
    A Power Query solution would probably be much faster in this case.