PowerBi实现Top N和Bottom N的简单示例
假设我们有一张销售表
在PowerBi里我们用一个表格来展示它
如果想要显示Top N,可以直接在筛选器里设置:
但是这样的方式很不灵活,如果我们想用切片器控制怎么做呢?
我们新建一个Rank表,用于筛选Top N
新建两个度量值,一个求销量总和,一个生成排名:
总销售量 = SUM('销售表'[销量])排名 = RANKX(ALL('销售表'[产品]), [总销售量],,DESC,Dense)
我们把排名拖入表格,看看结果是什么
可以看到,Powerbi已经按照销量做了降序的排名了
销量越高的,排名数越小
接着我们写一个度量值用于筛选
TopN =
VAR N = SELECTEDVALUE('Rank'[Value],3)
RETURN IF([排名] <= N, //判断排名是否在切片器选择范围内"显示","隐藏"
)
然后把度量值放入表格的筛选器,选择“显示”,就可以根据切片器来动态显示Top N啦
把排名列拿到,也是能显示的
那么,要显示Bottom N (销量倒数N名,即排名数大的N个) 怎么做呢?
这里要注意一个问题,就是Rankx生成的排名,是计算出来的,不是物理表里的字段,所以我们无法通过DAX获得最大的排名数 (示例中是5)
因此,我们无法用 min < [排名] < max来设定范围去取bottom。(大家可以思考下怎么实现)
换个思路,让排名按照升序排列,
排名 = RANKX(ALL('销售表'[产品]), [总销售量],,ASC,Dense)
其他保持不变,就能显示Bottom N了