什么是上下文:
在Power BI中,表是由行和列构成的,我们的上下文也分为两种:
筛选上下文和行上下文
我们之前接触的都是:筛选上下文
提到“筛选条件”就是筛选上下文
- 什么是行上下文:
例如:新建列,公式=[销售数量]+10
当前所在行,将每一行的销售数量都加上10
我们把每节课都用到的度量值放在商品表中新建列试试:
销售总量= SUM(‘销售明细表’[销量数量] )
行上下文是商品表中的当前行,而销售总量是销售明细表中的销售数量那一列的总计。它是两张表。总结:商品表的行上下文不影响销售明细表输出的销售数量合计的结果,所以这一列都是一个数字。回到模型中看一下商品表和销售明细表的关系是一对多。那为什么没有算出每个商品应有的销售数量呢?我们建立模型了?
行上下文本身没有筛选功能,要达到筛选这个目的,必需借助我们的引擎:Calculate函数
计算销售明细表中数量的总和,它的行上下文是当前所在行
所以:行上下文不会自动转换成筛选上下文。
借助我们的引擎:Calculate函数
新销售总量=calculate(SUM(‘销售明细表’[销量数量]))
例子:
需求:每一天果汁销售量大于100杯的门店
销售c = CALCULATE([销售数量],FILTER(‘店名表’,[销售数量]>100 ))
初始筛选条件:每一天,门店
不能是销售c = CALCULATE([销售数量],FILTER(‘店名表‘,sum(‘销售明细表’ [销售数量])>100 ))
原因
FILTER函数是行上下文函数:
行上下文不会自动转换成筛选上下文,所以公式sum(‘销售明细表’ [销售数量])>100 并没有受到行上下文的影响,它计算的是销售数量那一列的数量合计。
切记:
度量值都自带Calculate函数的功能!
销售总量= SUM(‘销售明细表’[销量数量] )
[总金额]、[总毛利额]等
等同于
Calculate(SUM(‘销售明细表’[销量数量] ))
总结:
1.行上下文不会自动转换筛选上下文,要转换,必需套一个Calculate引擎。
2.度量值天生就是Calculate函数。