关于 Power BI 中的 DAX 错误提示
本文翻译自国际Power BI大师Marco Russo的文章——《DAX error messages in Power BI》,该文介绍了用户在Power BI中定义DAX表达式时常见的报错提示以及其相应的解决方法。
包含语法错误的DAX表达式会停止执行计算, 这些错误在开发期间会高亮显示,因此它们不应影响报告。出现在有效表达式中的错误提示是不同的,这里不再讨论。
语法错误的DAX表达式会再其下方显示黄色警告符号,如下图所示:
这些错误提示会有助于开发者修复代码,但有时这些文本建议并没有描述底层问题的行为。本文的目的是通过提供更详细的说明并包含其他资料的链接来解释常见的DAX错误消息。
如果某些条款不明确,请查看含链接的相关文章或考虑一些免费的自助式培训,例如Introducing DAX。
1 缺少行上下文
Part 1
以下度量值中显示了一个非常常见的错误。
A single value for column ‘Quantity’ in table ‘Sales’ cannot be determined.
无法确定表“Sales”列中“Quantity”中的某一个值。
当度量公式引用包含许多值的列,且未指定用于获取单一结果的min、max、count或sum等聚合时,可能会发生这种情况。
简短转换:
The Sales[Quantity] column reference does not have a row context.
Sales [Quantity]列引用没有行上下文。
从DAX语法的角度来看,度量值中包含的表达式有两个列引用(Sales [Quantity]和Sales [Net Price]),由于度量值不提供行上下文,因此无法对其进行求值。
行上下文仅在计算列和迭代器中编写的表达式中可用,例如 SUMX, MINX, FILTER, ADDCOLUMNS等。
错误消息的第一部分是具有误导性的,似乎无法确定某一个值是因为在筛选上下文中Sales表存在多行,事实并非如此,因为即使Sales表只有一行,也会出现相同的错误消息。
Power BI提供的错误消息中的第二句提供了一个并不适用于此公式的建议,SUM(table [column])是一种有效的语法,因为SUM接受单个列引用,但是将两列的总和的结果相乘并不是开发者想要实现的,可能想要的预期结果是筛选上下文中活动的Sales表的每一行的Quantity和Net Price之间的乘积之和。
因此,正确的语法是:
请记住, SUM只是 SUMX 的简要写法。SUM语法是:
内部对应于以下SUMX版本:
Part 2
另一种缺少行上下文的情况是以下度量值:
A single value for column ‘Unit Price’ in table ‘Product’ cannot be determined.
无法确定“产品”表中“单价”列的某一个值。
当度量公式引用包含许多值的列,且未指定用于获取单一结果的min、max、count或sum等聚合时,可能会发生这种情况。
这与上一节中的错误相同。我们使用第二个示例的唯一原因是,行上下文确实存在 - 但没有适用的正确的表。
此外,此错误消息的存在表明产品[单价]列确实存在,但无法访问。
因此,不要浪费时间检查列名是否正确,问题是缺少行上下文环境。
如果Product [Unit Price]列是扩展表Sales的一部分,则使用RELATED可以修复公式。
在这种情况下,错误提示中关于使用聚合的建议完全没有没有必要的。
实际上,我们需要从关联表中检索正确的行。尽管错误消息相同,但解决方案完全不同。
2 错误的列引用
此度量值尝试引用的列不存在。
Column ‘Unt Price’ in table ‘Product’ cannot be found or may not be used in this expression.
无法找到表'Product'中的列'Unit Price',也可能在此表达式中无法使用。
在这种情况下,Product [Unit Price]列不存在于数据模型中的任何位置,此错误消息与上一行中描述的错误消息不同。
该消息仅在存在无法访问的现有列的列引用时出现。 此错误消息的修复是找到正确的列名称,以防它拼写错误。
显然,通过使用以下语法,错误消息将更改,因为现在再次出现缺少行上下文问题:
此示例的目的是为了区分错误的列引用和缺少的行上下文之间的不同错误消息。
3 错误的度量值引用
以下度量值尝试引用不存在的度量值。
The value for ‘Sales Amnt’ cannot be determined. Either ‘Sales Amnt’ doesn’t exist, or there is no current row for a column named ‘Sales Amnt’.
无法确定“Sales Amnt”的值。 'Sales Amnt'不存在,或者名为'Sales Amnt'的列没有当前行。
该错误消息类似于错误的列引用显示的错误消息,遵循命名列和度量值引用的best practices的人才能够判断出不同的错误提示。
没有表名的那些计算与缺少的度量值相关(如本示例中所示),而在错误消息中包含表名的那些计算与缺少的列相关。如果不遵循best practices,理解错误消息会变得更加困难; 实际上,目前尚不清楚问题是针对列还是针对度量。
在此示例中,解决方案是修复度量名称:
小结
DAX错误提示可能难以解释,因此开发时请注意细节,并使用本文作为指导,找到修复公式代码的正确操作。
以上为翻译内容,想要阅读原文,
请查阅 ☛ dax-error-messages-in-power-bi
(https://www.sqlbi.com/articles/dax-error-messages-in-power-bi)
- PowerPivot工坊原创文章,转载请注明出处!
如果您想深入学习微软Power BI,欢迎登录网易云课堂试听学习我们的“从Excel到Power BI数据分析可视化”系列课程。点击左下角“阅读原文”可直达云课堂。或者关注我们的公众号(PowerPivot工坊)后猛戳”在线学习”。
长按下方二维码关注“Power Pivot工坊”获取更多微软Power BI、PowerPivot相关文章、资讯,欢迎小伙伴儿们转发分享~
Power Pivot工坊
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)