新 DAX 函数--COALESCE 用法介绍


本文翻译自国际Power BI大师Alberto Ferrari&Marco Russo的文章——《The COALESCE function in DAX》,COALESCE是2020年3月引入的DAX函数。本文介绍了COALESCE的作用以及如何通过去掉冗长的条件来简化DAX表达式,但仍能获得相同的结果。

为可能为空的计算结果提供默认值是编写DAX代码的常见需求。解决此需求的经典方法是使用If语句。例如,下面的代码返回Sales[Net Price]列或Sales[Unit Price]列的值,以最先不为空的值为准:

IF (
    ISBLANK ( Sales[Net Price] ),
    Sales[Unit Price],
    Sales[Net Price]
)

当考虑的表达式是度量值而不是列引用时,最佳的做法是将第一个度量值的结果保存在变量中。该变量通过确保仅对度量值进行一次评估来提高性能:

VAR MyResult = [MyMeasure]
VAR DefaultValue = [Default Measure]
VAR Result =
IF (
ISBLANK ( MyResult ),
DefaultValue,
MyResult 
)
RETURN
Result

这个表达式的替代方法需要对同一个MyMeasure度量进行两次引用,这可能导致对同一个表达式求双重值以获得相同的结果。以下表达式第一次计算MyMeasure以测试其值是否为空,如果MyMeasure返回非空值,则第二次计算IF函数的结果:

IF (
ISBLANK ( [MyMeasure] ),
[Default Measure],
[MyMeasure]
)

通过使用COALESCE函数,代码更具可读性。COALESCE实现了与前面例子相同的逻辑,评估它的参数并返回第一个非空的参数:

COALESCE ( [MyMeasure], [DefaultMeasure] )

COALESCE接受多个参数并返回第一个非空参数。如果第一个参数为空,则COALESCE返回第二个参数中的表达式提供的值,依此类推。如果所有参数都是空的,COALESCE也返回空。

例如,考虑一个用以显示产品价格的度量,例如,考虑使用没有销售交易的平均销售额[净价]或使用产品[单价]列显示产品价格的度量。如果没有COALESCE,则度量如下所示:

Price =
VAR AvgPrice =
AVERAGE ( Sales[Net Price] )
VAR UnitPrice =
SELECTEDVALUE ( 'Product'[Unit Price] )
VAR Result =
IF (
ISBLANK ( AvgPrice ),
UnitPrice,
AvgPrice 
)
RETURN
Result

通过使用COALESCE,代码变得更加简单:

Price =
VAR AvgPrice =
AVERAGE ( Sales[Net Price] )
VAR UnitPrice =
SELECTEDVALUE ( 'Product'[Unit Price] )
VAR Result =
COALESCE ( AvgPrice, UnitPrice )
RETURN
Result

在性能方面,COALESCE实现了IF条件。因此,您不应期望后一个基于COALESCE的代码比前一个基于IF的示例更快。但是,使用COALESCE可以提高可读性,这是使用它的重要原因。此外,在以后的DAX引擎版本中,可以进一步优化COALESCE的行为,从而使COALESCE功能最终可以改善性能。

  • PowerPivot工坊原创文章,转载请注明出处!

    如果您想深入学习微软Power BI,欢迎登录网易云课堂试听学习我们的“从Excel到Power BI数据分析可视化”系列课程。或者关注我们的公众号(PowerPivot工坊)后猛戳”在线学习”。


长按下方二维码关注“Power Pivot工坊”获取更多微软Power BI、PowerPivot相关文章、资讯,欢迎小伙伴儿们转发分享~

Power Pivot工坊