如何在Power BI中创建随切片器选择动态变化的度量值?——迭代路径关联环形图表的动态数据展示需求
实现Power BI动态迭代环形图的解决方案
嘿,我来帮你搞定这个Power BI的动态度量值需求!要让四个环形图随切片器选中的迭代自动切换对应的数据,核心是通过DAX度量值动态定位到目标迭代,具体步骤如下:
前提准备
首先确保你的数据模型满足两个条件:
- 有单独的迭代表(比如命名为
Iterations),包含迭代的唯一标识、名称/路径、排序依据(比如迭代顺序号Iteration Order,或者开始/结束日期Start Date) - 迭代表和用户故事表(比如
User Stories)通过关联字段(如Iteration ID)建立了正确的关系
方案1:基于迭代顺序号实现(推荐,逻辑更简洁)
如果你的迭代表有现成的顺序号列(比如按迭代时间先后分配1、2、3...的数字),可以用以下步骤创建度量值:
1. 获取当前选中迭代的顺序号
先创建一个基础度量值,用来捕获切片器选中的迭代顺序:
Selected Iteration Order = SELECTEDVALUE(Iterations[Iteration Order])
2. 创建四个目标度量值
分别对应四个环形图的数据源:
- 倒数第二次迭代用户故事数
Previous Previous Iteration Stories = VAR Result = CALCULATE( COUNT(User Stories[Story ID]), -- 替换成你实际的用户故事计数逻辑 Iterations[Iteration Order] = [Selected Iteration Order] - 2, ALL(Iterations) -- 忽略切片器对迭代表的筛选,才能获取其他迭代的数据 ) RETURN IF(ISBLANK(Result), 0, Result)
- 上一次迭代用户故事数
Previous Iteration Stories = VAR Result = CALCULATE( COUNT(User Stories[Story ID]), Iterations[Iteration Order] = [Selected Iteration Order] - 1, ALL(Iterations) ) RETURN IF(ISBLANK(Result), 0, Result)
- 当前选中迭代用户故事数
Current Iteration Stories = CALCULATE( COUNT(User Stories[Story ID]), Iterations[Iteration Order] = [Selected Iteration Order] )
- 下一次迭代用户故事数
Next Iteration Stories = VAR Result = CALCULATE( COUNT(User Stories[Story ID]), Iterations[Iteration Order] = [Selected Iteration Order] + 1, ALL(Iterations) ) RETURN IF(ISBLANK(Result), 0, Result)
方案2:基于迭代日期实现(无顺序号时使用)
如果没有现成的迭代顺序号,可以用迭代的开始/结束日期来定位目标迭代:
1. 获取当前选中迭代的开始日期
Selected Iteration Start Date = SELECTEDVALUE(Iterations[Start Date])
2. 创建四个目标度量值
- 倒数第二次迭代用户故事数
Previous Previous Iteration Stories = VAR SelectedStart = [Selected Iteration Start Date] -- 先找到上一次迭代的开始日期 VAR PreviousIterStart = MAXX( FILTER(ALL(Iterations), Iterations[Start Date] < SelectedStart), Iterations[Start Date] ) -- 再找到倒数第二次迭代的开始日期 VAR PrevPrevIterStart = MAXX( FILTER(ALL(Iterations), Iterations[Start Date] < PreviousIterStart), Iterations[Start Date] ) VAR Result = CALCULATE( COUNT(User Stories[Story ID]), Iterations[Start Date] = PrevPrevIterStart ) RETURN IF(ISBLANK(Result), 0, Result)
- 上一次迭代用户故事数
Previous Iteration Stories = VAR SelectedStart = [Selected Iteration Start Date] VAR PreviousIterStart = MAXX( FILTER(ALL(Iterations), Iterations[Start Date] < SelectedStart), Iterations[Start Date] ) VAR Result = CALCULATE( COUNT(User Stories[Story ID]), Iterations[Start Date] = PreviousIterStart ) RETURN IF(ISBLANK(Result), 0, Result)
- 当前选中迭代用户故事数
Current Iteration Stories = CALCULATE( COUNT(User Stories[Story ID]), Iterations[Start Date] = [Selected Iteration Start Date] )
- 下一次迭代用户故事数
Next Iteration Stories = VAR SelectedStart = [Selected Iteration Start Date] VAR NextIterStart = MINX( FILTER(ALL(Iterations), Iterations[Start Date] > SelectedStart), Iterations[Start Date] ) VAR Result = CALCULATE( COUNT(User Stories[Story ID]), Iterations[Start Date] = NextIterStart ) RETURN IF(ISBLANK(Result), 0, Result)
收尾配置
- 把四个度量值分别拖入对应的环形图中
- 用迭代表的
Iteration Path字段创建切片器 - (可选)如果切片器需要支持多选,可以调整基础度量值逻辑,比如取选中迭代中最新的那个:
Selected Iteration Order = MAXX(VALUES(Iterations[Iteration Order]), Iterations[Iteration Order])
注意事项
- 确保迭代表的排序依据(顺序号/日期)是正确的,否则会导致目标迭代定位错误
- 如果用户故事计数需要区分状态(比如完成/待办),可以在
CALCULATE里添加额外筛选条件
内容的提问来源于stack exchange,提问作者Abdelrahman Youssef
相关产品推荐
相关产品推荐

