除非特殊声明,本站文章均为本站原创,转载请务必保留本文链接!
文章标题:173_技巧_Power BI 矩阵层级排名几种度量值写法。
今天我来看一下 Power BI 层级排名的几种呈现方式。 老规矩,我们首先看一下效果。

我们分别以 RANKX 和 COUNTROWS 两个函数为核心思路,写了一般业务情况下的 3 种排名方式,共计 6 个度量值。
rank_0 : 上图红色背景区域,矩阵中大区和省份两个层级,大区层级按照所有大区层级排名,省份层级按照所有省份排名。rank_1 : 上图黄色背景区域,矩阵中大区和省份两个层级,大区层级按照所有大区层级排名,省份层级按照省份所在大区内排名。rank_2 : 上图绿色背景区域,矩阵中大区和省份两个层级,所有大区和省份拉通排名。在你的业务一般使用哪种排名方式呢?
示例中使用的维度表有:D00_大区表 、D01_省份表;事实表有:T05_订单子表。
表间关系如下:

基础度量值:01_销售金额
01_销售金额 = ROUND( SUM ( 'T05_订单子表'[F_06_产品销售金额] ) / 1e6, 10 )
rank_0_RANKX : 使用 RANKX 为核心思路,需要注意判断维度是否筛选的使用,让矩阵显示我们需要的内容。
rank_0_RANKX =
VAR TF1 =
ISFILTERED ( 'D00_大区表'[F_02_大区] )
VAR TF2 =
ISFILTERED ( 'D01_省份表'[F_05_省简称2] )
VAR _RANK =
SWITCH (
TRUE (),
TF1 && NOT ( TF2 ), RANKX ( ALL ( 'D00_大区表' ), [01_销售金额], [01_销售金额], DESC ),
TF2, RANKX ( ALL ( 'D01_省份表' ), [01_销售金额], [01_销售金额], DESC )
)
VAR RESULT =
IF ( [01_销售金额], _RANK, BLANK () )
RETURN
RESULT
rank_0_COUNTROWS : 使用 COUNTROWS 为核心思路。注意 WINDOW 函数的巧妙使用。
rank_0_COUNTROWS =
VAR TF1 =
ISFILTERED ( 'D00_大区表'[F_02_大区] )
VAR TF2 =
ISFILTERED ( 'D01_省份表'[F_05_省简称2] )
VAR matrixD00 =
SUMMARIZE ( ALLSELECTED ( 'D00_大区表' ), 'D00_大区表'[F_02_大区], "@VALUE", [01_销售金额] )
VAR matrixD01 =
SUMMARIZE ( ALLSELECTED ( 'D01_省份表' ), 'D01_省份表'[F_05_省简称2], "@VALUE", [01_销售金额] )
VAR contextD00 =
WINDOW ( 1, ABS, 0, REL, matrixD00, ORDERBY ( [@VALUE], DESC ) )
VAR contextD01 =
WINDOW ( 1, ABS, 0, REL, matrixD01, ORDERBY ( [@VALUE], DESC ) )
VAR _RANK =
SWITCH (
TRUE (),
TF1 && NOT ( TF2 ), COUNTROWS ( contextD00 ),
TF1 && TF2, COUNTROWS ( contextD01 )
)
VAR RESULT =
IF ( [01_销售金额], _RANK, BLANK () )
RETURN
RESULT
ROUND。为什么要使用取近似值?是因为 RANKX 在浮点数排名的时候会发生不可预知的错误。一般情况,不使用浮点数来排名,如果实在需要使用的话,就使用近似值,把精度取到合适的位置即可。ALL 去除筛选的时候,需要把按序排列的字段也要加进来,才能把筛选去掉;具体会在 rank_2 体现。除非特殊声明,本站文章均为本站原创,转载请务必保留本文链接!
文章标题:173_技巧_Power BI 矩阵层级排名几种度量值写法。