【问题标题】:when do we use FILTER and when KEEPFILTERS in CALCULATE?我们什么时候使用 FILTER,什么时候在 CALCULATE 中使用 KEEPFILTERS?
【发布时间】:2021-08-01 19:30:06
【问题描述】:

我创建了两个度量:

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 子句始终适用。但我仍然觉得这令人困惑,我想知道使用这两种结构的最佳实践是什么。任何见解将不胜感激。

【问题讨论】:

标签: powerbi dax


【解决方案1】:

当你在表格上写下一个度量时:

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"
    )
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 2017-06-28
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多