Excel DAX - 公式错误


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

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

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

DAX 错误:计算中止

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

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

运行时原因

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

如何修复运行时的错误?

在上面的例子中,

  • 首先添加 Year 作为切片器或过滤器并选择年份。

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

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

设计时的原因

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

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

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

执行以下操作以修复设计时的错误 -

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

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

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

DAX 语义错误 - 示例

以下 DAX 错误是语义错误 -

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

原因

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

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

如何修复此类错误?

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