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

DAX FILTER中使用表(Date)与列(Date[Date])的差异解析

DAX公式筛选逻辑解答

背景说明

模型为星型模型,包含Date、Product、Sales表,Date和Product作为维度表筛选Sales表。现有两个DAX公式:

公式1:筛选ALL Date列

CALCULATE (
    SUM ( Movements[Quantity] ),
    FILTER (
        ALL ( 'Date'[Date] ),
        'Date'[Date] < DATE ( 2013, 1, 1)
    )
)

公式2:筛选ALL Date表

CALCULATE (
    SUM ( Movements[Quantity] ),
    FILTER (
        ALL ( 'Date' ),
        'Date'[Date] < DATE ( 2013, 1, 1)
    )
)

以下针对三个问题逐一解答:


问题1:上述公式使用的是筛选后的还是未筛选的Date表?

两个公式均使用未筛选的Date表数据生成筛选条件。ALL函数的作用是清除指定对象(列/表)的现有筛选上下文,不管报表中切片器或维度表本身的筛选是什么,都会重置对应部分的筛选状态,基于全量数据进行FILTER的条件判断。


问题2:Date表是否会被公式生成的筛选上下文完全替换?

分两种情况:

  • 对于公式1(ALL('Date'[Date])):不会完全替换。该公式仅清除Date[Date]列的现有筛选,Date表其他列(如Year、Month等)的原有筛选会保留。最终的筛选上下文是:新生成的Date[Date]<2013-01-01列筛选,加上Date表其他列的原有筛选。
  • 对于公式2(ALL('Date')):会完全替换。该公式清除了整个Date表的所有现有筛选,FILTER生成的Date[Date]<2013-01-01表级筛选会覆盖Date表的全部筛选上下文,原有Date表的任何筛选都不再生效。

问题3:在FILTER中使用表与列的区别是什么(即Date vs Date[Date])?

核心区别在于筛选清除的范围和最终生成的筛选类型:

  • 使用ALL('Date'):
    • 清除整个Date表的所有筛选上下文,FILTER遍历Date表的全量行(无任何筛选限制)。
    • 最终生成表级筛选,直接覆盖Date表的所有筛选逻辑,原有Date表的筛选全部失效。
  • 使用ALL('Date'[Date]):
    • 仅清除Date[Date]列的筛选上下文,FILTER仅针对该列的全量唯一值进行筛选。
    • 最终生成列级筛选,Date表其他列的原有筛选仍然有效,会和新的列筛选共同作用于模型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 23:35:05