Power BI: DAX —— 用Rank函数求前N名

假设有这么一张表--tbSales,里面是各个城市的销售额:

要实现的效果是:在页面上滑动切片器时,表格根据切片器的值显示排名

做法如下:

1. 选择新建参数

完成之后会得到这么一张表:

 页面上会出现一个滑动切片器:

2. 新建一个求Sales和的度量值

TotalSales = SUM('tbSales'[Sales])

3. 新建一个求销售排名的度量值

SalesRank = RANKX(ALL('tbSales'[City]),[TotalSales],,DESC,Dense)

4. 新建一个根据切片器值显示的度量值

TopSales =
VAR vpar = SELECTEDVALUE('参数'[参数])
RETURN IF([SalesRank]>vpar,BLANK(),[TotalSales])

5. 在画布上放一张表进来,把City和TopSales绑定到表上。

此时,当改变切片器的值时,表中会根据切片器显示前N项的数据。

但是还有一个问题,它的总计计算的是所有Sales的值,而不是前N名的总计,

解决办法:在度量值[TopSales]中单独去计算前N名的汇总值,[TopSales]修改如下:

TopSales = 
//选中的参数值
VAR vpar = SELECTEDVALUE('参数'[参数])
//当前行是哪个city,如果为空,可以人为它是总计那一行
VAR rCity = SELECTEDVALUE('tbSales'[City])
//计算前N项总计,这里返回的是一个表
VAR vTotal = SUMX(
    FILTER(
        SELECTCOLUMNS(
            ALL('tbSales'),
            "Sales",[Sales],
            "Rank",RANKX(ALL(tbSales),[Sales],,DESC,Dense)  //排名
        ),
        [Rank]<vpar
    ),
    [Sales]
)

RETURN IF(
    //根据City是否为空来判断它是否是总计那一行
    rCity = BLANK(),vTotal,
    IF([SalesRank]>vpar,BLANK(),[TotalSales])
)

 这样,出来的总计就是正确的了:

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值