加入 PowerBI自己学 知识星球 可以:下载源文件,边学边练;遇到问题,提问交流,有问必答。
视觉对象计算(Visual Calculations,也有译为视觉计算、可视化计算),顾名思义,是在视觉对象中展示的数字基础上再进行计算,类似于在Excel上面做单元格之间的计算。
度量值也可实现视觉对象计算的效果,有些情况下,视觉对象计算操作更简单、性能更好,但是视觉对象计算只存在具体的视觉对象中,不存在模型里,所以不利于从模型中调用和重复利用。鉴于此,视觉对象计算是一种补充的计算方式,它的应用场景主要是,在某个视觉对象中进行一次性计算,替代只用于报告页面的复杂逻辑度量值或提升报告页面的刷新性能。
视觉对象计算可以直接调用字段,也可以使用一些移动函数对视觉对象中的数字进行调用,还可以用一些现成的视觉对象函数或DAX函数。
使用此功能还需注意,使用了此功能的视觉对象,切换到不支持此功能的视觉对象类型,视觉对象计算将被移除。
举例
1 直接调用字段,计算达成率=达成/目标。
STEP 1 在画布中选中视觉对象,点击菜单栏主页下的新建计算。输入视觉对象计算的公式,它可以直接调用视觉对象中的字段,类似计算列。
STEP 2 格式设置。视觉对象的格式设置,请不要直接在公式中使用FORMAT函数,这样会将结果转为文本。在格式窗格的属性中,Data format下“将设置应用于”选择达成率,输入需要显示的格式字符串。
STEP 3 如需修改视觉对象计算的公式,选中视觉对象后,在字段窗格点击字段向右箭头-编辑计算,可再次回到公式编辑窗口。
结果如下:
2 用PREVIOUS取上一行,如果维度是连续的日期,对比结果就是环比。
STEP 1 在画布中选中视觉对象,点击菜单栏主页下的新建计算。输入视觉对象计算的公式,此处使用PREVIOUS函数调用之前的值。
环比 =
VAR _vm_Pre = PREVIOUS([达成 的总和],1,ROWS,2)
RETURN DIVIDE([达成 的总和]-_vm_Pre, _vm_Pre)
PREVIOUS函数的语法如下,可用作其他视觉对象计算函数的参考,本质是在矩阵视觉对象矩阵中按需求平移取数。
PREVIOUS ( <column>[, <steps>][, <axis>][, <blanks>][, reset] )
<column>:取值字段。
<steps>:向前几步,默认是1。
<axis>:移动方向,值字段被行字段和列字段拆分为视觉对象矩阵,ROWS代表是垂直上下跨行移动,COLUMNS代表水平左右跨列移动,ROWS COLUMNS代表先上下后左右,ROWS COLUMNS代表先左右后上下。默认是按第一个轴移动,通常是ROWS。视觉对象中可能只有行字段或列字段中的一个,按实际情况选择参数。
<blanks>:如果维度字段有空值,FIRST是把空值放在最前面,LAST是把空值放在最后面,默认是空值在数字类型的负值和0之间,在文本类型的最前面。
<reset>:类似窗口函数,设定一个取数范围。NONE是不设范围,从头取到尾;HIGHESTPARENT是将最高层的父级字段作为范围;LOWESTPARENT是将最后一层父级字段(倒数第二个字段)作为范围。默认是NONE。也可以用数字做参数,0和NONE对应,最高的父级字段为1,往后一个字段依次增加1。
STEP 2 格式设置。
结果如下:
3 用ROWNUMBER为表视觉对象增加行号。
因为行号是在表视觉对象生成后再进行统计的,所以使用视觉对象计算更简单。点击新建计算,输入公式,修改格式,调整字段的前后顺序。其中ISATLEVEL函数用来判断是否非小计行。
#Rows = IF(ISATLEVEL([列 1]), ROWNUMBER())
4 帕累托分析中的累计求和、总和、累计占比、ABC分类。
STEP 1 书写视觉对象计算的公式。
累计求和:可以用现成的视觉对象函数RUNNINGSUM,也可以使用WINODW函数。
累计求和RUNNINGSUM = RUNNINGSUM([达成 的总和])
累计求和WINDOW =
CALCULATE (
SUMX ( ROWS, [达成 的总和] ),
WINDOW ( 1, ABS, 0, REL, ORDERBY ( [达成 的总和], DESC ) )
)
总和:使用COLLAPSEALL函数,清除层级的上下文。
总和 = COLLAPSEALL([达成 的总和], ROWS)
累计占比:
累计占比 = DIVIDE([累计求和RUNNINGSUM], [总和])
ABC分类:
ABC分类 =
VAR _vm_Class =
SWITCH (
TRUE,
[累计占比] <= 0.7, "A",
[累计占比] <= 0.9, "B",
"C"
)
VAR Result = IF ( ISATLEVEL( [人员] ), _vm_Class)
RETURN
Result
STEP 2 累计占比中总和可以通过VAR实现。当然,如果视觉对象中不需要显示某个列(度量值或视觉对象计算),可以在视觉对象的字段中,点击字段右侧的小眼睛将其隐藏。
设置格式后,结果如下:
注意:帕累托是从大到小累加,需要在视觉对象中按照达成的总和列降序排列。
拓展
视觉对象计算的更多知识,可以访问sqlbi.com网站查看《视觉对象计算白皮书》获得更多的功能介绍和举例。
https://www.sqlbi.com/whitepapers/understanding-visual-calculations-in-dax/
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。