DAX从入门到精通 5-6 Calculate的规则

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DAX从入门到精通 5-6 Calculate的规则相关的知识,希望对你有一定的参考价值。

参考技术A 这里有必要总结一下calculate是如何工作。你可以使用下面的知识来检测下你对calculate的知识。如果你能理解下面的所有知识,那么你就已经在称为DAX大师的路上了。

calculate和calculatetable是DAX中唯二的能直接产生筛选上下文的函数。

calculate中,只有第一个计算表达式是必须的选项。其他参数(也就是我们所说的过滤条件参数)都是允许忽略不写的。如果这样的话,那么我们就可以只用到calculate上下文转换的功能。

calculate中的筛选参数有三种样式:
a.布尔条件 例如product[color]='white'
b.某列的值的列表,例如all(product[color]),或者复杂的filter条件 filter(all(product[color]),product[color]='white')
c.一个表的所有行,例如filter(all(product),product[color]='white')

用上面a.b两种写法,只能对一个列进行操作。使用c的写法,可以对任意数量的列进行操作。

所有的calculate过滤条件参数都是独立运算的。然后他们会用and的关系进行合并,最后使用新生成的筛选上下文条件,进行值的计算。

calculate中的过滤条件参数是在原始上下文的环境下计算,然后它们可以缩小,扩大或者改变计算。例如当使用布尔值的写法时候,calculate替换原有的筛选上下文,把筛选参数直接传递给数据源表格,而当参数使用filter过滤表格的时候,calculate把原始的上下文条件考虑进去。第一个参数,也就是计算表达式是在新生成的上下文环境中计算的。

calculate中上下文转换和筛选条件的执行有先后顺序,先执行上下文转换,再执行筛选条件。因此,筛选条件的参数回覆盖上下文转换生成的筛选条件。

DAX从入门到精通 5-7 介绍allselected函数

参考技术A allselect是个很有效的函数,它可以只使用透视表上的页面筛选器和切片器,来计算值。例如,我们建立如下的一个透视表。

这个报表里面,我们显示了当前行对应的产品的销售占总额的百分比。这里比较困难的地方是product color同时使用于行以及切片器。按照我们现有的知识,我们会这样写函数。

使用all函数,我们移除了color字段上的筛选器。但是,all函数会移除来自于所有筛选器的筛选条件,即来自与行以及切片器,导致了结果的错误。下面的透视表中,我们可以看到结果,这里总计不是100%,而是一个更小的数值。

这个问题的是,即使用户选择的是部分的颜色,分母计算的还是所有产品的总和。但是对于每一行,你计算百分比的时候,每行除的值都是大于当前选择的颜色的总和。

所以,我们需要的是只显示选择的颜色的值的总和,而不是所有颜色的产品的值的和。我们把这种计算称为在可见情况下的计算,也就是可以按用户所选来计算总额。这里我们使用的函数是allselected。我们按这个函数来计算:

这个函数的结果,初步来看,是正确的。

allselected只返回筛选器选择的行的值。换句话说,也就是allselect忽略了透视表行列上的筛选条件,返回总的值。

allselected的参数可以使用下面三种不同的方式:

单一的列,例如allselected(product[color]),只返回选择的color的总额。

整个表,allselected返回表所选择的所有行。

没有参数,即allselected(),返回可见所有表的全部记录。

通过allselected可以动态的计算百分数和比率。在第10章中,我们会深入的讨论allselected,揭示一些更深更复杂的知识。

以上是关于DAX从入门到精通 5-6 Calculate的规则的主要内容,如果未能解决你的问题,请参考以下文章

DAX从入门到精通 5-7 介绍allselected函数

DAX从入门到精通 3-4-1 了解filter函数

DAX从入门到精通 3-6-1 了解values和distinct

DDD(领域驱动设计)从入门到精通

基本操作 Adobe Illustrator 从入门到精通

Redis从入门到精通之一:序篇