Table of Contents

代码操作 DI008(改进)移除多余的 CALCULATE

描述

在不必要时,请勿显式调用 CALCULATECALCULATETABLE

示例 1:无筛选语境修饰项的度量值引用

在下面的示例中,[Total Sales] 是一个度量值引用。

将:

CALCULATE([Total Sales])

改为:

[Total Sales]

示例 2:行语境中的度量值引用

将:

AVERAGEX(Product, CALCULATE([Total Sales]))

改为:

AVERAGEX(Product, [Total Sales])

示例 3:常量值不受筛选语境修改的影响

将:

VAR _salesWithTax = [Total Sales] * 1.25
RETURN
    CALCULATE(_salesWithTax, Product[Color] = "Red")

改为:

VAR _salesWithTax = [Total Sales] * 1.25
RETURN
    _salesWithTax

为什么 Tabular Editor 会建议这样做?

CALCULATE 函数用于修改计算的筛选语境,并在需要时强制进行语境转换。 但是,如果表达式不会受到语境转换的影响,且筛选语境未被修改,那么 CALCULATE 函数就是多余的,可以移除(示例 1)。 这样可以让代码更易读、更易理解。

此外,如果 CALCULATE 函数仅用于强制进行语境转换而不修改筛选语境(即不包含任何筛选参数),且表达式只是一个简单的度量值引用,那么也可以移除 CALCULATE 函数(示例 2),因为度量值引用在行语境中求值时会隐式发生语境转换。

最后,如果表达式是常量(例如引用在 CALCULATE 函数外部用 VAR 定义的变量,如上方示例 3 所示),那么修改后的筛选语境不会影响表达式结果,因此包含所有筛选参数的 CALCULATE 函数也可以移除。