Forum Discussion
smpa01
3 years agoCommunity Champion
Ranking issue
AlexisOlson CNENFRNL
I am trying to create Ranking by using SUBSTITUTEWITHINDEX .
It is working as desired in a table expression.
baseTable
| name | row | cat | rowCopy |
|--------|-...
- Anonymous3 years ago
Hi smpa01 ,
I updated your sample pbix file(see the attachment), please check if that is what you want. You can create a measure as below to get the rank...
Measure = VAR tab = FILTER ( ALLSELECTED ( 'wc' ), 'wc'[Win] <> 0 && 'wc'[Region] = SELECTEDVALUE ( 'wc'[Region] ) ) VAR result = SUBSTITUTEWITHINDEX ( 'wc', "rank", SUMMARIZE ( tab, 'wc'[Win] ), 'wc'[Win], DESC ) VAR _rank = MAXX ( result, [rank] ) RETURN IF ( ISBLANK ( _rank ), BLANK (), _rank + 1 )In addition, you can achieve the same requirement using RANKX function. Please create a measure as below to get it, it is easier...
Rank = RANKX ( FILTER ( ALLSELECTED ( 'wc' ), 'wc'[Region] = SELECTEDVALUE ( 'wc'[Region] ) ), CALCULATE ( SUM ( 'wc'[Win] ) ), , DESC, DENSE )Best Regards
- 3 years ago
This feels a bit for efficient since it's iterating over regions instead of every row:
Table 3 = SELECTCOLUMNS ( GENERATE ( SUMMARIZE ( wc, wc[Region] ), VAR _Region = wc[Region] VAR _Partition_ = SELECTCOLUMNS ( FILTER ( wc, wc[Region] = _Region ), wc[Country], wc[Win] ) VAR _AddCol_ = ADDCOLUMNS ( _Partition_, "@win", wc[Win] ) VAR _SubIndex_ = SUBSTITUTEWITHINDEX ( _AddCol_, "Rank", SUMMARIZE ( _AddCol_, [@win] ), [@win], DESC ) RETURN _SubIndex_ ), "Region", wc[Region], "Country", wc[Country], "Win", wc[Win], "Rank", [Rank] + 1 )
AlexisOlson
3 years agoSuper User
smpa01 Here's how I'd modify your attempt:
Table 3 =
VAR _NonZero_ = FILTER ( wc, wc[Win] <> 0 )
VAR _Ranked_ =
ADDCOLUMNS (
_NonZero_,
"Rank",
VAR _Region = wc[Region]
VAR _Country = wc[Country]
VAR _Partition_ = FILTER ( _NonZero_, wc[Region] = _Region )
VAR _AddCol_ = ADDCOLUMNS ( _Partition_, "@win", wc[Win] )
VAR _SubIndex_ = SUBSTITUTEWITHINDEX ( _AddCol_, "@Rank", SUMMARIZE ( _AddCol_, [@win] ), [@win], DESC )
VAR _Row_ = FILTER ( _SubIndex_, wc[Country] = _Country )
VAR _Rank = MAXX ( _Row_, [@Rank] ) + 1
RETURN
_Rank
)
RETURN
_Ranked_AlexisOlson
3 years agoSuper User
This feels a bit for efficient since it's iterating over regions instead of every row:
Table 3 =
SELECTCOLUMNS (
GENERATE (
SUMMARIZE ( wc, wc[Region] ),
VAR _Region = wc[Region]
VAR _Partition_ =
SELECTCOLUMNS ( FILTER ( wc, wc[Region] = _Region ), wc[Country], wc[Win] )
VAR _AddCol_ =
ADDCOLUMNS ( _Partition_, "@win", wc[Win] )
VAR _SubIndex_ =
SUBSTITUTEWITHINDEX (
_AddCol_,
"Rank", SUMMARIZE ( _AddCol_, [@win] ),
[@win], DESC
)
RETURN
_SubIndex_
),
"Region", wc[Region],
"Country", wc[Country],
"Win", wc[Win],
"Rank", [Rank] + 1
)