基于切片器选择的动态重叠数据的DAX迭代求平均

编程语言 2026-07-11

我有两个独立的表:

Data表包含列 [Label](文本)、[Year](整数)、[Location](文本)、[Value](整数)。

Label_List表包含列 [Label](文本)。这是在Data表中出现的 [Label] 列的不同取值的列表。

在Data表中,每个 [Label] 可能对应多年的数据以及多个地点的记录。

我从切片器中选中了Label_List[Label] 的一个值。

在可视化中,我想把每个 [Label](一行)与切片器所选的 [Label] 进行比较。我在逐行计算并显示每个 [Label] 行的 [Value] 平均值时遇到了困难,必须仅使用与切片器所选 [Label] 的 [Year] 与 [Location] 的组合相重叠(匹配)的 [Value] 值子集。这就是可视化示例表中的“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表

Label Year Location Value
A 2022 LocationA 100
A 2023 LocationA 103
A 2024 LocationA 105
A 2024 LocationB 95
A 2025 LocationA 110
B 2021 LocationB 90
B 2023 LocationB 91
B 2024 LocationA 92
B 2025 LocationA 94
B 2025 LocationB 93
C 2021 LocationA 87
C 2023 LocationB 89
C 2024 LocationA 85
D 2021 LocationA 100
D 2022 LocationA 100
D 2023 LocationA 104
E 2023 LocationB 110
E 2024 LocationB 112
E 2025 LocationB 109
F 2021 LocationA 99
F 2022 LocationA 98
F 2022 LocationB 95
F 2023 LocationA 97
F 2024 LocationB 98

表格可视化:示例中在切片器中选择了标签A。所有值都与标签A 进行比较。

Label Label Average Label Average Overlap Selected Label Average Selected Label Average Overlap
A 102.6 102.6 102.6 102.6
B 92 93 102.6 107.5
C 87 85 102.6 105
D 101.33 102 102.6 101.5
E 110.33 112 102.6 95
F 97.4 97.67 102.6 99.33

解决方案

Label Average Overlap = 

VAR SlicerLabel =
    SELECTEDVALUE (Label_List[Label])

VAR CurrentLabel =
    SELECTEDVALUE (Data[Label])

VAR SlicerPairs =
    CALCULATETABLE (
        SUMMARIZE (Data, Data[Year], Data[Location]),
        Data[Label] = SlicerLabel
    )

VAR RowLabelPairs =
    CALCULATETABLE (
        SUMMARIZE (Data, Data[Year], Data[Location]),
        Data[Label] = CurrentLabel
    )

VAR OverlapPairs =
    INTERSECT (SlicerPairs, RowLabelPairs)

RETURN
    IF(
        ISEMPTY(OverlapPairs),
        BLANK(),
        CALCULATE (
            AVERAGE (Data[Value]),
            KEEPFILTERS (OverlapPairs),
            Data[Label] = CurrentLabel
        )
    )
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章