Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2.26 PowerBI数据建模-排名前三的人名及销量(SUMMERIZECOLUMNS+CONCATENATEX)

2.26 PowerBI数据建模-排名前三的人名及销量(SUMMERIZECOLUMNS+CONCATENATEX)

原创
作者头像
PowerBI自己学_轻松
发布于 2025-02-24 12:02:48
发布于 2025-02-24 12:02:48
720
举报
文章被收录于专栏:PowerBI入门100例PowerBI入门100例

加入 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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档