Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Mohamed_59
Helper I
Helper I

DAX - Rank continious working days by group

Hello everyone,

 

I hope you are fine 🙂 and I need some help.

 

I'm struggling with the following needs :

"Identify all couples warehouse/items that are more than 3 continuous Working days".

 

Let's consider the following sample, What I need is the last column called "Flag continuous Working Day by couple warehouse/item" :

 

dateisWorkingDaywarehouseitemFlag continuous Working Day by couple warehouse/item
17/08/20221Wh_0Item_11
18/08/20221Wh_0Item_12
22/08/20221Wh_0Item_11
23/08/20221Wh_0Item_12
24/08/20221Wh_0Item_13
25/08/20221Wh_0Item_14
26/08/20221Wh_0Item_15
27/08/20220Wh_0Item_1 
28/08/20220Wh_0Item_1 
29/08/20221Wh_0Item_11
30/08/20221Wh_0Item_12
03/09/20220Wh_0Item_1 
04/09/20220Wh_0Item_1 
05/09/20221Wh_0Item_11
06/09/20221Wh_1Item_11
07/09/20221Wh_1Item_21
08/09/20221Wh_1Item_22
10/09/20220Wh_1Item_2 
11/09/20220Wh_2Item_2 
12/09/20221Wh_2Item_21
13/09/20221Wh_2Item_22
14/09/20221Wh_3Item_21
15/09/20221Wh_3Item_22
16/09/20221Wh_3Item_23

Mohamed_59_0-1671040126367.png

 

Thank you !

1 ACCEPTED SOLUTION

Hi,

Thank you for your feedback, and please check the below picture and the attached pbix file.

 

Jihwan_Kim_0-1671117922079.png

 

 

Flag continuous working day by group CC =
VAR _conditiontable =
    ADDCOLUMNS (
        //FILTER (
        ADDCOLUMNS (
            Data,
            "@prev",
                MAXX (
                    FILTER (
                        Data,
                        Data[warehouse] = EARLIER ( Data[warehouse] )
                            && Data[item] = EARLIER ( Data[item] )
                            && Data[date] < EARLIER ( Data[date] ) // && Data[isWorkingDay] = 1
                    ),
                    Data[date]
                )
        ),
        //Data[isWorkingDay] = 1
        //),
        "@condition",
            IF ( [@prev] = BLANK () || INT ( Data[date] - [@prev] ) = 1, 0, 1 )
    )
VAR _grouptable =
    ADDCOLUMNS (
        _conditiontable,
        "@group",
            SUMX (
                FILTER (
                    _conditiontable,
                    Data[warehouse] = EARLIER ( Data[warehouse] )
                        && Data[item] = EARLIER ( Data[item] )
                        && Data[date] <= EARLIER ( Data[date] )
                ),
                [@condition]
            )
    )
VAR _rankbygroup =
    ADDCOLUMNS (
        _grouptable,
        "@rank",
            COUNTROWS (
                FILTER (
                    _grouptable,
                    Data[warehouse] = EARLIER ( Data[warehouse] )
                        && Data[item] = EARLIER ( Data[item] )
                        && [@group] = EARLIER ( [@group] )
                        && Data[date] <= EARLIER ( Data[date] )
                        && Data[isWorkingDay] = 1
                )
            )
    )
RETURN
    IF (
        Data[isWorkingDay] = 0,
        BLANK (),
        MAXX (
            FILTER (
                _rankbygroup,
                Data[date] = EARLIER ( Data[date] )
                    && Data[warehouse] = EARLIER ( Data[warehouse] )
                    && Data[item] = EARLIER ( Data[item] )
            ),
            [@rank]
        )
    )

If this post helps, then please consider accepting it as the solution to help other members find it faster, and give a big thumbs up.


Go to My LinkedIn Page


View solution in original post

5 REPLIES 5
CNENFRNL
Community Champion
Community Champion

Simple enough,

CNENFRNL_0-1671231464218.png

 

For fun only, a showcase of powerful Excel worksheet formula,

CNENFRNL_1-1671231620291.png


Thanks to the great efforts by MS engineers to simplify syntax of DAX! Most beginners are SUCCESSFULLY MISLED to think that they could easily master DAX; but it turns out that the intricacy of the most frequently used RANKX() is still way beyond their comprehension!

DAX is simple, but NOT EASY!

Jihwan_Kim
Super User
Super User

Hi,

Please check the below picture and the attached pbix file.

 

Jihwan_Kim_0-1671042571840.png

 

 

Flag continuous working day by group CC =
VAR _conditiontable =
    ADDCOLUMNS (
        FILTER (
            ADDCOLUMNS (
                Data,
                "@prev",
                    MAXX (
                        FILTER (
                            Data,
                            Data[warehouse] = EARLIER ( Data[warehouse] )
                                && Data[item] = EARLIER ( Data[item] )
                                && Data[date] < EARLIER ( Data[date] )
                                && Data[isWorkingDay] = 1
                        ),
                        Data[date]
                    )
            ),
            Data[isWorkingDay] = 1
        ),
        "@condition",
            IF ( [@prev] = BLANK () || INT ( Data[date] - [@prev] ) = 1, 0, 1 )
    )
VAR _grouptable =
    ADDCOLUMNS (
        _conditiontable,
        "@group",
            SUMX (
                FILTER (
                    _conditiontable,
                    Data[warehouse] = EARLIER ( Data[warehouse] )
                        && Data[item] = EARLIER ( Data[item] )
                        && Data[date] <= EARLIER ( Data[date] )
                ),
                [@condition]
            )
    )
VAR _rankbygroup =
    ADDCOLUMNS (
        _grouptable,
        "@rank",
            COUNTROWS (
                FILTER (
                    _grouptable,
                    Data[warehouse] = EARLIER ( Data[warehouse] )
                        && Data[item] = EARLIER ( Data[item] )
                        && [@group] = EARLIER ( [@group] )
                        && Data[date] <= EARLIER ( Data[date] )
                )
            )
    )
RETURN
    MAXX (
        FILTER (
            _rankbygroup,
            Data[date] = EARLIER ( Data[date] )
                && Data[warehouse] = EARLIER ( Data[warehouse] )
                && Data[item] = EARLIER ( Data[item] )
        ),
        [@rank]
    )

If this post helps, then please consider accepting it as the solution to help other members find it faster, and give a big thumbs up.


Go to My LinkedIn Page


Hello Jihwan_Kim,

 

Thank you very much but I made a mistake previously on my screen shot.

 

Actually, this is what I want :

Mohamed_59_0-1671113435316.png

As we have the same item in the same warehouse and as the date 2022-08-29 is the next working day of the day 2022-08-26, the rank have to continue the series.

Hi,

Thank you for your feedback, and please check the below picture and the attached pbix file.

 

Jihwan_Kim_0-1671117922079.png

 

 

Flag continuous working day by group CC =
VAR _conditiontable =
    ADDCOLUMNS (
        //FILTER (
        ADDCOLUMNS (
            Data,
            "@prev",
                MAXX (
                    FILTER (
                        Data,
                        Data[warehouse] = EARLIER ( Data[warehouse] )
                            && Data[item] = EARLIER ( Data[item] )
                            && Data[date] < EARLIER ( Data[date] ) // && Data[isWorkingDay] = 1
                    ),
                    Data[date]
                )
        ),
        //Data[isWorkingDay] = 1
        //),
        "@condition",
            IF ( [@prev] = BLANK () || INT ( Data[date] - [@prev] ) = 1, 0, 1 )
    )
VAR _grouptable =
    ADDCOLUMNS (
        _conditiontable,
        "@group",
            SUMX (
                FILTER (
                    _conditiontable,
                    Data[warehouse] = EARLIER ( Data[warehouse] )
                        && Data[item] = EARLIER ( Data[item] )
                        && Data[date] <= EARLIER ( Data[date] )
                ),
                [@condition]
            )
    )
VAR _rankbygroup =
    ADDCOLUMNS (
        _grouptable,
        "@rank",
            COUNTROWS (
                FILTER (
                    _grouptable,
                    Data[warehouse] = EARLIER ( Data[warehouse] )
                        && Data[item] = EARLIER ( Data[item] )
                        && [@group] = EARLIER ( [@group] )
                        && Data[date] <= EARLIER ( Data[date] )
                        && Data[isWorkingDay] = 1
                )
            )
    )
RETURN
    IF (
        Data[isWorkingDay] = 0,
        BLANK (),
        MAXX (
            FILTER (
                _rankbygroup,
                Data[date] = EARLIER ( Data[date] )
                    && Data[warehouse] = EARLIER ( Data[warehouse] )
                    && Data[item] = EARLIER ( Data[item] )
            ),
            [@rank]
        )
    )

If this post helps, then please consider accepting it as the solution to help other members find it faster, and give a big thumbs up.


Go to My LinkedIn Page


Awesome !

 

Thank you very much Jihwan_Kim.

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.