他们说这是一个非常重要、很难理解的函数。然后我看了很多来解释这个函数如何重要、如何难懂的,但仔细一看很多都是翻译过来的,有些英文中文转换都写错了。但也只是用各种晦涩难懂的语言来表达,以显示其难理解还是本来就不理解。我还发现一个严肃的问题,现在逐步习惯了碎片化接受信息的时代,要花几十分钟来认真深刻理解一个问题变得越来越困难了,这是一个令人担忧的问题。所以如果有更多的时间,还是静下来看看书,保持深思的习惯。
关于这种稍微复杂一点的函数,我的想法是先掌握基本功能,遇到特殊问题的时候再来深入研究效果会更好,这一篇也是介绍CALCULATE函数的基本常用方法,下面就开始了。先还是说说语法,如下,很简单,就一个必选参数,N个可选参数↓
CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])
expression:是计算表达式,可以执行各种聚合运算;
filter:第二个参数开始,是一系列筛选条件,可以为空,如果多个筛选条件,用逗号分隔。如果有多个筛选器,可以使用 AND (&&) 逻辑运算符来计算这些筛选器,或使用 OR (||) 逻辑运算符来计算。最后会根据筛选出的数据集合执行第一个参数的聚合运算并返回运算结果。
如果只填第一个参数,就不做任何筛选,就是返回实际整体的度量值结果↓
Cal不加筛选 = CALCULATE(
SUM([总金额])/10000
)
我们增加一个筛选条件,筛选产品品类是酒类的销售金额,DAX语法如下↓
Cal酒类金额 = CALCULATE(
SUM([总金额])/10000,
'产品表'[品类]="酒类"
)
也可是使用逻辑运算符筛选多个条件,我们就筛选手机和电脑品类的产品的销售金额,DAX语句如下↓
Cal手机电脑 = CALCULATE(
SUM([总金额])/10000,
'产品表'[品类]="手机"||'产品表'[品类]="电脑"
)
结合ALL函数,扩大上下文。ALL我们只讲讲过,会把指定的筛选器全部清除掉。我们这里要算每个产品金额的占比,就使用ALL把筛选器取消,再用每个产品除以总金额,DAX写法如下↓
Cal占比 =
DIVIDE(
SUM([总金额]),
CALCULATE(
SUM([总金额]),
ALL('产品表'[品牌])
))
下面这个筛选比较有趣,但也是有使用的场景的。我们用第一个筛选器把所有的筛选器去掉,得到的结果就是所有产品的总金额,再用第二个筛选器选择产品是Adobe的金额,就得到了每一行都是Adobe的金额。最后用每个品牌的金额除以Adobe的金额,就得到了其他产品金额与Adobe金额的比值,DAX语句如下↓
Cal品类占比 =
DIVIDE(
SUM([总金额]),
CALCULATE(
SUM([总金额]),
ALL('产品表'),
'产品表'[品牌]="Adobe"
))
当然,后面的筛选项也是可以用筛选函数FILTER来实现的,比如我们还是筛选出酒类的销售额,DAX如下↓
Cal酒类金额1 = CALCULATE(
SUM([总金额])/10000,
FILTER(
'产品表',
'产品表'[品类]="酒类"
)
)
还有一个CALCULATETABLE函数,是表操作函数,使用方法和功能都差不多,就不介绍了~
End