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:验证不相关的数据
打开
步骤 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_USD,Countrows 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 函数不会对表中真正空白的行进行计数,但只处理父表中生成的特殊情况的空白行。