Excel DAX - 公式错误

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

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

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


DAX Error: Calculation Aborted

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

"DAX Error: CALCULATION ABORTED: MdxScript (instance) (00, 0) Function 'DATEADD' only works with contiguous date selections."

运行时原因

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

如何在运行时修复错误?

在上面的例子中,

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

  • 然后,添加月或季度作为切片器或过滤器。

  • 然后,选择一个或多个月份或季度作为所选年份的切片或过滤依据。

设计时的原因

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

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

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

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

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

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

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


DAX 语义错误 - 示例

以下DAX错误是语义错误 −

“A function ‘CALCULATE’ has been used in a true-false expression that is used as a table filter expression. This is not allowed.”

原因

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

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

如何修复此类错误?

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