Power BI中基于ID与Date2动态计算Result列的DAX方案求助
解决方案:DAX实现分组累积计算
计算列方案(适合静态数据)
如果需要在表格中直接添加Result列,使用计算列是最直接的方式。假设同一个ID对应的Value值一致(符合你描述的重复ID和Value的场景),DAX代码如下:
Result = VAR CurrentID = [ID] VAR CurrentDate2 = [Date2] -- 获取当前ID对应的初始Value(因ID重复,取MAX/ MIN/ FIRSTNONBLANK均可) VAR InitialValue = CALCULATE(MAX([Value]), FILTER('Table', 'Table'[ID] = CurrentID)) -- 计算当前ID下,Date2小于等于当前行的所有Value2之和 VAR CumulativeValue2 = CALCULATE(SUM([Value2]), FILTER('Table', 'Table'[ID] = CurrentID && 'Table'[Date2] <= CurrentDate2)) RETURN InitialValue + CumulativeValue2
逻辑说明
- 第一条行:
CumulativeValue2就是当前行的Value2,结果为Value + Value2,符合要求。 - 后续行:
CumulativeValue2是该ID下从第一条到当前行的所有Value2之和,加上初始Value后,等价于上一条Result加上当前Value2。
度量值方案(适合动态交互场景)
如果需要在可视化中动态计算(比如切片器筛选后实时更新),可以使用度量值:
Result Measure = VAR CurrentID = SELECTEDVALUE('Table'[ID]) -- 按ID分组后,获取该ID下所有Date2和对应的Value2 VAR SortedDate2 = SUMMARIZE('Table', 'Table'[Date2], "RowValue2", 'Table'[Value2]) -- 为每个Date2行添加累积Value2的计算 VAR CumulativeTable = ADDCOLUMNS( SortedDate2, "CumulativeSum", CALCULATE( SUM('Table'[Value2]), FILTER(SortedDate2, 'Table'[Date2] <= EARLIER('Table'[Date2])) ) ) -- 获取当前ID的初始Value VAR InitialValue = CALCULATE(MAX('Table'[Value]), 'Table'[ID] = CurrentID) -- 迭代计算每行的Result并求和(适配可视化中的分组展示) RETURN SUMX(CumulativeTable, InitialValue + [CumulativeSum])
注意事项
- 如果同一个ID下存在重复的
Date2,需要添加额外的排序字段(比如在Power Query中添加索引列),确保每行顺序唯一,避免累积计算出现偏差。 - 计算列在数据加载时生成,适合数据更新频率低的场景;度量值随筛选上下文动态计算,适合需要交互分析的场景。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

