Forum Discussion
Anonymous
3 years agoNot applicable
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 ...
- 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 - 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 __ResultPerformance will probably be terrible on large datasets.
A Power Query solution would probably be much faster in this case.
ImkeF
Community Champion
3 years agoHello 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.
- Anonymous3 years agoNot applicable
Thanks for your time, that works perfectly!