DAX的行上下文和迭代函数和EARLIER函数叠加使用时是如何计算(计算过程实例)(ROW CONTEXT & ITERATED FUNCTION & EARLIER)

本文通过实例详细解释了DAX中行上下文、迭代函数COUNTAX与FILTER以及EARLIER函数的结合使用方式。通过分析表格'PC'的计算列,展示了每一行如何利用EARLIER获取当前行的值,并在FILTER中进行迭代计算,最终得出每行的计数结果。

DAX的行上下文和迭代函数和EARLIER函数叠加使用时的计算过程实例(ROW CONTEXT & ITERATED FUNCTION & EARLIER)
DAX的行上下文和迭代函数和EARLIER函数叠加使用时是如何计算的(ROW CONTEXT & ITERATED FUNCTION & EARLIER)
COUNTAX+FILTER+EARLIER时如何计算的

表’PC’(NodeId, Node, ParentNodeID)
内容如下图所示

在这里插入图片描述

calCol :=
    COUNTAX (
        FILTER ( 'PC', PC[ParentNodeID] = EARLIER ( 'PC'[NodeId] ) ),
        'PC'[ParentNodeID]
    )

在这里插入图片描述

对于这个计算列函数在这个表格上的每一行的值分别是多少,具体的计算流程是怎样的?

一、COUNTAX

整体上,公式是嵌套了 FILTER 函数的 COUNTAX 函数的迭代计数行。(这里插播一个小知识,DAX 中以X结尾的函数是迭代器函数)。
COUNTAX 的第一个参数是使用FILTER过滤函数进行过滤后得到的过滤表,第二参数是 ParentNodeID ,意思是对第一个参数返回的过滤表中的 ParentNodeID 列进行计算行数。

二、FILTER

说完全部的情况,我们来细说第二个参数: FILTER ( ‘PC’, PC[ParentNodeID] = EARLIER ( ‘PC’[NodeId] ) )
这个参数使用了 FILTER 函数,FILTER 函数的作用是返回符合条件的表。这里则是对表 ‘PC’ 进行筛选,将满足 PC[ParentNodeID] = EARLIER ( ‘PC’[NodeId] ) 的行返回。

三、计算过程

首先,我们要注意到,这是一个计算列,这意味着,每一行都会返回一个结果。在这个场景中,意味着公式会返回9个结果,每一行都会进行一次计算。

那么对于具体某一行,如第1行,它的具体计算流程是怎样的呢?

因为 COUNTAX 是第一个迭代函数,所以它内部自动对参数中的表格进行每一行迭代,而在计算列中,DAX 又会自动产生行上下文,这意味着,这个公式会有两层循环。

对于公式 PC[ParentNodeID] = EARLIER ( ‘PC’[NodeId] ) ,到底哪一个是行上下文的值,哪一个是COUNTAX 的内部迭代行,这是一个指的探究的问题。

答案是:
EARLIER ( ‘PC’[NodeId] )行上下文的值
PC[ParentNodeID]内部的迭代行

四、创建行上下文

第一行的计算流程,是这样的
即计算 EARLIER ( ‘PC’[NodeId] )=1 后带入公式,此时 COUNTAX 的第一个参数变为
FILTER ( ‘PC’, PC[ParentNodeID] = 1 )
COUNTAX(FILTER ( ‘PC’, PC[ParentNodeID] = 1 ),‘PC’[ParentNodeID] )

五、创建迭代器

然后 FILTER ( ‘PC’, PC[ParentNodeID] = 1 ) 开始创建迭代器,对于 ‘PC’ 表,每一列 PC[ParentNodeID] 的每一行都进行代入计算,计算9次,每一次分别为
1: FILTER ( ‘PC’, ‘’ = 1 )
2: FILTER ( ‘PC’, ‘’ = 1 )
3: FILTER ( ‘PC’, 6 = 1 )
4: FILTER ( ‘PC’, 6 = 1 )
5: FILTER ( ‘PC’, 6 = 1 )
6: FILTER ( ‘PC’, 1 = 1 )
7: FILTER ( ‘PC’, 1 = 1 )
8: FILTER ( ‘PC’, 2 = 1 )
9: FILTER ( ‘PC’, 2 = 1 )

可以看到,第六、第七行的过滤条件满足要求,因此 FILTER ( ‘PC’, PC[ParentNodeID] = 1 ) 最终返回的表记为 ‘FILTER1TAB’ 。具体内容如下图所示
在这里插入图片描述
此时,公式变为
COUNTAX(‘FILTER1TAB’,‘FILTER1TAB’[ParentNodeID] )
可以看到,此时对 ‘FILTER1TAB’ 表的 ParentNodeID 列计数的结果为2
因此,第一行的结果为2

第二行也一样的流程,可以推算出结果为3.
最终所有行的结果为
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值