Excel Dax 简明教程

Excel DAX - Formula Errors

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

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

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

DAX Error: Calculation Aborted

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

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

Cause at Run-time

当计算字段带 DAX 时间智能函数被放置在透视表的 VALUES 区域中,但在选择年份之前选择了诸如月份或季度的日期字段作为切片器或筛选器时,可能会显示该错误。例如,如果您有 2014、2015 和 2016 年这三年数据,并且您尝试仅在不选择年字段的情况下使用 3 月份,那么这些值就不是连续的数据值,您将收到错误。

How to Fix the Error at Run-time?

在上面示例中,

  1. 首先将 Year 添加为切片器或筛选器,并选择一个年份。

  2. 然后,将 Month 或 Quarter 添加为切片器或筛选器。

  3. 然后,选择一个或多个月份或季度以筛选或过滤所选年份。

Cause at Design-time

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

如果您从数据源导入了包含日期的表,请记住,许多组织运行特殊的进程来扫描数据库中的表以查找无效值,并用特定值替换这些值。也就是说,如果找到无效日期,它将被指定为特定日期值,该日期值可能与列中的其他日期值不连续。

How to Fix This Error at Design-time?

采取以下措施以在设计时修复该错误−

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

  2. 检查日期列中的值以确保它们按连续顺序排列。如果发现任何值不在原位,则必须在源中更正该值,并必须刷新日期表。

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

DAX Semantic Error - An Example

以下 DAX 错误是语义错误−

“函数 ‘CALCULATE’ 已用于真假表达式,该表达式用作表筛选器表达式。不允许这样做。”

Cause

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

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

How to Fix Such Errors?

可以通过使用 DAX FILTER 函数将筛选器定义为表表达式(该表表达式随后可以用作 DAX CALCULATE 函数的参数)来修复此类错误。