加入 PowerBI自己学 知识星球 可以:下载源文件,边学边练;遇到问题,提问交流,有问必答。通常度量值都会返回数字,但是按要求提取文本并在报告中显示出来也有它的需要场景,比如销售冠军、销量最高的3个SKU、份额最高的前3个竞品等。
解决方案
因为是动态返回前几名,所以不能在数据表中直接新建排名的计算列,而是需要在VAR过程表生成排名列。使用SUMMERIZECOLUMNS可以把字段透视到表中并添加排名列。
按照指定条件筛选后,把名称所在列的值提取到度量值中,如果遇到并列,用分隔符分开。这里相应的文本处理用到的函数是CONCATENATEX。CONCATENATEX可以连接表的每一行的表达式的结果值。
举例
有如下一张销售表,写一个度量值,提取销售前三名人员的名字,用逗号隔开,按照销量降序排列,遇到并列,用人名升序排列。
销售表
度量值
销量:
Sales = SUM(Fact_Sales[销量])
排名:
人员按销量排名,此处为随上下文变化的动态排名,用的ALLSELECTED。
Rank_Rep_BySales = RANK(DENSE, ALLSELECTED(Fact_Sales[人员]), ORDERBY([Sales], DESC))
排名前三的人员:
给上下文中的人员配上一列排名形成一个VAR过程表,取这个表中排名小于等于3的人名列,每一行的值用CONCATENATEX合并到一起,用逗号隔开,按销量降序,遇到销量相同,用人员升序。
TOP3_Rep_BySales =
VAR _vt_Rank = SUMMARIZECOLUMNS(Fact_Sales[人员], "Rank", [Rank_Rep_BySales])
RETURN CONCATENATEX(FILTER(_vt_Rank,[Rank]<=3), [人员], ",", [Sales], DESC, [人员], ASC)
排名前三的人员销量:
像上一个度量值做出VAR过程表后,筛选排名小于等3的行,对销量列求和(此处VAR表中没有销量列,筛选上下文传递到了销量表)。
Sales_Of_TOP3 =
VAR _vt_Rank = SUMMARIZECOLUMNS(Fact_Sales[人员], "Rank",[Rank_Rep_BySales])
RETURN SUMX(FILTER(_vt_Rank,[Rank]<=3), [Sales])
在画布中,不区分产品,前三名是赵六、王五、张三,销量为97;产品A的前三名是赵六、王五、张三和李四,销量为110;产品B的前三名是张三、李四、王五,销量为9。
拓展
SUMMERIZECOLUMNS在2024年6月以前的PowerBI版本,仅用于生成计算表,不可用于度量值,打通上下文后,现已支持用于度量值。在2024年6月以前,可以通过ADDCOLUMNS+SUMMERIZE实现透视和新增列。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有