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

Join us for an expert-led overview of the tools and concepts you'll need to become a Certified Power BI Data Analyst and pass exam PL-300. Register now.

Reply
Varshini1234567
Frequent Visitor

Sort by measure in a matrix (Field parameter

Hi Team,

 

I have a problem, I am trying to sort based upon the measure the hierarchy in matrix should be sorted in descending order

 

Measure 

plan= var LV = SELECTEDVALUE(RowMatrix[slicer column])
 return
 CALCULATE(
    sum(Raw_data[Sum of Value]),
    Raw_data[plan]=LV,
    Raw_data[Date (Year)]=FORMAT(YEAR(TODAY()),""))
 
I have a matrix which used field paramter as hierarchy in matrix , the field parameter is created as we had a condition to sort data less than 10 to have row named others , so a new column is created named pg budget , pg mtp, pg rbu1,pg rbu2 from sum of value of raw data. slicer column is used field parameter is the slicer used in report
Varshini1234567_0-1750831791294.png

in my raw data the scenario column contains 

Actual

Budget

MTP

RBU1

RBU2

 

Now when im trying to sort the matrix based upon the rankx 

rank = var nonblank = FILTER(
            ALL(Raw_Data),
            [Plan_3pages] <> BLANK() &&
            Raw_Data[Scenario] in {"Budget","MTP","RBU1","RBU2"}
        )
        RETURN
SWITCH(
    TRUE(),

    // Case: Project Name is visible in the matrix
    ISINSCOPE(Raw_Data[Project Name]),
        IF(
            [Plan_3pages]<>BLANK(),
            RANKX(
                nonblank,
                [Plan_3pages],
                ,
                DESC,
                DENSE
            ),
            BLANK()
        ),

    // Budget
    SELECTEDVALUE(RowMatrix[slicer column]) = "Budget",
        IF(ISINSCOPE(Raw_Data[pg Budget])&&
            CONTAINSSTRING(SELECTEDVALUE(Raw_Data[pg Budget]), "Others"),
            999,
            IF(
                [Plan_3pages] <> BLANK(),
                RANKX(
                    ALLSELECTED(Raw_Data[pg Budget]),
                    [Plan_3pages],
                    ,
                    DESC,
                    DENSE
                ) * RANKX(
                    ALLSELECTED(Raw_Data[SET Area]),
                    [Plan_3pages],
                    ,
                    DESC,
                    DENSE
                ),
                BLANK()
            )
        ),

    // MTP
    SELECTEDVALUE(RowMatrix[slicer column]) = "MTP",
        IF(ISINSCOPE(Raw_Data[pg MTP])&&
            CONTAINSSTRING(SELECTEDVALUE(Raw_Data[pg MTP]), "Others"),
            999,
            IF(
                [Plan_3pages] <> BLANK(),
                RANKX(
                    ALLSELECTED(Raw_Data[pg MTP]),
                    [Plan_3pages],
                    ,
                    DESC,
                    DENSE
                ) * RANKX(
                    ALLSELECTED(Raw_Data[SET Area]),
                    [Plan_3pages],
                    ,
                    DESC,
                    DENSE
                ),
                BLANK()
            )
        ),


    SELECTEDVALUE(RowMatrix[slicer column]) = "RBU1",
        IF(ISINSCOPE(Raw_Data[pg rbu1])&&
            CONTAINSSTRING(SELECTEDVALUE(Raw_Data[pg rbu1]), "Others"),
            999,
            IF(
                [Plan_3pages] <> BLANK(),
                RANKX(
                    ALLSELECTED(Raw_Data[pg rbu1]),
                    [Plan_3pages],
                    ,
                    DESC,
                    DENSE
                ) * RANKX(
                    ALLSELECTED(Raw_Data[SET Area]),
                    [Plan_3pages],
                    ,
                    DESC,
                    DENSE
                ),
                BLANK()
            )
        ),


    SELECTEDVALUE(RowMatrix[slicer column]) = "RBU2",
        IF(ISINSCOPE(Raw_Data[pg RBU2])&&
            CONTAINSSTRING(SELECTEDVALUE(Raw_Data[pg rbu2]), "Others"),
            999,
            IF(
                [Plan_3pages] <> BLANK(),
                RANKX(
                    ALLSELECTED(Raw_Data[pg rbu2]),
                    [Plan_3pages],
                    ,
                    DESC,
                    DENSE
                ) * RANKX(
                    ALLSELECTED(Raw_Data[SET Area]),
                    [Plan_3pages],
                    ,
                    DESC,
                    DENSE
                ),
                BLANK()
            )
        ),

    BLANK()
) the value gets sorted correctly in set area and budget/mtp/rbu1/rbu2 level but if i sort project name then blank value comes 1st , if i add any value like 99 to blank values then actual which is no were usedin slicer also gets filtered, even if i filter excluding actual i don't get it? how to solve the problem? is there any other approach to this
2 REPLIES 2
ajaybabuinturi
Solution Supplier
Solution Supplier

Hi @Varshini1234567,
I believe you need to tweak the DAX logic. Could you please use below DAX logic to get non blank projects

Rank = 
Var LV = SELECTEDVALUE(RowMatrix[slicer column]) 
var nonblank = FILTER(
            ALL(Raw_Data),
            NOT(ISBLANK([Plan_3pages]))&& 
            Raw_Data[Scenario] = LV &&
            Raw_Data[Project Name] <> BLANK()
        )
        RETURN
SWITCH(
    TRUE(),

    // Case: Project Name is visible in the matrix
    ISINSCOPE(Raw_Data[Project Name]),
        IF(
            ISBLANK([Plan_3pages]), BLANK(),
            RANKX(
                nonblank,
                [Plan_3pages],
                ,
                DESC,
                DENSE
            ),
            BLANK()
        ),

    // Budget
    LV = "Budget", && ISINSCOPE(Raw_Data[pg Budget]),
        IF(
            CONTAINSSTRING(SELECTEDVALUE(Raw_Data[pg Budget]), "Others"),
            999,
                RANKX(
                    ALLSELECTED(Raw_Data[pg Budget]),
                    [Plan_3pages],
                    ,
                    DESC,
                    DENSE
                     ) * 
                    RANKX(
                    ALLSELECTED(Raw_Data[SET Area]),
                    [Plan_3pages],
                    ,
                    DESC,
                    DENSE
                )
        ),

    // MTP
    LV = "MTP" && ISINSCOPE(Raw_Data[pg MTP]),
	IF(
            CONTAINSSTRING(SELECTEDVALUE(Raw_Data[pg MTP]), "Others"),
            999,
                RANKX(
                    ALLSELECTED(Raw_Data[pg MTP]),
                    [Plan_3pages],
                    ,
                    DESC,
                    DENSE
                     ) * 
                    RANKX(
                    ALLSELECTED(Raw_Data[SET Area]),
                    [Plan_3pages],
                    ,
                    DESC,
                    DENSE
                )
        ),

    LV = "RBU1" && ISINSCOPE(Raw_Data[pg rbu1]),
	IF(
            CONTAINSSTRING(SELECTEDVALUE(Raw_Data[pg rbu1]), "Others"),
            999,
                RANKX(
                    ALLSELECTED(Raw_Data[pg rbu1]),
                    [Plan_3pages],
                    ,
                    DESC,
                    DENSE
                     ) * 
                    RANKX(
                    ALLSELECTED(Raw_Data[SET Area]),
                    [Plan_3pages],
                    ,
                    DESC,
                    DENSE
                )
        ),


    LV = "RBU2" && ISINSCOPE(Raw_Data[pg rbu2]),
        IF(
            CONTAINSSTRING(SELECTEDVALUE(Raw_Data[pg rbu2]), "Others"),
            999,
                RANKX(
                    ALLSELECTED(Raw_Data[pg rbu2]),
                    [Plan_3pages],
                    ,
                    DESC,
                    DENSE
                     ) * 
                    RANKX(
                    ALLSELECTED(Raw_Data[SET Area]),
                    [Plan_3pages],
                    ,
                    DESC,
                    DENSE
                )
        ),

    BLANK()
) 

 

Thanks,
If you found this solution helpful, please consider giving it a Like👍 and marking it as Accepted Solution✔. This helps improve visibility for others who may be encountering/facing same questions/issues.

freginier
Solution Sage
Solution Sage

Hi, 

 

You can fix the sorting and blank issue with two key changes:

  1. Exclude 'Actual' rows directly in your measure using:

    Raw_Data[Scenario] IN { "Budget", "MTP", "RBU1", "RBU2" }
  2. Avoid ranking blank values to prevent them from appearing first:

    IF([Plan_3pages] = BLANK(), BLANK(), RANKX(...))

Also, don’t use ALLSELECTED without filtering, as it brings back 'Actual'. Use FILTER(...) inside RANKX to exclude blanks and "Others" cleanly.

 

freginier

Helpful resources

Announcements
Join our Fabric User Panel

Join our Fabric User Panel

This is your chance to engage directly with the engineering team behind Fabric and Power BI. Share your experiences and shape the future.

June 2025 Power BI Update Carousel

Power BI Monthly Update - June 2025

Check out the June 2025 Power BI update to learn about new features.

June 2025 community update carousel

Fabric Community Update - June 2025

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