基于切片器选择的动态重叠数据的DAX迭代求平均
我有两个独立的表:
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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。