在上篇文章中,我们提到了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函数内外筛选器的交互过程相关推荐

  1. Calculate函数内外筛选器的交互过程

    Calculate函数是PowerBI 中非常重要的一个函数,其作用是修改上下文并进行计算,包括执行行上下文转换, calculate函数利用其内部的参数修改已经存在的上下文,这里涉及到了上下文出现的 ...

  2. DAX函数之Calculate函数

    DAX函数之Calculate函数: https://www.jianshu.com/p/d07b257d3590 语法: CALCULATE(,-) 第一个参数是计算表达式,可以执行各种聚合运算(或 ...

  3. C/C++函数指针与回调函数总结(函数指针数组)

    函数有它的地址,程序运行起来了,程序里肯定有地方要放这个函数.我们知道可以用printf  %p来输出一个变量的地址,数组的地址,同样我们定义了一个函数后,用这个函数的名字做输出,就可以得到这个函数的 ...

  4. 是引进外部函数吗_CALCULATE函数的最佳搭档:FILTER

    介绍过CALCULATE函数之后,有必要再介绍它的最佳搭档:FILTER函数. CALCULATE函数的第二个及之后的参数是筛选条件,而FILTER函数正是为筛选而生. FILTER语法 FILTER ...

  5. python函数操作_python_函数的基本操作

    1 ##---------------------- 函数 ---------------------- 2 3 ##1 定义函数 4 def hello_py(): 5 print('hello,p ...

  6. CALCULATE的筛选器参数多种写法

    摘要 CALCULATE 筛选器参数一个迭代器. 找到合适的粒度对控制结果和性能至关重要.本文描述了创建复杂DAX筛选器的可用选项 注意: 本文是描述的是参数为表筛选器时的情景,不考虑那些Direct ...

  7. CALCULATE函数的运算顺序-第一弹

    CALCULATE函数应该算是DAX语言中用的最广,最神奇,也最容易理解出错的一个函数.它具有重新设定筛选上下文,并且将行上下文转换为筛选上下文的能力. 在DAX函数中,绝大多数函数的执行顺序都是从左 ...

  8. Power BI——CALCULATE函数(对列操作)

    一.语法结构: 1.语法: 其中: 1)第一个参数是计算表达式,可以执行各种聚合运算 2)从第二个参数开始,是一系列筛选条件,可以为空:如果多个筛选条件,用逗号分隔 3)所有筛选条件的交集形成最终的筛 ...

  9. 精品丨CALCULATE函数进阶版知识

    CALCULATE函数详解 丨基础内容 语法=CALCULATE(<表达式>,<筛选器>,<筛选器>...) 基本用途:根据已有外部上下文构建一个新的上下文进行求值 ...

最新文章

  1. [翻译] ASP.NET内幕 - IIS处理模型
  2. [Markdown] 数学公式
  3. OpenStack 系列文章
  4. 创业路上有指引,永洪CEO给企业服务型创业公司的融资建议
  5. java难学还是pythonnanxue_关于python:为什么numpy中的“ NaN”比“ -np.inf”更小?
  6. 《深入理解 Spring Cloud 与微服务构建》第七章 负载均衡 Ribbon
  7. java安装路径_java环境变量和查看安装路径
  8. 错误:无法打开web项目”****“,文件路径“****”与url“**”不符。这两者要映射到相同的服务器位置。...
  9. 给npm加上国内镜像
  10. Exchange2013/2016 ECP/OWA无法通过用户验证EventID3002/3005
  11. 非常好用的自助建站程序整站源码 内置几十种站
  12. ppt大赛优秀作品计算机,ppt大赛获奖作品展示.ppt
  13. java field.gettype_Java Field getGenericType()用法及代码示例
  14. 带你玩转kubernetes-k8s(第54篇-Kubernetes之使用API聚合机制扩展API资源)
  15. 微信公众平台接口,asp.net实现
  16. C语言使用while语句实现循环结构
  17. 相关性分析热点图_车联网数据分析(二):驾驶行为分析
  18. erdas查看灰度直方图_ERDAS图像的基本操作
  19. COUNT、COUNTA、MAX三个函数在excel计数上的应用对比和案例
  20. 项目:宅人食堂——点餐系统

热门文章

  1. 阶乘类,可以精确计算大数的阶乘,10000的阶乘只要1.3秒左右
  2. L3-021 神坛 (30 分)(极角排序)
  3. linux最新的版本是多少,redhat最新的版本是多少啊?
  4. wap网站和www服务器,web和wap网站的区别 (转)
  5. 机电技术综合实训系统
  6. STC51单片机-多功能信号发生器设计-物联网应用系统设计项目开发
  7. 为什么蘑菇街选择自建商城。
  8. PPSIG:CTR-GCN 动作识别
  9. Python 实训 1 计算 iris 数据值的均值
  10. 七分努力二分喜悦一分失望---PMP学习考试总结