Excel DAX 公式错误


编写时可能会出错 DAX 公式 语法错误。计算字段和计算列可以包含需要特定类型参数的 DAX 函数。 DAX 函数的参数可以是表、列或其他 DAX 函数(嵌套 DAX 函数)。由于 DAX 函数可以返回表和列,因此应注意检查是否将正确类型的参数传递给 DAX 函数。

DAX 公式错误可能是语法错误或语义错误。错误可能发生在设计时或运行时。

在本章中,你将了解一些常见的 DAX 错误、它们的原因以及如何修复这些错误。

DAX 错误:计算中止


尝试通过 DAX 时间智能函数创建(设计时)或使用(运行时)计算字段时,可能会发生以下错误。在每种情况下,都会将不连续的日期范围传递给时间智能函数。

“DAX 错误:计算中止:MdxScript (instance) (00, 0) 函数‘DATEADD’仅适用于连续日期选择。”

运行时原因

如果将具有 DAX 时间智能功能的计算字段放置在数据透视表的 VALUES 区域中,并且在选择年份之前选择月份或季度等日期字段作为切片器或过滤器,则可能会显示此错误。例如,如果你有三年的数据(2014 年、2015 年和 2016 年),并且你尝试仅使用 March 月份而不选择 Year 字段,则这些值不是连续的数据值,你将收到错误消息。

如何在运行时修复错误?

在上面的例子中,

  • 首先将 Year 添加为切片器或过滤器,然后选择一年。

  • 然后,添加 Month 或 Quarter 作为切片器或过滤器。

  • 然后,选择一个或多个月份或季度以对所选年份进行切片或过滤。

设计时的原因

DAX 时间智能函数需要为日期参数指定一个日期列。日期列必须具有连续的日期范围。如果日期列中的一行或多行中的日期值与前一行和后续行中的数据值不连续,则可以返回此错误。

如果你从数据源导入了包含日期的表,请记住,许多组织运行特殊进程来扫描数据库中的表以查找无效值并将其替换为特定值。也就是说,如果发现无效日期,则会为其分配一个特定日期值,该日期值可能与列中的其他数据值不连续。

如何在设计时修复此错误?

在设计时执行以下操作来修复错误:

  • 如果你的日期表是从数据源导入的,请使用 Power Pivot 窗口中的刷新重新导入在源中找到的任何更改。

  • 检查日期列中的值以确保它们的顺序连续。如果发现任何值不存在,则必须从源头进行更正,并且必须刷新日期表。

  • 在数据模型中创建单独的日期表和日期列。将新日期列指定为导致错误的公式中的日期参数。日期表很容易创建并添加到数据模型中。

DAX 语义错误 - 一个示例


以下 DAX 错误是语义错误:

“函数‘CALCULATE’已在用作表过滤器表达式的真假表达式中使用。这是不允许的。”

Cause

当一个或多个过滤器表达式无法在计算字段或计算列表达式的上下文中使用时,可能会出现此错误。

在大多数情况下,此错误是由指定为 DAX CALCULATE 函数的参数的过滤器表达式引起的。 CALCULATE 函数需要定义为布尔表达式或表表达式的过滤器。

如何修复此类错误?

你可以通过使用 DAX FILTER 函数将过滤器定义为表表达式来修复此类错误,然后可以将其用作 DAX CALCULATE 函数的参数。