EARLIER函数是DAX中两个使用起来稍微绕脑的函数,它的功能是当表达式中出现嵌套行上下文场景时,通过在内层表达式中使用EARLIER函数,可以从当前行上下文中挑出,到外层行上下文去引用数据用于计算。
例如,当需要计算产品的累计销量时,就可以利用EARLIER函数。

Cum_Sales =
SUMX (FILTER (Customer,Customer[Customer] = EARLIER ( Customer[Customer] )&& Customer[Date] <= EARLIER ( Customer[Date] )),Customer[Total_Sales]
)

表达式Cum_Sales中包含两层嵌套上下文环境,内层是通过FILTER函数形成的子表单所规定的上下文环境,外层是计算列Cum_Sales本身所在的表单中的上下文环境。通过EARLER函数功能,将当前外层表单中的Customer列和Date作为条件,引入到了FILTER函数里面,用来作为生成子表单的筛选条件。从而可以获得产品销售量累加结果。

由于EARLER函数是在嵌套环境中进行使用,并且需要在不同层级当中跳跃式的获取数据,是的表达式的使用上稍显复杂。为了减少误用EARLER函数,可以通过使用自定义变量来代替EARLER函数,来获得同样的计算效果。

由于自定义变量本身有一个特点,即其计算结果仅仅与调用它的最外围表达式最初所在的上下文有关,不会受到调用它的函数内部修改的上下文关系所影响。因此在可以通过使用自定义变量来替换EARLIER函数和EARLIEST函数,使得表达式更加清晰易懂。

例如上面的公式可以用下面的自定义变量来替换。

Cum_Sales_VAR =
VAR Current_Customer = Customer[Customer]
VAR Current_Date = Customer[Date]
RETURNSUMX (FILTER (Customer,Customer[Customer] = Current_Customer&& Customer[Date] <= Current_Date),Customer[Total_Sales]

之所以自定义变量Current_Customer可以替换EARLIER ( Customer[Customer] )是因为,自定义变量是在调用它的最外层函数SUMX本身所在上下文环境中进行运算,而不是在FILTER函数内重新建立的上下文中运行。

例如,当Cum_Sales_VAR 表达式运行到Customer = Forth Coffee,Product = Computers,Date = 3/1/2017,Amount = 50,Total_Sales = 25000,Cum_Sales = 26500这一行时,自定义变量Current_Customer在当前上下文中获取Customer值,为Forth Coffee,而另外一个自定义变量Current_Date的值则为3/1/2017。这样,对于FILTER函数,其过滤条件就变成获取满足Customer[Customer] = Forth Coffee并且Customer[Date] <= 3/1/2017的子表单。这与之前使用EARLER来获取将当前外层表单中的Customer列和Date作为FILTER函数内使用的过滤条件效果相同,因此可以用自定义变量来代替表达式中的EAELER函数。

DAX:用自定义变量代替EARLIER函数相关推荐

  1. matlab子函数调用变量,matlab中,怎么样用function自定义函数调用另一个函数名为输入?...

    点击查看matlab中,怎么样用function自定义函数调用另一个函数名为输入?具体信息 答:test定义两个参数,一个是函数,一个是函数的变量. function [z]=test11(funna ...

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

    Power BI(二十)power pivot之Earlier函数 - DAX进阶的里程碑 Earlier函数之累计求和.累计百分比 帕累托法则往往称为二八原理,即百分之八十的问题是百分之二十的原因所 ...

  3. CSS-颜色属性+颜色函数+自定义变量

    最近更新时间:2017年5月8日16:08:13 <我的博客地图> 离开校园踏入职场,不是到达人生巅峰,而是人生才刚刚开始.校园里学的知识远不足工作需求,而且校园里的学习深度也比较浅显.因 ...

  4. e0312 不存在用户定义的_VistaPro创建自定义变量

    IESVE软件中VistaPro模块中的结果变量众多,很多用户反应变量数据不容易获得,其实在此模块中用户可以根据现有变量(天气数据.房间设置和负荷.建筑负荷.能源.碳排放)进行组合,利用VE软件自带的 ...

  5. python中自定义变量名标识符_name是python的标识符吗

    name是python的标识符吗?下面给大家具体介绍一下: <1>标示符 什么是标示符,看下图: 开发人员在程序中自定义的一些符号和名称. 标示符是自己定义的,如变量名 .函数名等. &l ...

  6. swift5自定义构造函数和自定义变量报required init?(coder: NSCoder) { fatalError(“init(coder:) has not bee错问题

    swift5自定义构造函数和自定义变量报required init 全局类下 UIViewController,通过构造方法传递属性值.还有一种方法,通过属性监听去给给viewController 传 ...

  7. 微信小程序自定义变量使用,静态变量

    1.创建变量 在js文件的data里面创建与赋初始值 data: { indicatorDots: true, autoplay: true, interval: 3000, duration: 50 ...

  8. vue css自定义标签,Vue如何使用CSS自定义变量

    目录 在 css 自定义变量的功能以及出来许久了,但实际开发中大家使用并不多.归其原因是因为 less.sass 等预处理器已经拥有定义变量的功能,以及Vue.react很方便设置 style 样式, ...

  9. mysql 存储过程 sql变量_SQL基础-变量 存储过程和函数

    一.变量 1.系统变量:全局变量.会话变量 说明:由系统提供,属于服务器层面.如果是全局级别,则需要加 global,如果是会话级别,则需加 session,如果不写,则默认 session.全局变量 ...

最新文章

  1. Java项目:抽奖点名神器(HTML+可自定义抽选)
  2. 成功解决Docker Desktop requires Windows 10 Pro or Enterprise version 15063 to run.
  3. java 英文分词器使用代码_java文本英文分词
  4. 使用wss和HTTPS / TLS保护WebSocket的安全
  5. IntelliJ IDEA for Mac如何管理SDK/JDK,模块如何设置SDK/JDK?
  6. 狂神说学习笔记 Java流程控制
  7. 95-847-040-源码-Netty-netty在Flink运行时的简介
  8. GitHub CEO 回应源代码泄露:没有黑客!没有被入侵!
  9. spark共享变量(广播变量Broadcast Variable,累加器Accumulators)
  10. 神威计算机主板型号,十代酷睿高端型Z490主板曝光 总线规格依旧是PCIe 3.0且USB接口并不支持USB 3.2...
  11. java 动态给属性赋值_java中为实体对象的动态属性赋值
  12. idea svn 不见的问题
  13. MYSQL数据库的数据完整性
  14. 如何让 Linux 下非 root 用户程序使用小于 1024 端口
  15. 一位IT行业高收入者的理财规划方案
  16. 《网络架构系列2-Http详解》
  17. 解决mysql sum求和返回null问题或IFNULL应用
  18. SSL用pem和key文件生成jks文件
  19. 非参数统计:两样本和多样本的Brown-Mood中位数检验;Wilcoxon(Mann-Whitney)秩和检验及有关置信区间;Kruskal-Wallis秩和检验
  20. Opencv实现Sift、Surf、ORB特征提取与匹配

热门文章

  1. 手机安装Python
  2. 浮萍自动清理机器人——第一次下水201606
  3. 2016年4月1日有这么多新规定诞生,有影响你的生活吗?
  4. 帕斯卡命名法、驼峰命名法、下划线命名法
  5. 2020-10-02
  6. 化纤与纺织技术杂志化纤与纺织技术杂志社化纤与纺织技术编辑部2022年第2期目录
  7. iOS App无需跳转系统设置自动连接Wi-Fi
  8. 刷PAT啦1008~1010
  9. 康青老师--产品开发IPD流程和研发项目管理--流程建设和流程优化-沪师经纪刘建
  10. 25.位运算(位与)进阶