【EARLIER/EARLIEST函数】引用不存在的更早的行上下文 报错解决
引用@PowerQuery的例子并给予个人理解
X1= SUMX(FILTER('Data','Data'[订单日期]>EARLIER('Data'[订单日期])),[金额])---WRONG
X2=CALCULATE(SUM(Data[金额]),FILTER(Data,SUMX(FILTER('Data','Data'[订单日期]>EARLIER('Data'[订单日期])),[金额])))---RIGHT
X1报错原因:表被扫描前没有创建行上下文。当EARLIER/EARLIEST函数被用于新建列中,会自动创建行上下文,这是由于计算列是在现有的表上新建一个列,和表中已存的列一样,可以作为表格的行、列;图标的轴及切片器的字段使用等等,也可以使用计算列与其他表格建立关系。而当EARLIER/EARLIEST函数被用于新建度量值中,度量值如果不放到上下文环境中,它是一个孤立的公式,因此想在度量值中使用,需要人为在扫描表前创建行上下文。
解决方法:利用FLITER或者其他迭代函数在表被扫描前创建行上下文。(当定义计算列时,DAX 从表的第一行开始迭代;它创建了一个包含该行的行上下文并计算表达式。然后它移到第二行,再次计算表达式。此行为发生在表的所有行,如果表有一百万行,你可以认为 DAX 创造了一百万个行上下文来计算公式一百万次。对于当前行定位单元格,和原始数据表的列进行一对多的比较,满足筛选条件的被留下,用于计算表达式)
对于X1的报错:表扫描前不存在行上下文,因为sumx函数还未执行。这样子执行fliter函数,EARLIER函数是运行不了的。
对于X2的修正:CALCULATE函数中先执行FLITER,实现筛选,再根据筛选运算表达式。筛选中,先运行table,扫描table的每一行进行sumx的筛选程序,创造了行上下文,接下来运行sumx,从左往右运行,能够实现EARLIER函数。
【知识基础】
1.FLITER/SUMX函数计算执行顺序:在DAX函数中,绝大多数函数的执行顺序都是从左到右依次进行,例如SUMX函数SUMX(<table>,<expression>),如果table参数处使用了一个可以返回表单的表达式,则在运行时Power BI会先将这个表单表达式的结果计算出来,之后再计算expression参数部分。
2.CALCULATE函数计算执行顺序:CALCULATE函数CALCULATE(<expression>,<filter1>,<filter2>…)则很特殊,Power BI会先对后面的filter参数部分进行计算,之后才会运行expression表达式部分。
【EARLIER/EARLIEST函数】引用不存在的更早的行上下文 报错解决相关推荐
- VS使用scanf函数报错解决方法
VS使用scanf函数报错解决方法 首先来看一段很简单的C语言代码 #include<stdio.h> int main(void) {char s[10];scanf("%s& ...
- php的old函数,laravel单元测试之phpUnit中old()函数报错解决
php 的 laravel单元测试之phpUnit中old()函数报错解决 前言 最近在做laravel单元测试.遇到了一个问题: 当添加的view里面使用old()函数时就会报错,正常url访问没问 ...
- Oracle中wm_concat函数报错解决方法
Oracle中wm_concat函数报错解决方法 参考文章: (1)Oracle中wm_concat函数报错解决方法 (2)https://www.cnblogs.com/52net/archive/ ...
- python find函数_Python 装饰器填坑指南 | 最常见的报错信息、原因和解决方案
本文为霍格沃兹测试学院学员学习笔记,进阶学习文末加群. Python 装饰器简介 装饰器(Decorator)是 Python 非常实用的一个语法糖功能.装饰器本质是一种返回值也是函数的函数,可以称之 ...
- IDEA报错解决:Error:(33, 35) java: -source 7 中不支持 lambda 表达式 (请使用 -source 8 或更高版本以启用 lambda 表达式)
晚上在用IDEA的时候遇到了报错: Error:(33, 35) java: -source 7 中不支持 lambda 表达式(请使用 -source 8 或更高版本以启用 lambda 表达式) ...
- mysql text 函数的使用方法_MySQL空间数据操作:GeomFromText()和astext()函数报错解决...
报错问题: 之前在向MySQL导入经纬度数据的时候,用GeomFromText()方法来将字符串格式的空间点坐标转化为Geometry类型,得到了如下的报错: FUNCTION db.GeomFrom ...
- PHP获取input中的值相同报错,laravel单元测试之phpUnit中old()函数报错解决_php实例...
前言 最近在做laravel单元测试.遇到了一个问题: 当添加的view里面使用old()函数时就会报错,正常url访问没问题,但是在phpUnit中就报错 错误原因: exception 'Runt ...
- matlab predict函数并行,Matalb 智能算法第29个案例运行报错问题
使用的Matlab版本是2011b, SVM软件包版本是libsvm-3.17,程序跑到反归一化predict_1 = mapminmax('reverse',Predict_1,outputps); ...
- verilog “function”函数一直报错解决办法
verilog "function"函数一直报错 ,经qq群中的大佬指点,发现是在 function 函数内部的逻辑部分缺少 begin--end导致.在此记录一下. functi ...
最新文章
- 项目管理流程有哪些?如何才能让项目管理更有效?
- 腾讯发布2020人工智能白皮书:泛在智能
- apimonitor 神器啊 。。
- 练习友元函数,有元类,快排和全排列问题
- matlab gui设计实例_S-Funciton应用实例
- springboot整合redis集群master宕机后连接超时
- otsu阈值分割算法原理_大津二值化算法OTSU的理解
- java for each 的源_Java JDK1.5的新特性之for-each循环的底层原理
- Android之ndk之gdb调试
- openstack开发_在OpenStack开发中有效使用指标
- bootstrap signin将邮件改成用户名_了解电子邮件传递背后的流程
- IIS和APACHE共用80端口的方法
- Collections集合工具类的方法
- java日期互转:LocalDateTime、String、Instant、Date
- C++获取Unix时间戳(分别以秒和毫秒为单位)的几种方法
- c语言-输出菱形图案
- android原生4.0,原生Android 4.0系统_手机_手机Android频道-中关村在线
- 各种区块链浏览器的地址总汇
- 视频配音文字转语音怎么弄?介绍几种好用的方法给你
- 推荐!适合C++服务器编程初学者的基础开源项目