DAX 第四篇:CALCULATE详解
CALCULATE(<expression>,<filter1>,<filter2>…)
第一个参数是用于计算聚合值的度量,后面的参数是可选的过滤器,共有两种类型:
- 返回布尔值的逻辑表达式
- 返回表值的表达式
CALCULATE函数的复杂之处在于可变的计算上下文。如果数据已被过滤,则CALCULATE函数会更改过滤数据的上下文,并在您指定的新上下文中计算表达式。 对于filter参数中使用的每个列,将删除该列上的任何现有过滤器,并应用filter参数中使用的过滤器。
对于CALCULATE函数过滤上下文来说,filter参数的顺序是十分重要的。对于同一列,后面的filter参数会覆盖前面的filter参数设置的过滤上下文;对于不同列,filter参数指定的过滤上下文是共同作用的。
一,保持过滤器
在DAX中增加过滤器,一种行为是替换相同列上的所有现有的过滤器,使用参数指定的过滤器来计算表达式,也就是说,在移除相同列上原有的过滤器之后,而采用新的过滤器上下文。另外一种行为是不移除当前上下文中原有的过滤器,将当前上下文中的任何现有过滤器与参数中指定的过滤器进行比较,并把这两种过滤器的交集用作评估表达式的上下文,也就是说,向现有的过滤器上下文中增加新的过滤器,KEEPFILTERS 函数表现的是后一种行为。
KEEPFILTERS(<expression>)
默认情况下,CALCULATE等函数中的过滤器参数用作评估表达式的上下文,过滤器参数会替换相同列上的所有现有过滤器。CALCULATE等函数的filter参数,只能修改filter参数中提到的列上的上下文。filter参数中没有提到的列,其过滤器不受任何影响。
KEEPFILTERS函数允许您修改此行为,使用KEEPFILTERS时,将当前上下文中的任何现有过滤器与过滤器参数中的列进行比较,并将这些参数的交集用作评估表达式的上下文。换句话说,当CALCULATE过滤器替换当前上下文时,KEEPFILTERS会将过滤器添加到当前上下文中。
二,计算表表达式
在由给定过滤器修改的上下文中计算表表达式:
CALCULATETABLE(<expression>,<filter1>,<filter2>,…)
CALCULATETABLE 函数使用filter参数来更改过滤数据的上下文,在指定的新上下文中计算表达式。 对于filter参数中使用的每个列,将删除该列上的任何现有过滤器,并应用filter参数中使用的过滤器。
例如,下面的公式,计算2016年的销售总量:
=SUMX( CALCULATETABLE('InternetSales', 'DateTime'[CalendarYear]=2006) , [SalesAmount])
其中,RELATEDTABLE(<tableName>) 是CALCULATETABLE(<tableName>) 的同义词。
三,修改关系
DAX在引用关系时,可以在查询上下文中临时修改关系的设置,比如引用处于不活跃状态的关系,修改现有关系的交叉过滤的方向设置。重写的关系设置只在查询时有效,不会影响数据模型中的关系设置。
1,引用已有的关系
USERELATIONSHIP使用数据模型中已有的关系,通过关系两端的字段来指定关系:
USERELATIONSHIP(<columnName1>,<columnName2>)
在USERELATIONSHIP函数中,关系的状态是不重要的,但是关系必须事先创建于数据模型中,由于活跃的关系在DAX中是可以直接引用的,因此,该函数实际上用于引用处于不活跃(Inactive)状态的关系。
=CALCULATE(SUM(InternetSales[SalesAmount]), USERELATIONSHIP(InternetSales[ShippingDate], DateTime[Date]))
2,指定交叉过滤的方向
CROSSFILTER 使用数据模型中已有的关系,通过关系两端的字段来指定关系:
CROSSFILTER(<columnName1>, <columnName2>, <direction>)
在CROSSFILTER 中,关系的交叉过滤(cross-filtering)的设置是不重要的,也就是说,不论关系在数据模型中设置为single 方向或both方向,都不会影响函数的使用,CROSSFILTER将覆盖任何现有的交叉过滤(cross-filtering)设置。
参考文档:
详解CALCULATE系列-基础篇
CALCULATE 庖丁解牛系列-- 扩展表(1)
DAX 第四篇:CALCULATE详解相关推荐
- ES6系列教程第四篇--asyn详解
一.什么是async async其实是ES7的才有的关键字,放在这里说,其实是和我们前面所说的Promise,Generator有很大关联的.async的意思是"异步",顾名思义是 ...
- 机器学习第四篇:详解决策树算法
01|背景: 我们在日常生活中经常会遇到一些选择需要去做一些选择,比如我们在找工作的时候每个人都希望能找到一个好的工作,但是公司那么多,工作种类那么多,什么样的工作才能算是好工作,这个时候就需要我们对 ...
- ES6系列教程第三篇--Generator 详解
一.什么是Generator 函数 先看下面的Generator函数, function* helloGenerator() {console.log("this is generator& ...
- 【NLP】四万字全面详解 | 深度学习中的注意力机制(四,完结篇)
作者 | 蘑菇先生 知乎 | 蘑菇先生学习记 深度学习Attention小综述系列: 四万字全面详解 | 深度学习中的注意力机制(一) 四万字全面详解 | 深度学习中的注意力机制(二) 四万字全面详解 ...
- 【NLP】四万字全面详解 | 深度学习中的注意力机制(三)
NewBeeNLP原创出品 公众号专栏作者@蘑菇先生 知乎 | 蘑菇先生学习记 深度学习Attenion小综述系列: 四万字全面详解 | 深度学习中的注意力机制(一) 四万字全面详解 | 深度学习中的 ...
- 【NLP】四万字全面详解 | 深度学习中的注意力机制(二)
NewBeeNLP原创出品 公众号专栏作者@蘑菇先生 知乎 | 蘑菇先生学习记 前情提要:四万字全面详解 | 深度学习中的注意力机制(一) 目前深度学习中热点之一就是注意力机制(Attention ...
- java提高篇之详解内部类
转载自 java提高篇之详解内部类 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 第一次见面 内部类我们从外面看是非常容易理解的,无 ...
- js和php能生成一样的随机数_JavaScript_JS生成某个范围的随机数【四种情况详解】,前言:
JS没有现成的函数,能 - phpStudy...
JS生成某个范围的随机数[四种情况详解] 前言: JS没有现成的函数,能够直接生成指定范围的随机数. 但是它有个函数:Math.random() 这个函数可以生成 [0,1) 的一个随机数. 利用它 ...
- 【高级篇】详解Zookeeper客户端Curator
一.序言 之前分享过一篇关于Curotor的基本应用[基础篇]详解Zookeeper客户端Curator,如果对Curator没有了解的可以看看,本文分享关于Curator的一些高级特性,在监听和le ...
- python输入字符串并反序result_python字符串反转的四种方法详解
python字符串反转的四种方法详解 这篇文章主要介绍了python字符串反转的四种详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.用red ...
最新文章
- R语言ggplot2可视化多行文本轴标签、轴标签带下标、轴标签数学公式实战
- SAP MM MIGO 551 可以直接报废供应商寄售库存
- inet_ntop php,inet_ntop()
- python官网 中文版 新闻-新闻主页 - python兵者 - 博客园
- mysql中systimestamp_oracle数据库中timestamp是什么数据类型
- 为什么要使用PreparedStatement
- Jiaozi帮忙买的Secret Garden的票拿到了,谢谢Jiaozi
- 补充小知识:文件句柄与文件标识符
- 论文笔记(A Neural Influence Diffusion Model for Social Recommendation)
- Python的Pexpect库
- VC++2010配置使用MySQL5.6
- 搜索二叉树之字典实现
- 联发科天玑800适配鸿蒙系统,联发科天玑800什么水平
- 未来 10 年的科技圈,将会因这 10 项技术而颠覆!
- ASP.NET页面与IIS底层交互和工作原理详解(一)
- UVZ转成PDF并添加目录
- mysql注入扫描网站漏洞工具_网站安全检测,高手必备几款SQL注入工具
- 中国科学院计算机吴,专家人才库数据----中国科学院计算技术研究所
- Android基础入门
- 密码重置用HTML怎么弄,win10密码重置盘怎么弄-win10创建密码重置盘的方法 - 河东软件园...
热门文章
- 分享回顾 | 基于深度学习的神经语义搜索
- 用java做音乐识别软件
- 物联lot是什么意思_什么是NB-loT物联网技术,这里带你看懂
- 数模笔记(一):线性规划、整数规划及非线性规划1.0
- python计算机视觉学习第七章——图像搜索
- SwiftUI和Python一起从数据提取到App展示(做个世界国旗App)
- 【Android studio】将字体设为斜体/加粗
- 计算机图形学基础教程(Visual C++版)习题解答与编程实践(第2版)孔令德1-到第3章的直线扫描转换
- 计算机多媒体技术广泛应用于各个领域,计算机多媒体技术的应用
- 想要风投被你的融资 PPT 打动吗?别忘了你其实就是在想方设法卖出自己公司的部分股权...