ALLNOBLANKROW
从关系的父表中,返回除空白行之外的所有行或列的所有非重复值,并且忽略可能存在的所有上下文筛选器。
语法
ALLNOBLANKROW( { <table> | <column>[, <column>[, <column>[,…]]] } )
parameters
术语 | 定义 |
---|---|
表 | 已删除了其中所有上下文筛选器的表。 |
柱形图 | 已删除了其中所有上下文筛选器的列。 |
必须仅传递一个参数;参数可以是表或列。
返回值
当传递的参数是表时,值则为表;如果传递的参数是列,则值为值组成的列。
备注
当子表中的一行或多行没有与父列匹配的值时,ALLNOBLANKROW 函数仅筛选父表会在关系中显示的空白行。 有关详细说明,请参阅以下示例。
下表总结了 DAX 中提供的 ALL 的变体及其区别:
函数和用法 说明 ALL(Column) 删除表中指定列的所有筛选器;表中针对其他列的所有其他筛选器仍会应用。 ALL(Table) 从指定表删除所有筛选器。 ALLEXCEPT(Table,Col1,Col2...) 覆盖表中除了应用于指定列的上下文筛选器之外的所有上下文筛选器。 ALLNOBLANK(table|column) 从关系的父表中,返回除空白行之外的所有行或列的所有非重复值,并且忽略可能存在的所有上下文筛选器 有关 ALL 函数工作原理的一般说明以及使用 ALL(Table) 和 ALL(Column) 的分步示例,请参阅 ALL 函数。
在已计算的列或行级安全性 (RLS) 规则中使用时,不支持在 DirectQuery 模式下使用此函数。
示例
在示例数据中,ResellerSales_USD 表中有一行不包含任何值,因此不能与工作簿内关系中的任何父表相关。 你将在数据透视表中使用此表,以便了解空白行行为以及如何处理对无关数据的计数。
步骤 1:验证无关数据
打开“Power Pivot”窗口,然后选择 ResellerSales_USD 表 。 在 ProductKey 列中,筛选空白值。 将保留一行。 在该行中,除 SalesOrderLineNumber 之外的所有列值都应为空。
步骤 2:创建数据透视表
创建新的数据透视表,然后将列 datetime.[Calendar Year] 拖动到“行标签”窗格中。 下表显示了预期的结果:
行标签 |
---|
2005 |
2006 |
2007 |
2008 |
总计 |
请注意“2008”与“总计”之间的空白标签 。 此空白标签表示未知成员,此成员是特殊组,创建此组是用于说明子表中没有与父表中的值匹配的任何值(在此示例中为 datetime.[Calendar Year] 列)。
当你在数据透视表中看到此空白标签时,就表示在某些与 datetime.[Calendar Year] 列相关的表中存在空白值或不匹配的值。 父表是显示空白标签的表,但不匹配的行位于一个或多个子表中。
添加到此空白标签组的行要么是与父表中任何值均不匹配的值(例如,日期/时间表中不存在的日期),要么是 NULL 值(表示没有日期值)。 在此示例中,我们在子销售表的所有列中都放置了一个空白值。 父表中的值多于子表中的值不会造成任何问题。
步骤 3:使用 ALL 和 ALLNOBLANK 对行进行计数
将以下两个度量值添加到日期/时间表以对表行进行计数:日期/时间的 Countrows ALLNOBLANK、日期/时间的 Countrows ALL 。 可用于定义这些度量值的公式包括:
// 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.[Calendar Year] 列到行标签,然后添加新创建的度量值。 结果应如下表所示:
行标签 | 日期/时间的 Countrows ALLNOBLANK | 日期/时间的 Countrows ALL |
---|---|---|
2005 | 1280 | 1281 |
2006 | 1280 | 1281 |
2007 | 1280 | 1281 |
2008 | 1280 | 1281 |
1280 | 1281 | |
总计 | 1280 | 1281 |
结果显示表行计数中相差 1 行。 但是,如果打开“Power Pivot”窗口并选择日期/时间表,则无法在表中找到任何空白行,因为此处提到的特殊空白行是未知成员 。
步骤 4:验证计数是否准确
为了证明 ALLNOBLANKROW 不会计算任何实际存在的空白行,并且只处理父表上的特殊空白行,请将以下两个度量值添加到 ResellerSales_USD 表中:ResellerSales_USD 的 Countrows ALLNOBLANKROW、ResellerSales_USD 的 Countrows ALL 。
创建数据透视表,然后将列 datetime.[Calendar Year] 拖动到“行标签”窗格。 现在添加刚刚创建的度量值。 结果应如下所示:
行标签 | ResellerSales_USD 的 Countrows ALLNOBLANKROW | ResellerSales_USD 的 Countrows ALL |
---|---|---|
2005 | 60856 | 60856 |
2006 | 60856 | 60856 |
2007 | 60856 | 60856 |
2008 | 60856 | 60856 |
60856 | 60856 | |
总计 | 60856 | 60856 |
现在两个度量值的结果相同。 这是因为 ALLNOBLANKROW 函数不对表中实际存在的空白行进行计数,而是当关系中一个或多个子表包含不匹配值或空白值时,此函数只处理父表中生成的处于特殊情况的空白行。