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

基于切片器选择的动态重叠数据DAX迭代表平均值计算问题

DAX计算重叠年份-地点组合的标签平均值

表结构与需求

  • Data表:包含列[Label](文本)、[Year](整数)、[Location](文本)、[Value](整数),每个Label对应多组年份、地点的数据。
  • Label_List表:包含列[Label](文本,为Data表Label列的唯一值集合)。

需求:通过切片器选择Label_List中的Label后,在可视化表中针对每一行Label,计算仅与选中Label存在「Year+Location」组合重叠的Value子集的平均值,即示例中的「Label Average Overlap」列。

已实现的DAX代码(Selected Label Average Overlap)

Selected Label Average Overlap = 
CALCULATE(
    AVERAGE(Data[Value]),
    Data[Label] = SELECTEDVALUE(Label_List[Label]),
    Data[Year] IN VALUES(Data[Year]) && Data[Location] IN VALUES(Data[Location])
)

当前尝试的错误代码(Label Average Overlap)

Label Average Overlap = 

VAR SlicerLabel = SELECTEDVALUE(Label_List[Label])
VAR DataLabelRow = SELECTEDVALUE(Data[Label]) 

VAR CommonYearsAndLocations =
    CALCULATETABLE(
        VALUES(Data[Year]),
        FILTER(
            Data,
            COUNTROWS(
                FILTER(Data, Data[Year] = EARLIER(Data[Year]) && Data[Location] = EARLIER(Data[Location]) && Data[Label] = DataLabelRow)
            ) > 0 &&
            COUNTROWS(
                FILTER(Data, Data[Year] = EARLIER(Data[Year]) && Data[Location] = EARLIER(Data[Location]) && Data[Parent] = SlicerLabel)
            ) > 0
        )
    )

RETURN
    CALCULATE(
        AVERAGE(Data[Value]),
        Data[Label] = SlicerLabel,
        Data[Year] IN CommonYearsAndLocations,
        Data[Location] IN VALUES(Data[Location]) 
    )

示例数据

Label_List表

Label
A
B
C
D
E
F

Data表

LabelYearLocationValue
A2022LocationA100
A2023LocationA103
A2024LocationA105
A2024LocationB95
A2025LocationA110
B2021LocationB90
B2023LocationB91
B2024LocationA92
B2025LocationA94
B2025LocationB93
C2021LocationA87
C2023LocationB89
C2024LocationA85
D2021LocationA100
D2022LocationA100
D2023LocationA104
E2023LocationB110
E2024LocationB112
E2025LocationB109
F2021LocationA99
F2022LocationA98
F2022LocationB95
F2023LocationA97
F2024LocationB98

预期可视化结果(切片器选中Label A时)

LabelLabel AverageLabel Average OverlapSelected Label AverageSelected Label Average Overlap
A102.6102.6102.6102.6
B9293102.6107.5
C8785102.6105
D101.33102102.6101.5
E110.33112102.695
F97.497.67102.699.33

问题修正与正确DAX代码

当前代码的核心问题:

  1. 仅提取了Year,未保留「Year+Location」的组合逻辑——重叠是两者的组合,不是单独年份。
  2. 误写了Data[Parent],应为Data[Label]。
  3. 最终筛选逻辑错误,未针对当前行Label筛选重叠组合的数据。

正确代码:

Label Average Overlap = 
VAR SlicerLabel = SELECTEDVALUE(Label_List[Label])
VAR CurrentLabel = SELECTEDVALUE(Data[Label])

// 获取选中Label的所有Year+Location组合
VAR SlicerCombos =
    CALCULATETABLE(
        SUMMARIZE(Data, Data[Year], Data[Location]),
        Data[Label] = SlicerLabel
    )

// 计算当前Label与选中Label的重叠Year+Location组合
VAR OverlapCombos =
    INTERSECT(
        SUMMARIZE(Data, Data[Year], Data[Location]),
        SlicerCombos
    )

RETURN
    CALCULATE(
        AVERAGE(Data[Value]),
        TREATAS(OverlapCombos, Data[Year], Data[Location]),
        Data[Label] = CurrentLabel
    )

代码说明

  • SlicerCombos:筛选切片器选中Label对应的所有(年份,地点)组合。
  • OverlapCombos:通过INTERSECT获取当前行Label与选中Label的重叠组合。
  • TREATAS将重叠组合作为筛选条件,计算当前行Label在这些组合下的Value平均值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 10:05:07