假设有这么一张表--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])
- )
这样,出来的总计就是正确的了:
