Power BI(二十一)power pivot之筛选上下文和行上下文

Power BI(二十一)power pivot之筛选上下文和行上下文

其实上下文概念并不深奥,但是对于习惯使用Excel计算函数的亲们来说在学习这块知识时感觉会比较别扭,这主要是因为在Excel中,某一段计算内容的确定是通过Excel表格中的坐标来确定的,非常直观,例如SUM(A1:A3),能让人一眼就明白要计算的内容是A1单元格到A3单元格之间所有数字的总和。而在DAX中,为了支持对大数据进行多样化的运算,它没有使用Excel中通过固定坐标定义函数运算范围的方式,转而通过上下文概念来定义函数所在的环境变量,即其运算范围,实现了函数对数据的处理可以根据上下文的不同而输出不同的运算结果。因此,只有充分理解了上下文含义才能更好的使用DAX来分析数据。

DAX中有两种类型的上下文分:行上下文(Row Context)和筛选上下文(Filter Context)。
 

行上下文

行上下文可以理解为当前行内容。行上下文的应用范围不只局限于当前一张表。如果两张表之间建立了关联关系,则通过该关联关系就形成一个跨表的行上下文。

 

筛选上下文

筛选上下文是指将原始数据按照一定规则进行筛选,然后将提取出来的结果再作为环境变量带入到函数中使用。通过设定筛选上下文,可以灵活的改变函数的运算范围,实现数据分类分析处理的目的。

 

需要记住的是,DAX的行上下文和筛选上下文共同作用于函数运算当中并对其结果产生影响。在分析行上下文对函数结果的影响时要以当前行中的数据为研究基准,而分析筛选上下文对函数结果的影响时则要从筛选出的子表单入手进行。
当创建计算列时,DAX会自动为其定义行上下文关系,即计算列中的每个值都受到其所在行数据的影响。而当使用度量值创建报表时,其运算都是基于表单中其他条件生成的筛选上下文而进行的。
--------------------- 

以上介绍内容摘自(具体理论可以去看这一篇博客),我们主要实战

https://blog.csdn.net/jessica_seiya/article/details/90904341

 

常用函数FILTER、ALL、CALCULATE三者与上下文关系

用一个例子,公路自行车占各省的销售金额以及占各省销售的占比

FILTER:带入一个新的行上下文,不会影响原有的上下文,可以被切片

ALL:完全用自身所有数据,其他行/筛选上下文不起作用

CALCULATE:针对公式里面列会强行替换原有上下文,其他不受影响

 

下面验证一下上面三个函数对上下文影响:

数据集(销售记录)

Power BI(二十一)power pivot之筛选上下文和行上下文_第1张图片

Power BI(二十一)power pivot之筛选上下文和行上下文_第2张图片

Power BI(二十一)power pivot之筛选上下文和行上下文_第3张图片

度量值如下:

销售额:=SUM([金额])

公路自行车销售额:=SUMX(FILTER('销售记录','销售记录'[产品名称]="公路自行车"),'销售记录'[金额])

金额占比:=DIVIDE([公路自行车销售额],[销售额])

用ALL计算的销售额:=SUMX(ALL('销售记录'),'销售记录'[金额])

CAL计算公路自行车销售额:=CALCULATE([销售额],'销售记录'[产品名称]="公路自行车")

CAL/ALL计算公路自行车销售额:=CALCULATE([用ALL计算的销售额],'销售记录'[产品名称]="公路自行车")

生成数据透视表

Power BI(二十一)power pivot之筛选上下文和行上下文_第4张图片

Power BI(二十一)power pivot之筛选上下文和行上下文_第5张图片

添加切片器(画红色的发生变化了)

Power BI(二十一)power pivot之筛选上下文和行上下文_第6张图片

CALCULATE函数计算与FILTER/SUMX没什么差别,但是在筛选为产品名称就有差别了

CAL计算公路自行车销售额:=CALCULATE([销售额],'销售记录'[产品名称]="公路自行车")

CALCULATE里面的行上下文替换了原有的筛选上下文,所以每一行都会有记录,而FILTER带入一个新的行上下文,不会影响原有的上下文,可以被切片

Power BI(二十一)power pivot之筛选上下文和行上下文_第7张图片

 

使用Calculate进行上下文转换

我们想统计产品分类----销售额占百分比

Power BI(二十一)power pivot之筛选上下文和行上下文_第8张图片

传统做法

生成数据透视表--值显示方式---

Power BI(二十一)power pivot之筛选上下文和行上下文_第9张图片

Power BI(二十一)power pivot之筛选上下文和行上下文_第10张图片

Power BI(二十一)power pivot之筛选上下文和行上下文_第11张图片

使用DAX函数怎么生成呢?

度量值

销售额:=SUM([金额])

总的销售额ALL:=SUMX(ALL('销售记录'),'销售记录'[金额])

ALL百分比:=DIVIDE([销售额],[总的销售额ALL])

Power BI(二十一)power pivot之筛选上下文和行上下文_第12张图片

但是我们按照年份筛选就会有存在问题

Power BI(二十一)power pivot之筛选上下文和行上下文_第13张图片

 

所以我们可以改进一下

总的销售额CAL:=CALCULATE([销售额],ALL('产品分类'))

CAL百分比:=DIVIDE([销售额],[总的销售额CAL])

Power BI(二十一)power pivot之筛选上下文和行上下文_第14张图片

你可能感兴趣的:(Power,BI,Power,BI)