了解 CALCULATE 函数

已完成

本单元结束后,你会充分了解 CALCULATE 函数如何是 Power BI 中用途最广泛的函数之一。

你可在高级别上控制行和筛选器上下文。 借助 CALCULATE 函数,可以添加筛选器,可以关闭它们,并且可以更新它们。 这便是一个函数所具备的强大功能!

使用 CALCULATE 添加筛选器

首先了解如何使用 CALCULATE 函数添加筛选器。

使用 CALCULATE 函数添加筛选器时会引用的数据表。

你在前面的数据表中会获得总销售额:

Total Sales = SUM( [Sales Amount] )

还会获得总销售额的筛选版本,在其中计算总销售额并应用飞机筛选器上下文:

Airplane Sales = CALCULATE( [Total Sales], 'Product Details'[ItemGroup] = "Airplane" )

提示

与 TABLEAU 的关联:以下代码片段演示了如何在 Tableau 中进行相同的计算:Airplane Sales = IF [ItemGroup] = "Airplane" THEN SUM([Sales Amount] ELSE 0 END)

使用 CALCULATE 忽略筛选器

接下来,如何使用 CALCULATE 函数忽略筛选器。

使用 CALCULATE 函数忽略筛选器时会引用的数据表。

在前面的数据表中,在一列中获得了按州分类的总销售额,在下一列中获得了按所有地理位置分类的总销售额。 当希望对每个州(或行)的总计百分比进行分析时,此列会十分有用。

在 DAX 中实现总计百分比的最常见方法是通过 ALL 函数。

Total Sales All Geo = CALCULATE( [Total Sales], ALL( Geography ) )

在上面的代码中,你会看到 Geography 表,并指示在其中包含所有值;不要缩小筛选器上下文。

提示

与 TABLEAU 的关联:以下代码片段演示了如何使用 EXCLUDE LOD 表达式在 Tableau 中进行相同的计算:Total Sales All Geo = { EXCLUDE [State], [City] : SUM([Total Sales]) }

不同的忽略筛选器示例会如下所示:

使用 CALCULATE 函数忽略筛选器时会引用的数据表。

在前面的表中,你获得了按州分类的总销售额、按所有地理位置(排除所有地理位置筛选器)分类的总销售额,最后,你会获得按所有州分类的总销售额,但仍在应用城市筛选器。

基于该图,城市 Alexandria 存在于多个州中。 因此,你只是要获得将 Alexandria 作为城市的那些州的总销售额:

Total Sales All States = CALCULATE( [Total Sales], ALL( Geography[State] ) )

提示

与 TABLEAU 的关联:这演示了如何使用 EXCLUDE LOD 表达式在 Tableau 中进行相同的计算。 你会注意到,此 LOD 表达式在粒度方面与其他表达式不同。 使用此表达式,你只需从视图中排除州,而不是州和城市:Total Sales All States = { EXCLUDE [State] : SUM([Total Sales]) }

使用 CALCULATE 更新筛选器

最后,突出显示 CALCULATE 函数的有用性的最后演练是通过更新筛选器来实现。

使用 CALCULATE 函数更新筛选器时会引用的数据表。

在前面的数据表中,你获得了整体总销售额(忽略年份)、视觉对象中由切片器应用的筛选器上下文中采用的总销售额,最后一列是仅仅 2018 年的总销售额。

若要获得“2018 Sales”列,需要编写如下所示的内容:

2018 Sales = CALCULATE( [Total Sales], DATE[Year] = 2018 )

提示

与 TABLEAU 的关联:此内容十分有趣,因为似乎没有直接的 Tableau 比较。 若要在 Tableau 中执行此操作,需要复制字段、引入补充数据源,或对每个列都进行计算。

Tableau,当前不可用。Power BI,通过使用 CALCULATE 函数更新筛选器来控制筛选上下文。

让我们总结一下在本 CALCULATE 单元中查看的内容:

  • 任何表达式都可以作为第一个参数。

  • 表达式会查看页面上的所有筛选器上下文(可视化效果的切片器)。

  • 如果筛选器存在,则会添加它。

  • 如果有筛选器已在筛选器列表中并且它与页面上下文相同,则它会替代该筛选器。

  • 除去所有这些细微差别(在上面列出),它最终会计算表达式。

注意

显然,你应在检查答案之后才执行此操作,以便真正了解操作顺序。 你应该问自己“我的筛选器是否已取消?”