首页 > 解决方案 > 我们什么时候使用 FILTER,什么时候在 CALCULATE 中使用 KEEPFILTERS?

问题描述

我创建了两个措施:

Revenue Red 1 = CALCULATE([Revenue], FILTER('Product', 'Product'[Color] = "Red"))

Revenue Red 2 = CALCULATE([Revenue], KEEPFILTERS('Product'[Color] = "Red"))

似乎表现相似

在此处输入图像描述

可以通过下载来调查测量行为

https://github.com/MicrosoftDocs/mslearn-dax-power-bi/raw/main/activities/Adventure%20Works%20DW%202020%20M06.pbix

并添加上面的两个措施。

根据文档https://docs.microsoft.com/en-us/dax/keepfilters-function-dax我了解 CALCULATE 过滤器替换同一列上的任何过滤器,而 KEEPFILTERS 子句始终适用。但我仍然觉得这令人困惑,我想知道使用这两种结构的最佳实践是什么。任何见解将不胜感激。

标签: powerbidax

解决方案


当您在表格上写下度量时:

Measure :=
CALCULATE ( 
    [Revenue] ,
    'Product'[Color] = "Red"
)

过滤器在查询时转换为:

Measure :=
CALCULATE ( 
    [Revenue] , 
    FILTER ( 
        ALL ( 'Product'[Color] ) , 
        'Product'[Color] = "Red"
    )
)

请注意,当前过滤器上下文中的任何过滤器都会被该ALL函数删除(而不是由其CALCULATE本身)。

如果过滤器上下文对这一点很重要,您可以调用KEEPFILTERS来改变语义,以便在指定列上保留过滤器。这意味着表单上的一个度量:

Measure :=
CALCULATE ( 
    [Revenue] ,
    KEEPFILTERS ( 'Product'[Color] = "Red" )
)

被翻译成:

Measure :=
CALCULATE ( 
    [Revenue] , 
    FILTER ( 
        VALUES ( 'Product'[Color] ) , 
        'Product'[Color] = "Red"
    )
)

推荐阅读