惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Darknet – Hacking Tools, Hacker News & Cyber Security
V
Vulnerabilities – Threatpost
Cloudbric
Cloudbric
G
GRAHAM CLULEY
S
Securelist
Schneier on Security
Schneier on Security
Help Net Security
Help Net Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Project Zero
Project Zero
Spread Privacy
Spread Privacy
P
Privacy International News Feed
C
Cyber Attacks, Cyber Crime and Cyber Security
Cisco Talos Blog
Cisco Talos Blog
T
Tailwind CSS Blog
博客园_首页
有赞技术团队
有赞技术团队
Simon Willison's Weblog
Simon Willison's Weblog
Stack Overflow Blog
Stack Overflow Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Latest news
Latest news
T
Tor Project blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Attack and Defense Labs
Attack and Defense Labs
www.infosecurity-magazine.com
www.infosecurity-magazine.com
O
OpenAI News
J
Java Code Geeks
T
Tenable Blog
K
Kaspersky official blog
AWS News Blog
AWS News Blog
S
Security @ Cisco Blogs
The GitHub Blog
The GitHub Blog
T
Threatpost
月光博客
月光博客
H
Heimdal Security Blog
Security Latest
Security Latest
The Hacker News
The Hacker News
Y
Y Combinator Blog
A
Arctic Wolf
Apple Machine Learning Research
Apple Machine Learning Research
C
Cisco Blogs
美团技术团队
Microsoft Security Blog
Microsoft Security Blog
Hugging Face - Blog
Hugging Face - Blog
T
The Blog of Author Tim Ferriss
C
CERT Recently Published Vulnerability Notes
D
Docker
Google Online Security Blog
Google Online Security Blog
D
DataBreaches.Net
V
Visual Studio Blog
H
Help Net Security

Power BI – Ed_'s Blog

Power BI 由于缺少事实数据,X轴日期不连续 – yywr's Blog Power BI里DAX上下文转换到底是怎么转换的 – yywr's Blog 中国式报表学习解析-多级表头&自定义小计 – yywr's Blog 中国式一页纸矩阵表报告制作解析 – yywr's Blog NPS模型Power BI报表解析记录 – yywr's Blog 数据模型初探 – yywr's Blog [初接触] DAX 中的行上下文与EARLIER() 函数 – yywr's Blog
PowerBI中DAX语言的上下文是什么 – yywr's Blog
yywr · 2019-02-23 · via Power BI – Ed_'s Blog

什么是上下文

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

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

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

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

Pivot table

上下文可以是行、列、切片器、筛选器,这些环境(计算上下文)进行“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() 函数就很好理解了,因为计算的时候涉及到了两个行上下文,我得去区分它们。