函数周期表丨筛选丨表丨ALLNOBLANKROW

2021-08-30 10:24:19 浏览数 (1)

ALLNOBLANKROW函数

ALLNOBLANKROW函数,隶属于“筛选类表函数”,在ALL函数系列家族中,其出场次数并不算特别多,远远不如其他函数的出场次数。

但是只要打开思路,其实ALLNOBLANKROW函数的用途并不少见,相反,很重要。

用途:

1、用来对比父表和子表之间的差异。

2、适用于连锁类销售对比差异值。

语法

代码语言:txt复制
DAX=
ALLNOBLANKROW( {<表> | <列>[, <列>[, <列>[,…]]]} )

参数

表:已经删除上下文筛选的表。

列:(可重复)已经删除上下文筛选的列。

注意:此函数参数类型只能存在一种,要么是表,要么是列。

返回结果

去除重复值的表或列。

例子

模拟数据:

这是白茶随机模拟的数据。

例子1:

代码语言:txt复制
ALLNOBLANKROW例子1 =
ALLNOBLANKROW ( '子表' )

结果:

这种情况下,ALLNOBLANKROW函数的用法与ALL函数基本上差不多,返回一个完整的数据表。

例子2:

代码语言:txt复制
ALLNOBLANKROW例子2 =
ALLNOBLANKROW ( '子表'[类别] )

结果:

这种情况的用法相当于VALUES,可以去除重复值。

其实到这里,ALLNOBLANKROW函数的基本用法就结束了。

下面的内容是关于ALLNOBLANKROW函数与ALL函数之间的对比。

* * *

基础代码:

代码语言:txt复制
子表行数 =
COUNTROWS ( '子表' )

对比代码第一组:

代码1:

代码语言:txt复制
ALL例子1 =
COUNTROWS ( ALL ( '子表' ) )

代码2:

代码语言:txt复制
ALLNOBLANKROW例子1 =
COUNTROWS ( ALLNOBLANKROW ( '子表' ) )

分别将其放入父表与子表的上下文环境中对比:

可以看得出来,这种情况下,父表对于子表的筛选条件不造成影响,二者的结果是一致的。

对比代码第二组:

代码1:

代码语言:txt复制
ALL例子2 =
COUNTROWS ( ALL ( '子表'[类别] ) )

代码2:

代码语言:txt复制
ALLNOBLANKROW例子2 =
COUNTROWS ( ALLNOBLANKROW ( '子表'[类别] ) )

结果:

这种情况下,父表的筛选效果依然没有生效,对二者结果没有影响。

对比代码第三组:

代码1:

代码语言:txt复制
ALL例子3 =
COUNTROWS ( ALL ( '父表' ) )

代码2:

代码语言:txt复制
ALLNOBLANKROW例子3 =
COUNTROWS ( ALLNOBLANKROW ( '父表' ) )

结果:

从这组对比中,我们能看出来,ALLNOBLANKROW的结果比ALL的结果计数少1。这是因为,子表中存在父表中不存在的维度数据。

ALL函数会直接为父表添加一行“空行”,这一行ALL函数计算在内。ALLNOBLANKROW则会忽略这一空行,只计算父表中存在的数据。

因为总体的效果,ALLNOBLANKROW函数的效果与ALL函数差不多,而且对于ALL函数的熟悉程度远远高于前者,这就导致其出场率并不高,但不代表其毫无作用。

对比代码第四组:

代码1:

代码语言:txt复制
ALL例子4 =
CALCULATE ( SUM ( '子表'[数据] ), ALL ( '父表' ) )

代码2:

代码语言:txt复制
ALLNOBLANKROW例子4 =
CALCULATE ( SUM ( '子表'[数据] ), ALLNOBLANKROW ( '父表' ) )

对比结果:

在一些连锁销售行业,当总部数据与门店数据出现差异时,可以使用ALL函数与ALLNOBLANKROW函数之间的特性,用来对比差异点。

总部:咦?我给你调货只配了50W的货物,你咋销售了60W?咋回事?小老弟? 分店:大哥,我也不知道啊!要不咱俩来核对一下? 总部&分店:(¥¥%#&&@@!)这咋核对啊!!

以上这种情况,就完全可以用第四组代码来直接求出差异值,这样的话范围是不是就缩小了?

小伙伴们❤GET了么?

白茶会不定期的分享一些函数卡片

(文件在知识星球PowerBI丨需求圈)

这里是白茶,一个PowerBI的初学者。

0 人点赞