计算对象需要表达式
概览
此最佳做法规则会识别缺少 DAX 表达式的度量值、计算列和计算项。 所有计算对象都必须包含有效且非空的表达式,才能正常运行,并避免在模型部署和查询执行期间发生错误。
类别:错误预防
严重性:高(3)
适用范围
- 度量值
- 计算列
- 计算项
为何这很重要
没有表达式的计算对象会导致严重故障:
- 模型验证错误:模型在保存或部署时将无法通过验证
- 查询失败:在查询中尝试使用该对象将产生错误
- 依赖关系中断:引用该对象的其他度量值或计算将失败
- 部署受阻:Power BI Service 和 Analysis Services 会拒绝包含空表达式的模型
- 意外行为:该对象可能会出现在字段列表中,但不返回任何结果
空表达式通常源于对象创建未完成、复制/粘贴操作,或以编程方式生成模型时出现错误。
该规则何时触发
当以下任一对象的表达式为空或仅包含空白字符时,将触发此规则:
string.IsNullOrWhiteSpace(Expression)
适用于:
- 度量值:应包含 DAX 聚合或计算
- 计算列:应包含行上下文的 DAX 表达式
- 计算项:应包含用于修改基础度量值的 DAX 表达式
如何修复
手动修复
- 在 TOM Explorer 中,找到相应的度量值、计算列或计算项
- 双击打开 DAX编辑器
- 输入有效的 DAX 表达式
- 验证语法并保存
常见原因
原因 1:创建未完成
对象已创建,原本打算稍后再定义,但最后忘了。
原因 2:基于模板创建
脚本或模板创建了对象,但未包含表达式。
原因 3:复制操作失败
复制了对象,但表达式没有一并复制过来。
示例
修复前
度量值: [Total Revenue]
Expression: [empty]
FormatString: $#,0.00
查询时出错:"度量值 '[Total Revenue]' 的表达式无效。"
修复后
度量值: [Total Revenue]
Expression: SUM('Sales'[Revenue])
FormatString: $#,0.00
结果:度量值可正常工作,并返回汇总后的收入。
兼容级别
本规则适用于兼容级别为 1200 及以上的模型。