在加入ALL函数后,CALCULATE函数内外筛选器的交互过程
在上篇文章中,我们提到了calculate函数修改上下文的两个准则:
准则一:如果列(或表)不在筛选器上下文中,则将向筛选器上下文添加新的筛选器来计算表达式
准则二:如果列(或表)已在筛选器上下文中,则新筛选器将覆盖现有筛选器以计算表达式
今天我们看看在CALCULATE函数内使用ALL函数后,其内外筛选器是如何交互的?
两张很简单的表:学生表及成绩表,学生表记录了学生的信息,包括姓名,性别及地区,成绩表记录了两个学期的学生成绩。
度量值如下:
Filter.all.Score =
CALCULATE (
SUM ( '成绩表'[成绩] ),
FILTER (
ALL ( '学生表'[城市] ),
'学生表'[城市] = "北京"
)
)
将上述度量值与城市拖入视觉对象表中,我们可以得到如下的结果:
对于所有地区的成绩都是一样的,都是676分,该结果是如何得到的?我们一步步的想象一下PowerBI的处理过程
我们首先把学生表中的字段:城市,拖入视觉对象表中
当我们将度量值Filter.all.Score拖入视觉对象时,可以想象一下PowerBI内部处理过程:
1. 迭代所有的城市
首先碰到的是"上海", 上海在这里是行上下文
2. 执行CALCULATE函数
2.1 执行行上下文转换,筛选出"上海"对应的所有记录,其在列:城市上对应的筛选器是:上海
2.2 执行CALCULATE函数的第二个参数:FILTER
执行FITER函数时,碰到第一个参数:ALL函数,起作用是清除目标列(目标表)上已经存在的筛选器。
根据2.1 我们知道此时在列:城市中存在的筛选器是:北京,ALL函数的作用就是清除它!
然后再执行第二个参数:'学生表'[城市] = "北京"
执行完FITER函数后,那么在列:城市中的筛选器只剩下了:北京
2.3 CALCULATE函数结合内外部筛选器,确定新的上下文
因为在前面的步骤中,CALCULATE函数内外只剩了一个筛选器:北京,所以新的筛选上下文就是
'学生表'[城市] = "北京"
2.4 在城市=“北京”的上下文中执行Sum函数
依次执行上述过程,对于所有的城市其最后计算都是北京地区的成绩。
该示例的最终结果如下:
最后,我们再温习一下CALCULATE函数修改上下文时的两条准则:
准则一:如果列(或表)不在筛选器上下文中,则将向筛选器上下文添加新的筛选器来计算表达式
准则二:如果列(或表)已在筛选器上下文中,则新筛选器将覆盖现有筛选器以计算表达式
好了,我是BIseven,以上就是本人对于CALCULATE函数的理解,关于该函数的其他文章可以看这里:
https://mp.weixin.qq.com/s?__biz=MzIzMDAwMzg0NQ==&mid=2247484401&idx=1&sn=3e9760f5d1678f17ba9d7d7429600fcc&chksm=e8bb461bdfcccf0d5fc7c3b83abf4e02e98a306e0b7f2cbf02dbd5b189d935ae272fd8dc3e68&token=1689584197&lang=zh_CN#rd
https://mp.weixin.qq.com/s?__biz=MzIzMDAwMzg0NQ==&mid=2247484294&idx=1&sn=1085807e86c2973174d207a85e37cc22&chksm=e8bb466cdfcccf7ac7beaf100879f5d5641ea4cecf9c0870e0c3d4fbf46b2073d1c0c6039d41&token=1689584197&lang=zh_CN#rd
欢迎各位与我进行交流!
参考:
https://docs.microsoft.com/zh-cn/dax/calculate-function-dax
在加入ALL函数后,CALCULATE函数内外筛选器的交互过程相关推荐
- Calculate函数内外筛选器的交互过程
Calculate函数是PowerBI 中非常重要的一个函数,其作用是修改上下文并进行计算,包括执行行上下文转换, calculate函数利用其内部的参数修改已经存在的上下文,这里涉及到了上下文出现的 ...
- DAX函数之Calculate函数
DAX函数之Calculate函数: https://www.jianshu.com/p/d07b257d3590 语法: CALCULATE(,-) 第一个参数是计算表达式,可以执行各种聚合运算(或 ...
- C/C++函数指针与回调函数总结(函数指针数组)
函数有它的地址,程序运行起来了,程序里肯定有地方要放这个函数.我们知道可以用printf %p来输出一个变量的地址,数组的地址,同样我们定义了一个函数后,用这个函数的名字做输出,就可以得到这个函数的 ...
- 是引进外部函数吗_CALCULATE函数的最佳搭档:FILTER
介绍过CALCULATE函数之后,有必要再介绍它的最佳搭档:FILTER函数. CALCULATE函数的第二个及之后的参数是筛选条件,而FILTER函数正是为筛选而生. FILTER语法 FILTER ...
- python函数操作_python_函数的基本操作
1 ##---------------------- 函数 ---------------------- 2 3 ##1 定义函数 4 def hello_py(): 5 print('hello,p ...
- CALCULATE的筛选器参数多种写法
摘要 CALCULATE 筛选器参数一个迭代器. 找到合适的粒度对控制结果和性能至关重要.本文描述了创建复杂DAX筛选器的可用选项 注意: 本文是描述的是参数为表筛选器时的情景,不考虑那些Direct ...
- CALCULATE函数的运算顺序-第一弹
CALCULATE函数应该算是DAX语言中用的最广,最神奇,也最容易理解出错的一个函数.它具有重新设定筛选上下文,并且将行上下文转换为筛选上下文的能力. 在DAX函数中,绝大多数函数的执行顺序都是从左 ...
- Power BI——CALCULATE函数(对列操作)
一.语法结构: 1.语法: 其中: 1)第一个参数是计算表达式,可以执行各种聚合运算 2)从第二个参数开始,是一系列筛选条件,可以为空:如果多个筛选条件,用逗号分隔 3)所有筛选条件的交集形成最终的筛 ...
- 精品丨CALCULATE函数进阶版知识
CALCULATE函数详解 丨基础内容 语法=CALCULATE(<表达式>,<筛选器>,<筛选器>...) 基本用途:根据已有外部上下文构建一个新的上下文进行求值 ...
最新文章
- [翻译] ASP.NET内幕 - IIS处理模型
- [Markdown] 数学公式
- OpenStack 系列文章
- 创业路上有指引,永洪CEO给企业服务型创业公司的融资建议
- java难学还是pythonnanxue_关于python:为什么numpy中的“ NaN”比“ -np.inf”更小?
- 《深入理解 Spring Cloud 与微服务构建》第七章 负载均衡 Ribbon
- java安装路径_java环境变量和查看安装路径
- 错误:无法打开web项目”****“,文件路径“****”与url“**”不符。这两者要映射到相同的服务器位置。...
- 给npm加上国内镜像
- Exchange2013/2016 ECP/OWA无法通过用户验证EventID3002/3005
- 非常好用的自助建站程序整站源码 内置几十种站
- ppt大赛优秀作品计算机,ppt大赛获奖作品展示.ppt
- java field.gettype_Java Field getGenericType()用法及代码示例
- 带你玩转kubernetes-k8s(第54篇-Kubernetes之使用API聚合机制扩展API资源)
- 微信公众平台接口,asp.net实现
- C语言使用while语句实现循环结构
- 相关性分析热点图_车联网数据分析(二):驾驶行为分析
- erdas查看灰度直方图_ERDAS图像的基本操作
- COUNT、COUNTA、MAX三个函数在excel计数上的应用对比和案例
- 项目:宅人食堂——点餐系统