CALCULATE()函数是DAX中最复杂的函数,用于计算由指定过滤器修改的上下文中的表达式。
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]=)
, [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详解的更多相关文章

  1. 《手把手教你》系列技巧篇(四十五)-java+ selenium自动化测试-web页面定位toast-上篇(详解教程)

    1.简介 在使用appium写app自动化的时候介绍toast的相关元素的定位,在Web UI测试过程中,也经常遇到一些toast,那么这个toast我们这边如何进行测试呢?今天宏哥就分两篇介绍一下. ...

  2. 《手把手教你》系列技巧篇(四十六)-java+ selenium自动化测试-web页面定位toast-下篇(详解教程)

    1.简介 终于经过宏哥的不懈努力,偶然发现了一个toast的web页面,所以直接就用这个页面来夯实一下,上一篇学过的知识-处理toast元素. 2.安居客 事先声明啊,宏哥没有收他们的广告费啊,纯粹是 ...

  3. Mysql高手系列 - 第14篇:详解事务

    这是Mysql系列第14篇. 环境:mysql5.7.25,cmd命令中进行演示. 开发过程中,会经常用到数据库事务,所以本章非常重要. 本篇内容 什么是事务,它有什么用? 事务的几个特性 事务常见操 ...

  4. 学会Git玩转GitHub(第二篇) 入门详解 - 精简归纳

    学会Git玩转GitHub(第二篇) 入门详解 - 精简归纳 JERRY_Z. ~ 2020 / 10 / 25 转载请注明出处!️ 目录 学会Git玩转GitHub(第二篇) 入门详解 - 精简归纳 ...

  5. 学会Git玩转GitHub(第三篇) 入门详解 - 精简归纳

    学会Git玩转GitHub(第三篇) 入门详解 - 精简归纳 JERRY_Z. ~ 2020 / 10 / 25 转载请注明出处!️ 目录 学会Git玩转GitHub(第三篇) 入门详解 - 精简归纳 ...

  6. ElasticSearch第四步-查询详解

    ElasticSearch系列学习 ElasticSearch第一步-环境配置 ElasticSearch第二步-CRUD之Sense ElasticSearch第三步-中文分词 ElasticSea ...

  7. J2EE进阶(四)Spring配置文件详解

    J2EE进阶(四)Spring配置文件详解 前言 Spring配置文件是用于指导Spring工厂进行Bean生产.依赖关系注入(装配)及Bean实例分发的"图纸".Java EE程 ...

  8. [转]Linux服务器上11种网络连接状态 和 TCP三次握手/四次挥手详解

    一.Linux服务器上11种网络连接状态: 图:TCP的状态机 通常情况下:一个正常的TCP连接,都会有三个阶段:1.TCP三次握手;2.数据传送;3.TCP四次挥手. 注:以下说明最好能结合”图:T ...

  9. TCP三次握手与四次挥手详解

    目录 TCP三次握手与四次挥手详解 1.TCP报文格式 2.TCP三次握手 3.TCP四次挥手 4.为什么建立连接需要三次握手? 5.为什么断开连接需要四次挥手? 6.为什么TIME_WAIT状态还需 ...

  10. Mysql高手系列 - 第8篇:详解排序和分页(order by & limit),及存在的坑

    这是Mysql系列第8篇. 环境:mysql5.7.25,cmd命令中进行演示. 代码中被[]包含的表示可选,|符号分开的表示可选其一. 本章内容 详解排序查询 详解limit limit存在的坑 分 ...

随机推荐

  1. Java低配版简单的随机点名系统

    import java.util.*; public class Dome{ public static void addSname(String[] students){ Scanner sc = ...

  2. markdown的语法

    目录 md格式是一个纯文本格式,对于一个程序员来说,用md格式代替word.txt等格式用来写说明文档或者blog,目前github以及CSDN都支持md格式书写blog了. md格式的语法: 无序列 ...

  3. 在ubuntu15.10上编译arm-linux环境使用的log4c步骤

    步骤: 1.下载log4c源码 2.解压源码包,我解压后的路径是:/home/cc/Downloads/log4c-1.2.4 3.执行以下shell脚本: #!/bin/sh mkdir /home ...

  4. 『009』Python

    『004』索引-Language Python 准备更新中

  5. 图Lasso求逆协方差矩阵(Graphical Lasso for inverse covariance matrix)

    图Lasso求逆协方差矩阵(Graphical Lasso for inverse covariance matrix) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/ka ...

  6. zz自动驾驶中轨迹规划的探索和挑战

    大家好,今天我们主要介绍一下轨迹规划的探索和挑战,我主要从四个方面介绍: 轨迹规划的概念 决策 横向规划 纵向规划 轨迹规划的概念: 轨迹规划的核心就是要解决车辆该怎么走的问题.比如我们知道了附近有行 ...

  7. 洛谷 P5594 【XR-4】模拟赛

    洛谷 P5594 [XR-4]模拟赛 洛谷传送门 题目描述 X 校正在进行 CSP 前的校内集训. 一共有 nn 名 OIer 参与这次集训,教练为他们精心准备了 mm 套模拟赛题. 然而,每名 OI ...

  8. ionic4 ion-modal的用法

    组件内部示例 <ion-header> <ion-toolbar> <ion-title>条件筛选</ion-title> <ion-button ...

  9. NOIP模拟赛1(one)

    题目描述 Description 很久以前,有一个序列,序列里填了一些非负整数. \(zzq\) 每次可以选择序列的一个前缀,把这个前缀里的数都-1,如果这个前缀 中有 0 操作就无法进行. \(zz ...

  10. CF-weekly4 F. Kyoya and Colored Balls

    https://codeforces.com/gym/253910/problem/F F. Kyoya and Colored Balls time limit per test 2 seconds ...