CALCULATETABLE与FILTER有什么区别?

CALCULATETABLE与FILTER有什么区别?_第1张图片

昨天介绍了CALCULATETABLE与CALCULATE的区别,了解了CALCULATETABLE返回的是一个表,FILTER其实也有同样的功能,返回一个经过筛选的表,那么这两个函数有什么区别呢?

比如在返回一个表时,下面这两个表达式返回的结果是相同的:

--------

CALCULATETABLE (

'Product',

'Product'[Color] ="Red"

)

--------

FILTER (

'Product',

'Product'[Color] ="Red"

)

--------

但其计算逻辑并不相同,CALCULATETABLE在执行的时候,首先是改变筛选上下文,然后再计算表达式。相反,FILTER则是先迭代其第一个参数的结果,再检索能满足条件的行。换句话说,FILTER并不改变筛选上下文。

你可以通过下面的例子对比它们的差异:

Red Products CALCULATETABLE =

CALCULATETABLE (

ADDCOLUMNS(

VALUES( 'Product'[Color] ),

"Num of Products", COUNTROWS ( 'Product' )

    ),

'Product'[Color] ="Red"

)

结果如下

-------------

Color     Num of Products

Red       99

------------

通过使用CALCULATETABLE,执行ADDCOLUMNS和COUNTROWS的上下文环境都是“筛选过的红色产品”。所以,返回的结果就是仅一行包括:颜色是红色,产品数量是99。换句话说,COUNTROWS仅仅计算了红色的产品,而没有从VALUES生产的行中进行上下文转换。

如果用FILTER替换CALCULATETABLE,结果就不一样了,请看下表:

Red Products FILTER external =

FILTER (

ADDCOLUMNS(

VALUES( 'Product'[Color] ),

"Num of Products", COUNTROWS ( 'Product' )

    ),

'Product'[Color] ="Red"

)

这次,返回的结果不再是99;相反,它显示了产品总数,如下图

---------------

Color   Num of Products

Red     2519

--------------

这个表包括产品颜色的红色,但是产品数量计算的结果是2517,而这个数字是所有产品的数量。原因就是:FILTER没有改变筛选上下文。另外,FILTER执行的时候在ADDCOLUMNS之后,因为没有上下文的转换,ADDCOLUMNS直接迭代了所有的产品,COUNTROWS也直接计算了所有产品的数量。只是在最后,FILTER从所有颜色中选择了一个红色。



以上内容是今天学习DAX圣经2,其中的一个知识点的分享,更多细节请大家多看看DAX圣经,精通PowerBI必看的一本书。

如果你刚开始学习,可以在微信公众号"PowerBI星球",回复"PowerBI",获取《七天入门Power BI》电子书,看书的同时动手练习,帮你快速入门,轻松上手。

-精彩推荐-

PowerBI数据分析和可视化实战案例

精选 | 实用炫酷的Power BI自定义图表

准备30天,我通过了PowerBI认证考试

你可能感兴趣的:(CALCULATETABLE与FILTER有什么区别?)