PP-DAX入门:无动态,不智能——谈谈DAX函数的计算环境(筛选上下文)问题
小勤:BI(商务智能)到底有什么不一样啊?倒来倒去到最后不也是出一堆的图或表吗?Excel里不也可以弄吗?
大海:对的,Excel里当然也可以做图表,而且还能做得很漂亮,而且可以做得很个性化,但你有没有发现,用Excel做动态图表的时候挺麻烦的?
小勤:这倒是,所以很多大神研究了很多怎么样结合控件等方法来做数据筛选,然后实现动态的方法,但感觉操作起来比较麻烦,而且灵活性实际也不是很高。
大海:嗯。仔细想想,做动态的数据分析,从各种角度去分析数据,其实就是一个根据实际需要,快速筛选出所需要的数据,然后对筛选过的数据进行各种计算的一个过程。
小勤:感觉好抽象啊。能不能举个例子来看看?
大海:好吧,我们先看个简单的数据分析的例子,这个例子只有一个表,先添加到数据模型,然后添加一个度量——订单数量:=sum('订单明细'[数量]),如下图所示:
接下来,我们创建一个数据透视图(按产品类别的订单数量),同时添加货主区域为筛选条件,添加运货商为切片器,调整显示形式后大致如下图所示:
这时,如果通过筛选条件或切片器进行数据的选择,图形(也即通过SUM函数计算的数据)会随之而变化:
小勤:这不应该是很自然的问题吗?
大海:问题是,你有没有想过,你在写度量的时候,只是用了一个SUM函数,只引用了订单明细表里的数量列啊。你看数据模型里那个度量值,而且有一个明确的结果(51319):
但到了分析图里的时候,它就变了。如果在Excel里写SUM函数求和的话,它会跟着你的筛选变吗?
小勤:哦。这个倒是,在Excel里倒是不行的,但好像SUBTOTAL可以实现类似的统计。
大海:对的,Excel里SUBTOTAL是只对显性的数据进行计算,在Power Pivot(BI)里,我们实现的可就是完全动态的计算了。
小勤:嗯。那么,这是不是说,在Power Pivot里,SUM函数的计算结果是随着筛选(切片)的情况而随机应变的?
大海:说得很好,随机应变——所谓动态、智能,不就是能随机应变嘛!在Power Pivot里,函数的计算就是随机应变的,即到底怎么计算,首先看所处在的环境,你对运货商进行切片或对货主区域进行筛选后,SUM函数的计算环境就变了,所以它的计算结果也就随之而变——目前这种通过筛选的方法改变“计算环境”的概念有个专业叫法:筛选上下文。
小勤:本来SUM这个函数好简单的,可一说专业名词就开始觉得又好抽象了!汗啊。
大海:不用着急,你现在先有这种概念就行:PowerPivot(BI)里的大部分函数计算时都是受计算环境影响的,所以会随着切片、筛选的数据情况而动态变化,也就是说,你筛选了啥数据出来,我就计算啥,如果你啥都不选的时候,我就当做选了所有的。
小勤:啥都不选的时候就当做选了所有的?
大海:对啊,你看刚开始写度量的时候,不就是一个总数吗?
小勤:嗯。那为什么又说是“大部分函数”呢?又有特例?
大海:也不是说特例,只是比如说,如果你做数据分析时,我就是需要某些计算不随选择而变化的,那难道用Power Pivot(BI)就歇菜了?那还有啥用啊?
小勤:也对,虽然大部分时候是需要动态变化的,但肯定有些时候有些数据是不希望随着筛序变化的。
大海:嗯,所有有些函数就是为你去实现这些功能的,或者再进一步强化筛序的,后续慢慢学习就可以理解了。
小勤:好的。我先多弄几个图表切切或选选来理解一下“筛选上下文”吧。
【
Power系列基础精选
】