2024 年对于 Power BI 来说是一个充满创新和进步的年份。作为全球领先的商业智能工具,Power BI 在这一年不断优化功能、扩展能力,为数据分析师和商业用户带来了更多的价值与可能性。其中最重要的功能应该是视觉对象计算,虽然视觉对象计算已经推出了十个月,但是有不少小伙伴并不知道如何使用,本文将带你全面了解 Power BI 中的视觉对象计算功能。
视觉对象计算是直接在视觉对象上定义和执行的 DAX 计算。通过视觉对象计算,可以更轻松地创建以前难以创建的计算,从而简化 DAX、简化维护,带来更好的性能。它的核心思想是:用户看到的数据是计算的输入,而计算的结果直接反映在视觉对象中。
视觉对象计算可以引用视觉对象中的任何数据(数据必须存在于视觉对象之上,包括列、度量值或其他视觉对象计算)。
视觉对象计算不同于 DAX 中的其他计算选项:
• 视觉对象计算不会存储在模型中,而是存储在视觉对象上。这意味着视觉对象计算只能引用视觉对象上的内容。必须先将模型中的任何内容添加到视觉对象,然后视觉计算才能引用该视觉对象,从而释放视觉计算,使其与筛选器上下文和模型的复杂性相关。
• 视觉计算将计算列中上下文的简单性与度量值按需计算的灵活性相结合。
• 与度量值相比,视觉计算对聚合数据(而不是细节级别)进行操作,通常会带来性能优势。当可以通过新度量值或视觉计算实现计算时,后者通常会带来更好的性能。
• 由于视觉计算是视觉对象的一部分,因此可以引用视觉结构,从而提高灵活性。
可用函数
可以在视觉计算中使用许多现有的 DAX 函数。由于视觉计算在视觉矩阵的范围内工作,因此依赖于模型关系的函数不可用。视觉计算还引入了一组特定于视觉计算的函数。其中许多函数更易于使用 DAX 窗口函数的快捷方式。
函数 | 说明 | 示例 |
COLLAPSE | 计算在轴的较高级别计算。 | 父级百分比 = DIVIDE([Sales Amount], COLLAPSE([Sales Amount], ROWS)) |
COLLAPSEALL | 计算在轴的总级别计算。 | 总计百分比 = DIVIDE([Sales Amount], COLLAPSEALL([Sales Amount], ROWS)) |
EXPAND | 计算在轴的较低级别计算。 | 子级平均值 = EXPAND(AVERAGE([Sales Amount]), ROWS) |
EXPANDALL | 计算在轴的叶级别计算。 | 叶级别的平均值 = EXPANDALL(AVERAGE([Sales Amount]), ROWS) |
FIRST | 指轴的 first 行。 | ProfitVSFirst = [Profit] – FIRST([Profit]) |
ISATLEVEL | 报告指定列是否存在于当前级别。 | IsFiscalYearAtLevel = ISATLEVEL([Fiscal Year]) |
LAST | 指轴的 last 行。 | ProfitVSLast = [Profit] – LAST([Profit]) |
MOVINGAVERAGE | 在轴上添加移动平均。 | MovingAverageSales = MOVINGAVERAGE([Sales Amount], 2) |
NEXT | 指轴的 next 行。 | ProfitVSNext = [Profit] – NEXT([Profit]) |
PREVIOUS | 指轴的 previous 行。 | ProfitVSPrevious = [Profit] – PREVIOUS([Profit]) |
RANGE | 指轴的 rows 的切片。 | AverageSales = AVERAGEX(RANGE(1), [Sales Amount]) |
RUNNINGSUM | 在轴上添加一个正在运行的求和。 | RunningSumSales = RUNNINGSUM([Sales Amount]) |
计算模板
之前使用其他计算选项需要编写很复杂的 DAX 语句才能实现的功能,使用视觉对象计算,一个函数就能搞定,因为视觉对象计算为我们内置了九个计算模板。
计算模板:
• 运行求和。 计算值的总和,将当前值与前面的值相加。使用 RUNNINGSUM 函数。
• 移动平均。 通过将值的总和除以 window 的大小,计算给定 window 中一组值的平均值。使用 MOVINGAVERAGE 函数。
• 父级百分比。 计算相对于其父级的值的百分比。使用 COLLAPSE 函数。
• 占总计的百分比。 使用 COLLAPSEALL 函数计算值相对于所有值的百分比。
• 子级的平均值。 计算子值集的平均值。使用 EXPAND 函数。
• 与之前相比。 使用 PREVIOUS 函数将值与前面的值进行比较。
• 与下一个。 使用 NEXT 函数将值与后续的值进行比较。
• 与第一。 使用 FIRST 函数将值与 first 值进行比较。
• 与上一个。 使用 LAST 函数将值与 last 值进行比较。
轴
许多视觉对象函数都有一个可选的 轴 参数,该参数只能在视觉计算中使用。轴影响视觉计算遍历视觉矩阵的方式。默认情况下,轴参数设置为视觉对象中的 first 轴。对于许多视觉对象,first 轴为 ROWS,这意味着视觉计算从上到下计算视觉对象矩阵中的逐行计算。
下表显示了轴参数的有效值:
应用
视觉对象计算更新之后,我们介绍了许多使用视觉对象计算实现的案例,这些往往是传统 DAX 计算难以实现的。
一个函数实现动态移动平均,参考:PowerBI 新手必读:可视化计算构建动态移动平均
PREVIOUS 函数获取上一周期数据。
NEXT 函数获取下一周期数据。
RUNNINGSUM 函数获取年初至今数据。
COLLAPSE、COLLAPSEALL 实现不同级别占比计算。
以上实现参考:PowerBI 进阶:可视化计算替代 DAX 场景探索
排名问题是 DAX 计算的经典问题,用其他 DAX 计算需要理解上下文概念,使用视觉对象计算就可以避开这些上下文理解,从而更好地理解和处理排名问题。参考:排名问题新解法:探索可视化计算中的 RANK 函数
ABC 分析是一个重要的分析模型,其中最关键的是计算出累计占比,度量值计算累计占比如下。不仅需要复杂的 DAX,还需要你理解各种上下文。
使用视觉对象计算实现累计占比如下,简单好用,无需理解上下文,并且性能更优。
实现参考:看了就会!PowerBI 视觉计算搞定 ABC 分析
除了 ABC 分析,在实现复杂瀑布图时,视觉对象计算也能简化我们的计算过程,实现参考:PowerBI 可视化再进阶:瀑布图最佳实践
总结
2024 年,Power BI 推出的视觉对象计算功能大幅简化了复杂计算的实现过程,通过内置函数如 COLLAPSE、RUNNINGSUM 和 EXPAND 等,用户无需理解复杂的 DAX 上下文即可轻松完成动态求和、移动平均、排名计算等任务。这一功能不仅提升了性能,还增强了报告的交互性和灵活性,让分析更高效、直观且易于维护。无论是初学者还是高级用户,掌握视觉对象计算都将显著提升 Power BI 的使用体验,为数据分析带来更多可能性。
制造行业数字化案例
客户简介:大型高新技术制造企业
案例介绍:大型高新技术制造企业管理驾驶舱应用与成效(4)
(以上数据已严重脱敏,且图片不清晰,仅供参考思路)
如果您也在寻找类似的解决方案,欢迎扫描文末二维码联系我们,共同探索适合您企业的数字化运营策略!
一更专业的数据分析师训练营一
🔍【企业咨询】:十大行业,十大领域,企业案例,咨询,培训,实施。
🔗 如何获取更多信息?扫描下方二维码具体咨询。
点击“阅读原文”获取更多资源