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

DAX 综合实战案例——简单的中国式报表 Hello ,小伙伴们大家好,又见面了,今天介绍一个DAX综合实战案例 ——简单的中国式报表。 平时处理数据比较多的小伙伴估计经常要和中国式报表打交道,接触Power Pivot和Power BI Desktop的小伙伴估计想把中国式报表自动化,来减少手工繁琐的重复劳动。你的心情我非常理解,可是 中国式报表比较复杂和令人头疼的问题是它会把不同维度,不同粒度,不同类别的字段数据拼在一起呈现。 ... 阅读详情

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.
最终所有行的结果为
在这里插入图片描述

DAX 综合实战案例—简单的中国式报表详解(三) 小伙伴们大家好! ☞DAX综合实战案例-简单的中国式报表详解(一) ☞DAX综合实战案例-简单的中国式报表详解(二) 中讲解了中国式表头的构建,按列排序,时间智能函数,这些菜都已经做好,最后一步就是拼盘了,如何把它们按照需要的样子拼在一起呢? 接下来就处理这个问题。 我们再来看下报表的样子: 报表先是展示各月的预算达成情况,然后是年累计、上年全年、上年年累计情况,最后是差异比较。表头通过按... 阅读详情

相关推荐

DAX实战 | 一个案例带你了解CROSSFILTER

小伙伴们好啊~ 今天带大家了解的函数是CROSSFILTER,一起来看下数据模型: 在我们的模型中提供了三张表:一张事实表:Sales;两张维度表:Customer和Date,分别用CustomerKey/Date和Sales建立一对多关系。 我们要解决的业务场景是:每一年有多少个城市(Customer表中每个客户对应的City字段)产生了销售 首先写一个基础度量: NumberOfCities = DISTINCTCOUNT( Customer[City] ) 可以看到,在我们的Customer表中.

PowerPivotShop的博客 1212

DAX学习-同一表上的多层嵌套上下文EARLIER当前行与VAR变量

DAX EARLIER

Jackie_Mina 862

Power BI(二十)power pivot之Earlier函数 - DAX进阶的里程碑

Power BI(二十)power pivot之Earlier函数 - DAX进阶的里程碑 Earlier函数之累计求和、累计百分比 帕累托法则往往称为二八原理,即百分之八十的问题是百分之二十的原因所造成的。在帕累托图中,不同类别的数据根据其频率降序排列的,并在同一张图中画出累积百分比图。帕累托图可以体现帕累托原则:数据的绝大部分存在于很少类别中,极少剩下的数据分散在大部分类别中。这两组经常被...

可乐联盟 6982

DAX:概述EARLIEST和EARLIER函数

EARLIEST和EARLIER函数只用于行上下文中,并且主要用于计算列的行上下文中。行上下文的作用是迭代,逐行扫描表,并且不会筛选数据。 EARLIER函数用于访问外层行上下文,即使用外层行上下文,而不是最内层的行上下文检索列的值。 EARLIER(<column>, <number>) EARLIEST(<column>) 注意:EARLIER函数...

悦光阴的博客 1353

浅谈DAX中的上下文概念

介绍DAX中的行上下文和筛选上下文的基本概念。

Fluffy的百宝箱 6757

大数据分析工具Power BI(七):DAX使用场景及常用函数

以上"表达式"参数是指对筛选后的数据进行计算的表达式,可以执行各种聚合计算,后续参数是一系列的筛选器,筛选器也可以为空,多个筛选器之间用逗号分割,多个筛选器都满足的数据集合才会被指定的表达式进行计算,并返回计算的结果。在数据分析中我们也经常遇到同比和环比的分析场景,同比和环比是两个不同的概念,同比是指相邻时间段某个相同的时间点的比较,例如:2021与2022年是两个相邻的年份(相邻时间段),2021年5月与2022年5月是这两个相邻时间段的相同时间点都是5月,比较这两个时间段的数据是同比。

Lansonli(蓝深李)的博客 2640

DAX 中的 EARLIER 函数

在 DAX(Power BI、Excel Power Pivot)中,我们需要为每一行计算该产品到当前月份的累计销售额。典型场景:在计算列中处理双重行上下文(例如,使用。通过图解和示例,可以更直观地理解。如何在嵌套上下文中定位外层数据。用于在嵌套的行上下文中。假设有一个销售数据表。

qq_45941196的博客 821

研究《DAX查询计划 白皮书》的案例(一)初始方案

SQLBI 网站上提供的[《White paper: Understarnding DAX Query Plans》,发布于2023年7月17日,距今已超过10年,随着DAX 版本不断更新优化,原文中关于查询计划的描述已不再符合当前实际情况。为充分理解、运用该文阐述的分析方法,以当前 DAX 版本运行文中案例,尝试理解查询计划及优化思路。

一棵松的博客 1017

Power BI DAX函数学习:EARLIER

DAX中很常用也非常有用的函数:EARLIER,用于返回当前行上下文的值,具体用法如下: 在新建列时,这个函数很好用,但不适合于度量值,如果你使用这个函数出错了,很可能你把它用在了度量值的代码中。 来来来,试一下 1.新建模拟数据 2.建模》新建列》累计计算1 = SUMX(FILTER('表','表'[产品]=EARLIER('表'[产品])),'表'[销量]) 3....

ShellBakers的博客 3607

Python实战:用Realsense D435和睿尔曼机械臂完成手眼标定的5个关键步骤

本文详细介绍了使用Python、Realsense D435深度相机与睿尔曼机械臂进行手眼标定的完整实战流程。文章将过程拆解为环境搭建、数据采集、核心计算、结果验证和精度优化五个关键步骤,重点剖析了数据采集的黄金法则、常见错误排查以及如何将标定结果集成到视觉抓取程序中,旨在帮助开发者实现毫米级精度的视觉引导机器人系统。

weixin_29103191的博客 321

Android HDMI-CEC协议解析:从机顶盒到电视的无缝遥控联动

本文深入解析Android HDMI-CEC协议,实现机顶盒与电视间的无缝遥控联动。通过剖析设备角色、消息格式及核心操作码,并结合Android HdmiControlManager API实战,详细讲解如何实现电源同步、按键穿透及音量控制,最终解决多设备遥控繁琐的痛点,提升用户体验。

egg99的博客 974

DAX:用自定义变量代替EARLIER函数

EAERLIER函数的使用说明以及用自定义变量代替EAELIER函数的方法。

Fluffy的百宝箱 4294

Linux-ftrace-双nop机制的实现

linux-ftrace内核追踪-双nop机制的实现原理

qq_43707773的博客 1072

earlier的意思_东哥陪你学DAX——Earlier

初看earlier,会以为这是个跟时间相关的函数,字面上不就是更早的意思吗?其实不然earlier函数之所以抽象,是因为它与"上下文"关系密切,而"上下文"又是整个DAX中精髓所在。初学者们通常在这个函数上徘徊不前,困惑不已,也就不奇怪了对earlier理解、掌握并熟练运用,勿贪一朝一夕之功,需要多上手勤操练,并结合"上下文"概念反复揣摩,自然水到渠成。earlier通常与filter结合使用(F...

weixin_35644453的博客 877

冒泡排序的并行计算

本人也是并行计算的小白,在这里记录下自己的学习笔记。 今天做了一下冒泡排序的并行计算比较: 串行冒泡排序如下: #include <stdio.h> #include <stdlib.h> #include <windows.h> void BubbleSort(int * pData, int nSize) { if (!pData) { ...

gaoyi的专栏 4491

MATLAB 控制 E4438C 信号源的研究

通过 MATLAB,我们可以实现对 E4438C 的远程控制,从而实现更高的自动化和可编程性。总结起来,通过使用 MATLAB 和 Instrument Control Toolbox,我们可以轻松地控制 E4438C 信号源并生成各种类型的信号。需要注意的是,以上代码仅为示例,实际应用中可能需要根据具体情况进行更详细的配置和错误处理。此外,MATLAB 还提供了一系列函数和命令,可用于控制 E4438C 信号源的其他功能,如频率调谐、功率设置、调制设置等。您可以根据自己的需求进行相应的配置和控制。

RswtPerl的博客 1014

8.13 PowerBI系列之DAX函数专题-商品折上折迭代函数SUMX详解

迭代的意思是就是逐行计算,当前行计算的时候需要依赖上一行的计算结果。

qq_33842426的博客 531

SAP 行业扫盲系列之一:SAP 从业者的分类

本文简单介绍了 SAP 从业者的分类,限于笔者狭隘的视角,可能存在遗漏或者不恰当的地方,希望大家在评论区指出。 那些在知乎咨询上向我提问关于进入 SAP 行业建议的朋友们,也请大家提问时注明自己想具体从事 SAP 行业哪一类的工作,这样才能得到更让你们满意的回复。感谢阅读。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1589

PowerBI/DAX之常用迭代函数详解

DAX里的迭代函数的迭代与广义上的迭代的含义有所不同,广义上的迭代指的是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果,将每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。而在DAX里的迭代可以理解为遍历,迭代函数会遍历其参数所指定表的每一行,并为表的每一行执行相同的 DAX 表达式,在遍历完表后再根据不同的迭代函数执行不同的后续操作,例如:SUMX的后续操作是求和、MAXX的后续操作是求最大值、RANKX的后续操作是排序等等。

1471

【Flink】FlinkCDC获取mysql数据时间类型差8小时时区解决方案

​ 1、背景: 在我们使用FlinkCDC采集mysql数据的时候,日期类型是我们很常见的类型,但是FlinkCDC读取出来会和数据库的日期时间不一致,情况如下 FlinkCDC获取的数据中create_time字段1694597238000转换为时间戳2023-09-13 17:27:18,而数据库中原始数据如下,并没有到下午5点,这就导致了FlinkCDC读出来的时间和数据库中实际的时间不一致的情况,与数据库对比可以发现,这里的时间戳与数据库时间刚好相差了 8 个小时,在实际生产中这种情况是不

一杯咖啡半杯糖的博客 3854

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

在DAX中利用MAX或MAXX函数获取最新数据

在DAX中利用MAX或MAXX函数获取最新数据

Fluffy的百宝箱 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

函数周期表丨筛选丨行值丨EARLIER与EARLIEST

EARLIER函数与EARLIEST函数 这两个函数,可以说是DAX函数系列中比较抽象的函数。 隶属于“筛选”类函数,属于“行值”函数。 通常情况下使用在“计算列”之中,如果度量值中添加了存储的虚拟表,涉及到跳出上下文时,也可以使用这两个函数。 用途:在计算列中获取当前行上下文的值。 语法 语法1: DAX= EARLIER(<列>, <次数>) 语法2: DAX= EARLIEST(<列>) 参数 列:物理列或者列的表达式。 次数:可选项,默认为1。正数,表示跳出.

Fabric丨白茶 1219

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

power bi 度量值SUMX(FILTER和EARLIER结合

累计需求 = SUMX(FILTER(‘summary’,‘summary’[索引]<=EARLIER(summary[索引])&&‘summary’[RM_PN]=EARLIER(summary[RM_PN])), ‘summary’[计划量]) SUMX(FILTER 在’summary’表里,按条件筛选,对’summary’[计划量] 求和 EARLIER函数 理解为current 当前行 具体参考 https://www.jianshu.com/p/1ec7bcfa92cd ‘

weixin_44656422的博客 3073

powerbi学习笔记(day1)构建环境&进行练习

本文记录Power BI第1课学习过程:下载Power BI Desktop,通过AI生成测试数据集并导入,完成数据清洗与星型模型构建(事实表+三张维度表),建立DAX度量值,最终在报表视图中实现包含卡片、切片器、折线图、地图、条形图、环形图及矩阵表的完整可视化看板,掌握从环境搭建到数据建模与展示的全流程。

sealaugh32的专栏 300
上一篇: 数据库的多表关联的增删改语句示例(数仓StarRocks、SQL、MySQL、insert、delete、update语法实例)(SQL和MySQL的多表关连的插入、多表关连的删除和多表关连的更新)
下一篇: Markdown支持的几种图表和代码实例(流程图、时序图、甘特图)
画扇落汗
博客等级 码龄8年 307粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值