PowerBI Calculate用法
Cemon_Liu Lv5

Calculate用法

In this final section of a long and difficult chapter, we are now able to provide the definitive guide to CALCULATE. You might want to reference this section multiple times, while reading the remaining part of the book. Whenever you need to recall the complex behavior of CALCULATE, you will find the answer in this section

这个函数的确是DAX的精髓,当我写了一段时间的DAX后,就像上面所说,还是要回来重读这一章。先理解最常规的用法。从下面两个图说起:

第一个图

image

我们经常要用DAX去求占比,有时会忘记具体用法。先放上具体的DAX函数。

1
2
3
4
5
6
7
SaleAmount = sumx(Sales,Sales[Quantity]*Sales[Net Price])

salesallCat = CALCULATE([SaleAmount],ALL('Product Category'[Category]))

SaleAudio = CALCULATE([SaleAmount],'Product Category'[Category]="Audio")

SaleKeepFilter = CALCULATE([SaleAmount],KEEPFILTERS('Product Category'[Category]="Audio"))

SaleAmount比较简单,就是单纯计算数量和价格的乘积。当我们把数据丢到table里面powerbi自动会帮我们对应到不同的category去分别计算。

当时如果我们想计算所有的Amount,然后求每个分类的占比,这个自动的分类对于我们来说就没有什么帮助了。所以要使用calculate 搭配ALL进行计算,使用ALL就是代表不管我目前的表格对应到哪个category,我都是忽略直接统计所有的category,这样就显示出所有的统计了。逻辑图展示如下,
image

如果要计算特定的category, 比如我们DAX里面计算Audio的统计,正常情形下,只要在calculate里面加入一个判定式即可。这个写法虽然看着简单,其实后台实现不简单;他是等同于Filter(All('Product Category'[Category]),'Product Category'[Category]="Audio")。要谨记,这里不是单纯返回true or false,他是返回了一个table.

keepfilters则是不覆盖当前的筛选,额外添加一个筛选,参考逻辑如下,两个不同category累加就不会显示数据了。
image

第二个图

将各category的Amount 占比当年的总收入
image

先附上DAX函数,使用了两种写法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
PctAllCY = 
VAR currentSale=[SaleAmount]
var saleCY= CALCULATE([SaleAmount],ALL(Sales),VALUES('Date'[Calendar Year]))

VAR Result= DIVIDE(currentSale,saleCY)

Return Result

PctAllCY2 =
VAR currentSale=[SaleAmount]
var saleCY= CALCULATE([SaleAmount],ALLEXCEPT(Sales,'Date'[Calendar Year]))

VAR Result= DIVIDE(currentSale,saleCY)

Return Result

这里使用了一个经典写法Calculate(measure,ALL(),Values()), 应该算是一个通用写法,就是在计算SaleAmount时,先移除所有事实表的filter,同时使用values又保留了当前某个特定条件的filter,执行的逻辑图如下。
image

 评论
评论插件加载失败
正在加载评论插件
由 Hexo 驱动 & 主题 Keep
访客数 访问量