PowerBI中DAX语言的上下文是什么

什么是上下文

上下文就是DAX公式计算时所处的环境

列如:=SUM(FactSales[SaleAmount])
这个公式解读为计算所有销售金额的总计

但是一般的透视表中常见的一种情况就是,产品按照类别和年份对比查看,比如白色的产品在2015年的销售总额。

公式不用变化,但是在将FactSales表中的[SaleAmount]列给到SUM进行计算前,已经进行了两次条件限定,一是颜色属性值为白色的产品,二是在2015年销售出去产品,两个条件以“和”运算,筛选出来的结果(2015年销售出去的白色产品)再给到SUM计算,这就是上下文,即公式实际进行计算的环境

上下文可以是行、列、切片器、筛选器,这些环境(计算上下文)进行“AND”运算筛选出来的结果再给到计算函数进行计算,这就有了只写一个公式,但是在透视表中可以计算出不同的结果。

存在两类上下文,在DAX中,这两类上下文始终存在并影响着公式的计算结果。一类筛选上下文,一类是行上下文

筛选上下文

如上面解释上下文中提到的,当建立一个透视表的时候,会对透视表的行、列进行设计,从而限定公式计算的环境,这些就是筛选上下文,所以开头用到的公式准确的解读应该如下:

=SUM(FactSales[SaleAmount])
计算筛选上下文中所有销售金额的总计

行上下文

先回忆一下EXCEL中的一个公式 :C1=A1+B1,然后,在C列填充这个公式,C列中每一有效行都得到一个不同的计算公式,比如 C20 = A20+B20。
EXCEL中我们可以定位某行和某列的交叉数据,使得我们可以操作公式对具体的单元格数值进行运算。

但是在PowerBI中的DAX可不是这样,我们能使用的最小颗粒度是列,而不是具体到某一个“单元格”,我们没办法也没必要操作“行”,在公式计算的时候默认使用了“当前行”这个计算环境。

把EXCEL中的公式用法挪到DAX中就成了这样:FactSales[GrossAmount] =FactSales[SaleAmount] + FactSales[DiscountAmount] ,这里的公式只用了列名,但是每个行都正确的计算出了结果,怎么做到的呢?为什么公式不会用第一行的[SaleAmount] 的值和第二行的[DiscountAmount]值进行计算?

我们给了两列值到公式中,当公式开始进行计算的时候,DAX内部是一行一行进行计算的(实际算法会有不同,但无需理会),第一次计算的时候,有一个隐含的计算环境:“第一行”。所以这个时候公式接收到的[SaleAmount]值只有一个,[DiscountAmount]值也只有一个,都是第一行的值,结果当然也只有一个(结果给到新列FactSales[GrossAmount]的时候,也被限定给到这一行)。计算完该行之后进入下一行,计算环境又变成了“第二行”,再计算一次,直到计算完所有的行。

这里计算公式计算到哪一行的时候,就被“当前行”这个环境限定了,这就是隐含在内部的行上下文。

理解了行上下文,再来回头看DAX中的 EARLIER() 函数就很好理解了,因为计算的时候涉及到了两个行上下文,我得去区分它们。

(0)

相关推荐

  • 当Power BI遇上数学:用DAX解决数据的循环迭代

    本文来自PowerBI星球嘉宾Davis的分享,Davis曾在知乎上发表过数篇高质量的PowerBI文章,是不折不扣的PowerBI技术大神.当我邀请他为星友们也分享一些干货时,他欣然同意,于是有了这 ...

  • Power BI Desktop 中的 DAX 基本概念

    在 Power BI Desktop 中应用 DAX 的基础知识 2019/10/21 M o 本文适用于刚开始使用 Power BI Desktop 的用户. 为你提供有关如何使用数据分析表达式 ( ...

  • EARLIER 函数 | PowerBI星球

    前面利用PowerBI做数据分析的时候都是对整列的字段进行操作,并没有做更细化的分析,比如分析数据的每一行.提取某一行的数据,这在Excel中很容易实现,因为Excel公式是对单元格操作.那么在Pow ...

  • 你的DAX学习热情,是怎样一步步被磨掉的?

    你的DAX学习热情,是怎样一步步被磨掉的?

  • Power BI数据建模

    数据建模并没有那么高深,你同样可以学会!这篇文章通过一个实例创建一个简单的数据建模,并引出两个重要的概念:度量值和DAX. 之前谈论PowerBI与Power Pivot的关系时就提到,Power B ...

  • 度量值 | PowerBI星球

    本文学习PowerBI最重要的概念:度量值 初学Power BI一般都会对度量值比较困惑,毕竟对长期接触Excel的人来说,这是个全新的概念,但一旦理解了她,肯定会立即喜欢上. 简单来说,度量值是用D ...

  • PP-DAX入门:行上下文,先来了解一下简单的概念

    小勤:订单明细表里要添加每样产品的金额怎么办?现在有单价和数量,能不能直接乘出来啊? 大海:这个跟Excel里操作基本一样,你在"添加列"那里写等式就行. 小勤:嗯,在Power ...

  • PP-DAX入门:无动态,不智能——谈谈DAX函数的计算环境(筛选上下文)问题

    小勤:BI(商务智能)到底有什么不一样啊?倒来倒去到最后不也是出一堆的图或表吗?Excel里不也可以弄吗? 大海:对的,Excel里当然也可以做图表,而且还能做得很漂亮,而且可以做得很个性化,但你有没 ...

  • DAX进阶-ALL函数的理解雷区!

    在文章<死磕Calculate之1:改变筛选上下文之忽略("删")>里,我说"把筛选上下文给去掉(删),用All函数",如下所示: 这里面,可能强调 ...

  • 通过一个案例,掌握Power BI可视化的制作技巧

    前一段在知识星球中,星友Gavin提出了一个关于个性化的瀑布图制作问题,最近也被其他人问过类似的做法,我觉得挺典型,值得写篇文章介绍一下. 瀑布图我们并不陌生,它以悬空柱形图的方式,展示数据变动的过程 ...

  • 关于VAR,我犯了一个错误

    本文源于微博上一位朋友的问题,在计算同比增长率时,以下两种DAX代码有什么不同? -------------------- YOY% 1 = VAR sales=SUM('订单'[销售额]) VAR ...

  • 免费教学视频目录大全(更新至2021年9月)

    一.Power BI专题教学视频 Power BI DAX表达式系列 专题分享:计算上下文之行上下文的理解 DAX圣经第二版 04章:理解筛选上下文 DAX圣经第二版 09章:   介绍计算组(一) ...

  • 这些常用的DAX函数,你是否都掌握了

    关于DAX的学习,相对来说,是PowerBI中难度较高的一个模块.PowerBI星球发表的一系列文章中,比较常用的.值得单独写篇文章来介绍的DAX函数也发表过一些,并尽量做到通俗易懂,帮你快速熟悉DA ...

  • 为什么学不会Excel超级透视表?

    数据透视表,作为简单.易上手.高效的数据分析工具,受到了办公一族的喜欢,但是有些需求普通透视表又无法完成,比如求超过平均数的有多少条记录? 如何把对应部门人员合并到一个单元格中显示等等!但是这些超级透 ...