其实现在网上面已经有很多的文章教程 教大家如果通过RANKX函数对数据进行排序,包括使用TOPN来控制名次的展示。但是最近有一个新的需求是需要通过参数筛选来控制排名的展示。其实原理跟正常的排序是一样的。下面我梳理一下实现的步骤,再具体讲解为什么这么实现,方便理解。
先看下一下效果图:
第一步:新建参数
这里需要注意的是DATA TYPE,因为我的需求是排名,排名都是整数不可能为小数点。所以这里我选择whole number. Increment这里面讲上一个参数和下一个参数之间的间距,我这边就是默认的每次增加1。例:1.2.3.4.5.6。default是指当我没有选择时,默认展示什么,就是字面的含义。
执行后就会出现如下的表数据。TOP TABLE VALUE:TOP TABLE Value = SELECTEDVALUE('TOP TABLE'[TOP TABLE], 3)。这边的这个3,就是在新建时我在Default里面写入的。默认的是:SELECTEDVALUE('Parameter'[Parameter]),SELECTVALUE第二个参数是没有填入值的。
第二步,创建排序
RANK = IF(HASONEVALUE(VALUE1),RANKX(ALL(VALUE2),VALUE3))
VALUE1:从数据库的角度理解就是按哪个维度进行分组排序,GROUP BY VALUE1,例如我想把销售金额按城市进行排序,那这里的VALUE1就可以填'城市'
去掉无意义的汇总内容,直接用IF+HASONEVALUE进行判断就行了,本文后面的度量值都不再考虑总计问题,并且直接不再显示总计。
VALUE2:ALL这个函数大家都不陌生,具体不懂的,我之前的文章就写过,并把官网链接也复制在上面了。这里面也是填写维度'城市'
VALUE3:汇总的度量值,例销售金额
第三步:判断参数和排序之间的关系
TopN_GMV =
VAR SelectedTop =
SELECTEDVALUE ( '参数名' )
RETURN
SWITCH (
TRUE (),
SelectedTop = 0,VALUE3,
[RANK] <= SelectedTop,VALUE3 )
完成~~~~~