ALLNOBLANKROW

适用于:计算列计算表度量值视觉计算

从关系的父表中,返回除空行之外的所有行,或列的所有非重复值,但空白行,并忽略可能存在的任何上下文筛选器。

语法

ALLNOBLANKROW( {<table> | <column>[, <column>[, <column>[,…]]]} )

参数

术语 定义
table 删除所有上下文筛选器的表。
column 删除所有上下文筛选器的列。

必须仅传递一个参数;参数是表或列。

返回值

当传递的参数是表或值列时,当传递的参数是列时,表。

言论

  • ALLNOBLANKROW 函数仅筛选父表在关系中的空白行时,子表中有一行或多行与父列不匹配。 有关彻底说明,请参阅以下示例。

  • 下表总结了 DAX中提供的 ALL 变体及其差异:

    函数和用法 描述
    ALL(Column) 从表中的指定列中删除所有筛选器;表中的所有其他筛选器(在其他列上)仍适用。
    ALL(Table) 从指定表中删除所有筛选器。
    ALLEXCEPT(Table,Col1,Col2...) 替代表中除指定列以外的所有上下文筛选器。
    ALLNOBLANK(table|column) 从关系的父表中,返回除空白行之外的所有行,或列的所有非重复值,但空白行,并忽略可能存在的任何上下文筛选器

    有关 ALL 函数工作原理的一般说明,以及使用 ALL(表)和 ALL(列)的分步示例,请参阅 ALL 函数

  • 在计算列或行级别安全性 (RLS) 规则中使用时,不支持在 DirectQuery 模式下使用此函数。

在示例数据中,ResellerSales_USD表包含一行没有值,因此不能与工作簿内关系中的任何父表相关。 你将在数据透视表中使用此表,以便查看空白行行为以及如何处理不相关的数据计数。

步骤 1:验证不相关的数据

打开 Power Pivot 窗口,然后选择ResellerSales_USD表。 在 ProductKey 列中,筛选空值。 将保留一行。 在该行中,除 SalesOrderLineNumber 之外,所有列值都应为空。

步骤 2:创建数据透视表

创建新的数据透视表,然后拖动列日期/时间。[日历年份],指向“行标签”窗格。 下表显示了预期结果:

行标签
2005
2006
2007
2008
总计

请注意 2008 总计之间的空白标签。 此空白标签表示未知成员,该成员是一个特殊组,用于考虑父表中没有匹配值的子表中的任何值,在本示例中为 datetime。[日历年份] 列。

在数据透视表中看到此空白标签时,你知道在一些与列、日期/时间相关的表中。[日历年份],有空白值或不匹配的值。 父表是显示空白标签的表,但不匹配的行位于一个或多个子表中。

添加到此空白标签组的行是与父表中任何值不匹配的值(例如,日期/时间表中不存在的日期)或 null 值,表示没有任何日期值。 在此示例中,我们在子销售表的所有列中放置了一个空白值。 父表中的值多于子表中的值并不会导致问题。

步骤 3:使用 ALL 和 ALLNOBLANK 对行进行计数

将以下两个度量值添加到 datetime 表,对表行进行计数:datetime的 Countrows ALLNOBLANK,countrows ALL datetime。 可用于定义这些度量值的公式包括:

// Countrows ALLNOBLANK of datetime
= COUNTROWS(ALLNOBLANKROW('DateTime'))

// Countrows ALL of datetime
= COUNTROWS(ALL('DateTime'))

// Countrows ALLNOBLANKROW of ResellerSales_USD
= COUNTROWS(ALLNOBLANKROW('ResellerSales_USD'))

// Countrows ALL of ResellerSales_USD
= COUNTROWS(ALL('ResellerSales_USD'))

在空白数据透视表上添加日期/时间。[日历年份] 列到行标签,然后添加新创建的度量值。 结果应如下表所示:

行标签 datetime 的 Countrows ALLNOBLANK datetime 的计数 ALL
2005 1280 1281
2006 1280 1281
2007 1280 1281
2008 1280 1281
1280 1281
总计 1280 1281

结果显示表行计数中 1 行的差异。 但是,如果打开 Power Pivot 窗口 并选择日期/时间表,则无法在表中找到任何空白行,因为此处提到的特殊空白行是“未知”成员。

步骤 4:验证计数是否准确

为了证明 ALLNOBLANKROW 不计算任何真正空白的行,并且只处理父表中的特殊空白行,请将以下两个度量值添加到ResellerSales_USD表中:countrows ALLNOBLANKROW ResellerSales_USDCountrows ALL ResellerSales_USD

创建新的数据透视表,并拖动列日期/时间。[日历年份],指向“行标签”窗格。 现在添加刚刚创建的度量值。 结果应如下所示:

行标签 ResellerSales_USD的计数 ALLNOBLANKROW ResellerSales_USD的计数 ALL
2005 60856 60856
2006 60856 60856
2007 60856 60856
2008 60856 60856
60856 60856
总计 60856 60856

现在,这两个度量值具有相同的结果。 这是因为,当关系中的一个或多个子表包含非匹配值或空白值时,ALLNOBLANKROW 函数不会对表中真正空白的行进行计数,但只处理父表中生成的特殊情况的空白行。

筛选器函数ALL 函数FILTER 函数