allselect是个很有效的函数,它可以只使用透视表上的页面筛选器和切片器,来计算值。例如,我们建立如下的一个透视表。
image.png
这个报表里面,我们显示了当前行对应的产品的销售占总额的百分比。这里比较困难的地方是product color同时使用于行以及切片器。按照我们现有的知识,我们会这样写函数。
[SalesPct] :=
DIVIDE (
[Sales Amount],
CALCULATE (
[Sales Amount],
ALL ( Product[Color] )
))
使用all函数,我们移除了color字段上的筛选器。但是,all函数会移除来自于所有筛选器的筛选条件,即来自与行以及切片器,导致了结果的错误。下面的透视表中,我们可以看到结果,这里总计不是100%,而是一个更小的数值。
image.png
这个问题的是,即使用户选择的是部分的颜色,分母计算的还是所有产品的总和。但是对于每一行,你计算百分比的时候,每行除的值都是大于当前选择的颜色的总和。
所以,我们需要的是只显示选择的颜色的值的总和,而不是所有颜色的产品的值的和。我们把这种计算称为在可见情况下的计算,也就是可以按用户所选来计算总额。这里我们使用的函数是allselected。我们按这个函数来计算:
[SalesPct] :=
DIVIDE (
[Sales],
CALCULATE (
[Sales],
ALLSELECTED ( Product[Color] )
))
这个函数的结果,初步来看,是正确的。
allselected只返回筛选器选择的行的值。换句话说,也就是allselect忽略了透视表行列上的筛选条件,返回总的值。
allselected的参数可以使用下面三种不同的方式:
单一的列,例如allselected(product[color]),只返回选择的color的总额。
整个表,allselected返回表所选择的所有行。
没有参数,即allselected(),返回可见所有表的全部记录。
通过allselected可以动态的计算百分数和比率。在第10章中,我们会深入的讨论allselected,揭示一些更深更复杂的知识。
网友评论