文/陆文捷
物流供应链优化分析师,Power BI爱好者,知乎:Beethovenist
Power BI的DAX不但能用来动态敏捷计算解决业务问题,还能控制可视化图表的展现,可谓里外一把抓的能手。本文通过一个示例,来体验DAX别样的威力吧~
预设场景:建立一个订单ID-产品名称-订购数量的明细。Power BI的默认显示样式,不论是表格还是矩阵,无外乎隔行交错显示,像下图这样:
或者表头+表体+汇总行的三段式分布,像这样:
这样的布局在视觉上无法一目了然地定位每个订单ID的明细。通过DAX,则可以实现这样的排布,
相同订单ID的背景颜色一致并交错分布,这样就可以更直观按颜色来区分不同ID的订单明细,是不是很清晰呢?
实现的原理是利用DAX构建度量值,分两步实现:
1、对订单ID按字段值进行排名 2、用上一步的排名度量值的奇偶性定义报表字段的背景色下面进入详细的实现步骤,对订单ID排名需要用到RANKX函数,同学们可以参考星主的文章学习。
度量值代码如下:
这个度量值的逻辑是:
1.通过VAR构建所选订单ID的中间表,作为RANKX的第一参数 2.通过VAR获取当前上下文的订单ID 3.获取对当前订单ID在报表中的订单ID 排名。这里用到了RANKX的第三参数,也就是当前订单ID值,该ID会在订单ID列中迭代获相应排名将这个度量值放到矩阵里看看效果:
接着用排名数值是否可以整除2定义奇偶性:
订单ID.ColorIndex = MOD ( [Rank.订单ID], 2 )
其返回结果是0(偶数)或1(奇数):
至此DAX函数构建完成。
最后就是利用条件格式,来编辑报表字段背景颜色,按0或1指定两种不同颜色:
稍显麻烦的是每一个报表字段都得按同样的步骤设置一次,希望微软在后续的版本更新里可以提供全字段设置的选项。
全部定义之后就能实现上面介绍的按不同的订单ID来交错显示背景颜色了。
类似的,还可以对字体,图标等进行动态的定义控制,来实现默认类型之外的布局风格。
总结
本文的DAX驱动可视化原理类似于Excel借助辅助列设置条件格式的方法。通过构建中间表->按特定字段排名->建立辅助度量值并定义格式的步骤实现。实践中对RANKX的第三参数使用也加深了理解。伙伴们也可举一反三,实现更多灵活多变的控制。
参考文章:
https://www.sqlbi.com/articles/applying-color-banding-by-document-number-in-power-bi/ 示例源数据来自于@BI佐罗老师PBI练习素材 -精彩推荐- 如果你刚开始学习Power BI,可在微信公众号后台回复"PowerBI",获取《七天入门PowerBI》电子书,轻松上手。 成为PowerBI星球会员 ,获取更多学习资源 ↑ 扫码加入,和2.3k+ 学习者一起成长