You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KEEPFILTERS与REMOVEFILTERS的适用场景及示例问询

KEEPFILTERS 与 REMOVEFILTERS 的适用场景及示例

一、REMOVEFILTERS:清除筛选上下文,获取全局/不受限指标

适用场景

  • 明确清除指定列或表的所有筛选上下文,替代ALL/ALLSELECTED的筛选清除用法,语义更直观
  • 计算占比、同比/环比时,作为不受当前筛选影响的基准值(比如总销售额、上期全量数据)

示例

  1. 计算分类销售额占总销售额的比例
    总销售额需要不受当前分类筛选的影响,用REMOVEFILTERS明确清除Category列的筛选:

    销售额占比 = 
    DIVIDE(
        SUM(Sales[Amt]),
        CALCULATE(SUM(Sales[Amt]), REMOVEFILTERS(Sales[Category]))
    )
    

    对比传统ALL(Sales[Category])写法,REMOVEFILTERS直接表达“移除该列筛选”的意图,可读性更强。

  2. 清除整个表的筛选,获取全局总销售额

    全局总销售额 = CALCULATE(SUM(Sales[Amt]), REMOVEFILTERS(Sales))
    

    效果与CALCULATE(SUM(Sales[Amt]), ALL(Sales))完全一致,但语义更清晰,避免ALL函数的多用途混淆(ALL既可以清除筛选,也可以返回全量表)。

二、KEEPFILTERS:保留原有筛选,实现交集式叠加筛选

适用场景

  • 避免CALCULATE默认的“同列筛选替换”行为,保留原有筛选上下文的同时,叠加新的筛选条件
  • 替代FILTER(VALUES(列), 条件)的写法,实现对当前筛选范围内数据的二次筛选

示例

  1. 在已有筛选基础上,叠加数值范围筛选
    假设当前报表已筛选Category = "电子",现在要计算该分类下Amt > 1000的销售额:

    电子类大额销售额 = 
    CALCULATE(
        SUM(Sales[Amt]),
        KEEPFILTERS(Sales[Amt] > 1000)
    )
    

    如果省略KEEPFILTERS,CALCULATE会先清除Amt列的潜在筛选(若有)再应用新条件;而KEEPFILTERS会保留原有Category的筛选,仅在该范围内取Amt > 1000的行,实现两个筛选的交集。

  2. 简化FILTER(VALUES(...))的写法
    对应你提到的保留筛选上下文的场景,FILTER(VALUES(Sales[Amt]), Sales[Amt] > 1000)可以用KEEPFILTERS简化:

    筛选后销售额 = 
    CALCULATE(
        SUM(Sales[Amt]),
        KEEPFILTERS(Sales[Amt] > 1000)
    )
    

    两者效果完全一致,但KEEPFILTERS写法更简洁直观。

  3. 多条件同列筛选的叠加
    若原有筛选上下文是Amt BETWEEN 500 AND 2000,现在要追加Amt > 1000的筛选:

    叠加筛选后销售额 = 
    CALCULATE(
        SUM(Sales[Amt]),
        KEEPFILTERS(Sales[Amt] > 1000)
    )
    

    最终筛选范围会是1000 < Amt <= 2000;若不用KEEPFILTERS,则会直接替换为Amt > 1000,忽略原有500的下限。

核心区别总结

  • REMOVEFILTERS:主动清除筛选,用于脱离当前上下文计算基准值
  • KEEPFILTERS:保留原有筛选,用于叠加条件实现交集筛选

内容的提问来源于stack exchange,提问作者variable

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 20:33:19