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

在DAX函数中,绝大多数函数的执行顺序都是从左到右依次进行,例如SUMX函数SUMX(<table>,<expression>),如果table参数处使用了一个可以返回表单的表达式,则在运行时Power BI会先将这个表单表达式的结果计算出来,之后再计算expression参数部分。而CALCULATE函数CALCULATE(<expression>,<filter1>,<filter2>…)则很特殊,Power BI会先对后面的filter参数部分进行计算,之后才会运行expression表达式部分。

CALCULATE函数这种独特的从“右”到“左”的运算顺序会对运算结果产生什么样的影响呢?且看下面这个表单例子。

TotalSales = SUM('Sales SalesOrderHeader'[TotalDue])


如果创建下面这个度量值C1来计算France的产品销量,猜猜会有什么样的结果。

C1 =
CALCULATE ([TotalSales],'Sales SalesTerritory'[Name] = "France"
)

hmm,一般觉得应该只有France这一行有相应的计算结果,而其他国家对应的值都是空?但其实结果如下图所示:


对比第一张图的原始数据,France这一行的计算结果是没有问题的,但是其他国家的值也都被赋予了France的对应的销量值。

之所以出现这样的结果就是跟CALCULATE函数的筛选表达式使用布尔函数时,其含义相当于调用了FILTER函数并使用了ALL函数作为FILTER函数内的筛选条件。按照这个逻辑,前面的C1表达式等同于下面这个包含C2表达式:

C2 =
CALCULATE ([TotalSales],FILTER (ALL ( 'Sales SalesTerritory'[Name] ),'Sales SalesTerritory'[Name] = "France")
)

之前说过,CALCULATE函数的计算顺序是从“右”到“左”,所以Power BI在对C2进行运算时,会先计算FILTER函数部分。FILTER里面有一个超级无敌去筛选条件的ALL函数,所以在这个函数的作用下,外面的筛选上下文对计算结果都将起不到过滤作用。此时,FILTER函数的返回结果变成了只包含’Sales SalesTerritory’[Name] = "France"的子表单,这样,内嵌度量值[TotalSales]的计算范围就被限定到了只针对France列数据进行聚合,所以无论外围可视化表单设定了何种筛选条件,C1和C2都只会执着的显示8119749.346这个结果。

CALCULATE函数的运算顺序-第一弹相关推荐

  1. 【数据结构基础/接口函数编写】二叉树第一弹之树和堆的概念和结构、基础堆接口函数的实现(编写思路加逻辑分析加代码实操,一应俱全的汇总)

    文章目录 树的概念及结构 树的概念 树的相关概念 树的表示 二叉树的概念及结构 二叉树的概念 特殊的二叉树: 二叉树的存储结构 二叉树的性质 顺序储存 链式储存 堆 堆的概念及结构 堆的实现 头文件 ...

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

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

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

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

  4. [c语言]c语言中a++ ++a在加法运算中和printf函数中的运算顺序(初学者版)

    目录 加法运算顺序: 结论: 具体详情: printf函数中的运算顺序: 结论: 具体详情: 加法运算顺序: 结论: a++ ++a在加法中按如下顺序: 1.sum的值先加上a++中的a: 2.然后再 ...

  5. 前端面试题整理——(第一弹 HTML和CSS)

    文章目录 前端面试题整理--(第一弹 HTML和CSS) 1. 你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么? 2. 每个HTML文件里开头都有个很重要的东西,Doctype,知道这是干什 ...

  6. Hive3入门至精通(基础、部署、理论、SQL、函数、运算以及性能优化)15-28章

    Hive3入门至精通(基础.部署.理论.SQL.函数.运算以及性能优化)15-28章 [Hive3入门至精通(基础.部署.理论.SQL.函数.运算以及性能优化)1-14章](https://blog. ...

  7. MATLAB常用命令及函数大全(字母顺序)

    花了些时间把MATLAB的命令以及函数按照字母顺序列了一个清单,供大家参考.               A a       abs 绝对值.模.字符的ASCII码值        acos 反余弦  ...

  8. 关于C语言中表达式运算顺序(优先级、结合性、副作用、序列点)的讨论以及c语言未定义行为

    什么是优先级 到底什么是c语言的优先级? 我以前看了国内的很多教程,对于优先级的描述大多都是这样说的"优先级是用来决定当多个运算符出现在同一个表达式中时,先执行哪个运算符".其实这 ...

  9. DAX函数之Calculate函数

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

最新文章

  1. 【数据平台】python中文分词工具jieba
  2. DataScience:对严重不均衡数据集进行多种采样策略(随机过抽样、SMOTE过采样、SMOTETomek综合采样、改变样本权重等)简介、经验总结之详细攻略
  3. 你真的会读datasheet吗?
  4. intp适合学计算机吗,⑨MBTI测试,分析INTP型人格的专业选择和职业选择
  5. 零售创新决胜新消费暨2021中国网络零售TOP100榜单
  6. Xp下的程序编译成linux,Windows XP下硬盘安装Linux系统
  7. Leetcode每日一题:22.generate-parentheses(括号生成)
  8. paip.获取地理位置根据Ip
  9. oAuth2.0店铺订单接口,获取单笔交易的详细信息api接口
  10. Win10取消开机密码
  11. linux安装rz sz命令不能用,Linux下如何安装rz和sz命令
  12. dos下\与/有什么区别
  13. 数商云在线供应链系统服务方案:构建企业供应链平台业务、功能、技术管理架构
  14. Spring控制反转(IOC)之注解配置
  15. ubuntu php开发工具
  16. 华为耳机登陆天宫空间站 降噪科技成关键因素
  17. html绘制钟表的原理,html5 canvas绘制钟表
  18. C语言中,开3次方用什么?
  19. 笔记本电脑安装 OMV 关闭屏幕自动休眠的问题
  20. elf文件反编译C语言,图文并茂,讲透C语言静态链接,ELF文件篇

热门文章

  1. 配置聚合连接 和 配置firewalld防火墙
  2. 现在web前端主要做什么工作
  3. ROG 魔霸新锐 2022 评测
  4. HMS Core 5,面试必问知识点
  5. python黑马教程ppt_,python基础教程 PPT
  6. freemarker模板生成pdf文件
  7. 重磅!吴恩达深度学习又开新课啦!
  8. Mac电脑Finder侧边栏不显示iCloud云盘怎么办?
  9. python编写五子棋小游戏 (电脑自走棋)
  10. jsp 登陆成功后,显示登录的用户名