不要将空白转换为值

作为数据建模器,编写度量值表达式时,可能会遇到无法返回有意义的值的情况。 在这些情况下,你可能会想返回一个值,比如零。 建议仔细确定此设计是否高效实用。

请考虑以下度量值定义,它将BLANK结果明确转换为零。

Sales (No Blank) =
IF(
    ISBLANK([Sales]),
    0,
    [Sales]
)

请考虑另一个度量值定义,该定义还会将结果转换为 BLANK 零。

Profit Margin =
DIVIDE([Profit], [Sales], 0)

DIVIDE 函数将 Profit 度量值除以 Sales 度量值。 如果结果为零,或者 BLANK返回第三个参数(可选结果)。 在此示例中,由于零作为备用结果传递,因此保证度量值始终返回值。

这些度量值设计效率低下,导致报表设计不佳。

当它们被添加到报表视觉对象时,Power BI 试图在筛选器上下文中检索所有分组。 对大型查询结果的评估和检索通常会导致报表呈现速度缓慢。 每个示例度量有效地将稀疏计算转换为密集计算,迫使 Power BI 使用比必要更多的内存。

此外,过多的分组往往使报表用户不知所措。

让我们看看将 利润率 度量值添加到表视觉对象(按客户分组)时会发生什么情况。

Power BI Desktop 的屏幕截图,其中显示了每个客户一行的数据表格显示。销售值为BLANK,利润率值为零百分比。

该表视觉对象显示的行数巨大。 (实际上模型中有 18,484 个客户,因此表尝试显示所有这些客户。请注意,视图中的客户尚未实现任何销售。 然而,由于 利润率 度量值始终返回一个值,因此它们会显示。

注释

当视觉对象中显示的数据点过多时,Power BI 可能会使用数据缩减策略来删除或汇总大型查询结果。 有关详细信息,请参阅 按视觉对象类型的数据点限制和策略

让我们看看 当提高利润率 度量值定义时会发生什么情况。 它现在仅当 Sales 度量值不是 BLANK (或零)时才返回一个值。

Profit Margin =
DIVIDE([Profit], [Sales])

表格可视化现在仅显示在当前筛选上下文中完成销售的客户。 改进的度量值为报表用户提供了更高效且更实用的体验。

Power BI Desktop 的屏幕截图,其中显示了已筛选内容的数据的表视觉对象。

小窍门

必要时,可启用显示无数据的项目选项,将视觉对象配置为显示筛选器上下文中所有的组(即返回值或 BLANK 的组)。

建议

建议无法返回某个有意义的值时,度量值就返回 BLANK。

这种设计方法非常高效,使 Power BI 能够更快地呈现报表。 同时,返回 BLANK 更好,因为在汇总为 BLANK 时报表视觉对象默认会取消分组。