网站首页 > 开源技术 正文
在一个风和日丽的早上我蹦蹦跳跳的来到公司上班
打开电脑,发现客户发来一条消息:
“昨天的报表我需要添加一个功能!要按照销售额显示出前三名的店铺!”
好的没问题!
先看数据源:
Q1:如何显示销售额前三名的店铺?
1秒钟时间思考。
...
时间到。
很简单,使用筛选器就可以实现。
结果如下:
将修改发给客户,掏出包里的早餐。还没咬下第一口,客户又发来一条消息:
“我想自己选择显示的条数,快实现一下!”
我放下手里的茶叶蛋……
Q2:如何显示销售额前N名的店铺?
思路:
显示前N名,那么就需要对店铺根据销售额进行排名,选择展示前N名的店铺。DAX中排名的函数我们选择RANKX()
返回表的参数列中每行数字在列表中的排名。
<table>为表名,<expression>可以是任何返回单个标量值的DAX表达式。
后面三个参数为可选参数,分别对应“想查找其排名的单个目标值”、排序方式和遇到重复值时的排序规则。
首先建立参数表_N,这里我们提供3,5,10,50四个可选值(此处可根据业务情况进行更改)。
将参数表N生成切片器,实现点选功能。
利用IF嵌套RANKX,建立度量值如下:
显示前N名租户 = IF ( RANKX ( ALL (Data[店铺] ), [_销售额],, ) <= MAX ('参数表_N'[N] ), [_销售额], -1 )
其中MAX()函数的作用是当没有选择切片器时,默认返回参数表中的最大值。
将度量值【显示前N名租户】添加到值字段,显示结果如下:
将修改后的文件发给客户,拿起已经没有热气的茶叶蛋。
微信又闪烁起来!
“不能倒序吗?我想看倒数的怎么办?”
Q3:如何显示销售额TOP N或者BOT N的店铺?
TOP N 或者BOT N的控制,也就是改变RANKX中的排序方式,之后再选择前N名。这里会用到RANKX的Order参数项。
同样,首先建立参数表_Sort,来选择前N还是后N:
选择Bottom N,也就是升序ASC排名,选择前N;
选择Top N,也就是降序DESC排名,选择前N。
建立度量值:
显示前N + 排序 = IF ( SELECTEDVALUE ( '参数表_Sort'[Sort] ) = "Bottom N", IF ( RANKX ( ALL ( Data[店铺] ), [_销售额],, ASC, SKIP ) <=MAX ( '参数表_N'[N] ), [_销售额], 0 ), IF ( RANKX ( ALL ( Data[店铺] ), [_销售额],, DESC, SKIP )<= MAX ( '参数表_N'[N] ), [_销售额], 0 ) )
通过 SELECTEDVALUE连接参数表_Sort,使Sort切片器可以控制度量值。然后通过IF的嵌套实现选择不同排序方式时,RANKX的排序方式的变化。
在这里RANKX的第五参数选择skip,也就是遇见相等值采用跳跃排名。
结果如下:
需要注意的是,这里因为IF函数中FALSE的返回值是0,所以筛选器这里要把0排除掉。
再次将文件发给客户,我看着已然没有了灵魂的茶叶蛋,再看看时针已经指到了11点。算了,该吃午饭了。
滴滴滴……
“可以按照指标排序吗?比如,按照销售额?按照租金?按照销售额和租金?”
好的我试试【微笑】。
Q4:如何通过维度表控制按照某个或多个指标筛选TOP N还是BOT N??
通过数据表可知,每家店铺有四个指标:
那么如何实现通过选择不同的KPI指标,来筛选Top N还是 Bottom N呢?
首先,先建立KPI的维度表并生成切片器:
在这里会发现,之前采用的直接显示度量值的方法已经不适用了,因为这里我们要显示四个维度KPI的值。
首先,拉出一个矩阵:
我们只需要控制店铺名称就可以达到目的。
思路如下:N 和排序的控制和之前一样,关键在于如何实现某个或多个KPI共同控制筛选。
如果一家店铺满足多个KPI都是前N的条件,那么一定是“且”的逻辑关系成立。
若单个KPI筛选成立的情况下,返回1,不成立返回0,多个条件的返回值进行“乘法”操作,那么就可以实现“且”的逻辑关系。
最后通过将判定度量值添加到视觉筛选器,筛选返回值为1的店铺名称,即为满足需求。
最终度量值如下,IF多层嵌套比较长但是并不复杂,其中KPI的选择用到了 IN 函数。
综合排名 = IF ( SELECTEDVALUE ( '参数表_Sort'[Sort] ) = "Bottom N", IF ( "销售额" IN VALUES ( '参数表_KPI'[KPI] ), IF ( RANKX ( ALL ( Data[店铺] ), [_销售额],, ASC ) <= MAX ('参数表_N'[N] ), 1, 0 ), 1 ) * IF ( "销售坪效" IN VALUES ( '参数表_KPI'[KPI] ), IF ( RANKX ( ALL ( Data[店铺] ), [_销售坪效],, ASC ) <= MAX ('参数表_N'[N] ), 1, 0 ), 1 ) * IF ( "租金" IN VALUES ( '参数表_KPI'[KPI] ), IF ( RANKX ( ALL ( Data[店铺] ), [_租金],, ASC ) <= MAX ('参数表_N'[N] ), 1, 0 ), 1 ) * IF ( "租金坪效" IN VALUES ( '参数表_KPI'[KPI] ), IF ( RANKX ( ALL ( Data[店铺] ), [_租金坪效],, ASC ) <= MAX ('参数表_N'[N] ), 1, 0 ), 1 ), IF ( "销售额" IN VALUES ( '参数表_KPI'[KPI] ), IF ( RANKX ( ALL ( Data[店铺] ), [_销售额],, DESC ) <= MAX( '参数表_N'[N] ), 1, 0 ), 1 ) * IF ( "销售坪效" IN VALUES ( '参数表_KPI'[KPI] ), IF ( RANKX ( ALL ( Data[店铺] ), [_销售坪效],, DESC ) <= MAX( '参数表_N'[N] ), 1, 0 ), 1 ) * IF ( "租金" IN VALUES ( '参数表_KPI'[KPI] ), IF ( RANKX ( ALL ( Data[店铺] ), [_租金],, DESC ) <= MAX( '参数表_N'[N] ), 1, 0 ), 1 ) * IF ( "租金坪效" IN VALUES ( '参数表_KPI'[KPI] ), IF ( RANKX ( ALL ( Data[店铺] ), [_租金坪效],, DESC ) <= MAX( '参数表_N'[N] ), 1, 0 ), 1 ) )
筛选器设置如下:
最终展示结果如下:
按住CTRL可以选择多个指标排序。
保存文件,发送客户。门外响起了外卖小哥的敲门声。午饭到咯~
总结
以实际业务需求为切入点,层层深入,将维度做成切片器,并实现复杂的筛选控制。
利用本文中的技巧,可以极大的减少重复性报表的空间占用,通过维度切片器筛选指标,做到最大限度的融合利用。
满足你对TOP N的无数种需求~!
需要源文件的小伙伴可以在后台私信或在评论区留下自己的邮箱~
本期内容就是这些,我们下期再见!
* PowerPivot工坊原创文章,转载请注明出处!
延伸阅读:
如果您想深入学习微软Power BI,欢迎登录网易云课堂试听学习我们的“从Excel到Power BI数据分析可视化”系列课程。或者关注我们的公众号(PowerPivot工坊)后猛戳”在线学习”。
长按下方二维码关注“Power Pivot工坊”获取更多微软Power BI、PowerPivot相关文章、资讯,欢迎小伙伴儿们转发分享~
猜你喜欢
- 2024-10-31 用数据说话丨ATP四大满贯胜率前四
- 2024-10-31 刘天时《今朝有酒今朝醉》快速蹿红反响热烈 排行榜前十
- 2024-10-31 推广中怎么用TOP-N分析(topn推荐算法)
- 2024-10-31 对话中来股份总裁林建伟:TOPCon赛道也有分水岭
- 2024-10-31 阿特斯:N型TOPCON电池组件计划在Q3试生产 Q4进入正式量产
- 2024-10-31 中来光电:N 型 TOPCon 单晶双面光伏电池组件上榜国家级制造业单项冠军
- 2024-07-22 FIFA盘带能力TOP15:梅西榜首 MNM包揽前三
- 2024-07-22 Oracle查询top n条数据,查询中间若干条数据:Oracle第一篇
- 2024-07-22 超强性能提升,Android N 新特性详解
- 2024-07-22 LPL季后赛:Xx惨遭SNG中野暴打?解说一语道出TOP失利的真相!
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)