Power BI:折线簇状柱形图忽略表格单元选择的实现难题
Power BI 动态图表需求问题
需求说明
在表格(Visual 3)中选择特定单元时,折线簇状柱形图(Visual 2)需实现以下效果:
- 柱形部分:仅显示所选单元的租金随时间变化数据
- 折线部分:始终保持显示城市整体租金变化(原Visual 4的折线效果)
最终目标是移除Visual 4,将两种效果整合到Visual 2中。
已尝试使用ALL、ALLEXCEPT、REMOVEFILTERS函数,但均未达到预期效果,以下是当前创建的度量值:
现有度量值
柱形度量值:Rent change in
Rent change in = var one_year_filter = FILTER('TABLE', DATEDIFF('TABLE'[Contr.strt],TODAY(),MONTH) >=0 && DATEDIFF('TABLE'[Contr.strt],TODAY(),MONTH) <= 12) var two_year_filter = FILTER('TABLE', DATEDIFF('TABLE'[Contr.strt],TODAY(),MONTH) >=0 && DATEDIFF('TABLE'[Contr.strt],TODAY(),MONTH) <= 24) return IF(ISBLANK(SWITCH(SELECTEDVALUE('Expiring Month'[Value]), "Last 12 Months",CALCULATE(SUM('TABLE'[Rent Change in]), one_year_filter), "Last 24 Months",CALCULATE(SUM('TABLE'[Rent Change in]), two_year_filter), CALCULATE(SUM('TABLE'[Rent Change in])) )), blank(), SWITCH(SELECTEDVALUE('Expiring Month'[Value]), "Last 12 Months",CALCULATE(SUM('Table'[Rent Change in]), one_year_filter), "Last 24 Months",CALCULATE(SUM('Table'[Rent Change in]), two_year_filter), CALCULATE(SUM('Table'[Rent Change in])) ))
折线度量值:Rent Change in by City
Rent Change in by City = var one_year_filter = FILTER('TABLE', DATEDIFF('TABLE'[Contr.strt],TODAY(),MONTH) >=0 && DATEDIFF('TABLE'[Contr.strt],TODAY(),MONTH) <= 12) var two_year_filter = FILTER('TABLE', DATEDIFF('TABLE'[Contr.strt],TODAY(),MONTH) >=0 && DATEDIFF('TABLE'[Contr.strt],TODAY(),MONTH) <= 24) return IF(ISBLANK(SWITCH(SELECTEDVALUE('Expiring Month'[Value]), "Last 12 Months",CALCULATE(AVERAGE('TABLE'[Rent Change in]), ALLEXCEPT(DIM,DIM[City]), REMOVEFILTERS('TABLE'[Unit]), one_year_filter), "Last 24 Months",CALCULATE(AVERAGE('TABLE'[Rent Change in]), ALLEXCEPT(DIM,DIM[City]), REMOVEFILTERS('TABLE'[Unit]), two_year_filter), CALCULATE(AVERAGE('TABLE'[Rent Change in]), ALLEXCEPT(DIM,DIM[City]),REMOVEFILTERS('TABLE'[Unit])) )), blank(), SWITCH(SELECTEDVALUE('Expiring Month'[Value]), "Last 12 Months",CALCULATE(AVERAGE('TABLE'[Rent Change in]), ALLEXCEPT(DIM,DIM[City]), REMOVEFILTERS('TABLE'[Unit]), one_year_filter), "Last 24 Months",CALCULATE(AVERAGE('TABLE'[Rent Change in]), ALLEXCEPT(DIM,DIM[City]), REMOVEFILTERS('TABLE'[Unit]), two_year_filter), CALCULATE(AVERAGE('TABLE'[Change in]), ALLEXCEPT(DIM,DIM[City]),REMOVEFILTERS('TABLE'[Unit])) ) )
问题排查与修正建议
- 上下文筛选冲突:现有折线度量值中,
ALLEXCEPT(DIM,DIM[City])可能未完全清除单元筛选,若DIM表与TABLE表的关联包含单元字段,需确保只保留城市维度的筛选。 - 筛选器应用顺序:建议将时间筛选逻辑直接整合到
CALCULATE的筛选参数中,避免单独定义变量后嵌套导致的筛选上下文覆盖。 - 简化度量值逻辑:重复的
SWITCH逻辑可合并,减少冗余,同时检查'TABLE'[Change in]是否为笔误(应与前面的Rent Change in字段保持一致)。
修正后的折线度量值示例:
Rent Change in by City = VAR SelectedPeriod = SELECTEDVALUE('Expiring Month'[Value]) VAR Result = SWITCH( SelectedPeriod, "Last 12 Months", CALCULATE( AVERAGE('TABLE'[Rent Change in]), REMOVEFILTERS('TABLE'[Unit]), ALLEXCEPT('DIM', 'DIM'[City]), DATEDIFF('TABLE'[Contr.strt], TODAY(), MONTH) >= 0 && DATEDIFF('TABLE'[Contr.strt], TODAY(), MONTH) <= 12 ), "Last 24 Months", CALCULATE( AVERAGE('TABLE'[Rent Change in]), REMOVEFILTERS('TABLE'[Unit]), ALLEXCEPT('DIM', 'DIM'[City]), DATEDIFF('TABLE'[Contr.strt], TODAY(), MONTH) >= 0 && DATEDIFF('TABLE'[Contr.strt], TODAY(), MONTH) <= 24 ), CALCULATE( AVERAGE('TABLE'[Rent Change in]), REMOVEFILTERS('TABLE'[Unit]), ALLEXCEPT('DIM', 'DIM'[City]) ) ) RETURN IF(ISBLANK(Result), BLANK(), Result)
说明:
- 使用
REMOVEFILTERS('TABLE'[Unit])直接清除单元维度的筛选,确保折线不受单元选择影响 - 将时间条件直接作为
CALCULATE的筛选参数,避免变量嵌套导致的上下文问题 - 合并重复的
SWITCH逻辑,提升代码可读性
内容的提问来源于stack exchange,提问作者kkk
相关产品推荐
相关产品推荐

