前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >2.34 PowerBI数据建模-视觉对象计算的应用

2.34 PowerBI数据建模-视觉对象计算的应用

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

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

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