DAX计算:仅当所有category_2成员存在时求平均值
解决方法:按条件显示折线图的平均值
我来帮你搞定这个需求!不管是用DAX度量值还是提前通过Power Query过滤数据,都能实现你要的效果——只展示那些包含全部category_2成员的date+category_1组合的平均值。
方案一:DAX度量值(推荐,灵活适配数据更新)
核心思路是:先算出全局范围内category_2的总唯一成员数,再判断当前date+category_1组合下的category_2成员数是否等于这个总数,相等就返回平均值,否则返回空值(空值会自动在折线图里隐藏)。
直接用这个DAX表达式创建度量值:
Avg Value (Full Category 2) = VAR TotalCat2 = CALCULATE(DISTINCTCOUNT('你的表名'[category_2]), ALL('你的表名')) VAR CurrentGroupCat2 = DISTINCTCOUNT('你的表名'[category_2]) RETURN IF(CurrentGroupCat2 = TotalCat2, AVERAGE('你的表名'[value]), BLANK())
使用步骤:
- 把
date拖到折线图的X轴 - 把
category_1拖到图例 - 把这个新创建的度量值拖到Y轴
这样折线图就会自动隐藏那些category_2不全的date+category_1组合,完全符合你的要求。
方案二:无需DAX,用Power Query提前过滤数据
如果不想用DAX,也可以在数据加载阶段就把不符合条件的组合过滤掉,后续可视化直接用干净的数据。
操作步骤:
- 打开Power Query编辑器,加载你的原始数据
- 先计算全局的
category_2总成员数:
添加一个自定义步骤,输入:
(把TotalCat2 = List.Count(List.Distinct(#"源"[category_2]))#"源"换成你实际的步骤名,比如你之前重命名过的步骤) - 按
date和category_1分组:
点击「转换」选项卡 → 「分组依据」,设置:- 分组依据:选择
date和category_1 - 新列名:
所有行,操作:所有行(先把组内所有行保留)
- 分组依据:选择
- 添加自定义列,计算每个组的
category_2成员数:
点击「添加列」→ 「自定义列」,输入:
把这个列重命名为List.Count(List.Distinct([所有行][category_2]))Cat2Count - 过滤行:
点击Cat2Count列的筛选器,只保留等于TotalCat2的行 - 展开「所有行」列:
点击列名旁边的展开按钮,选择value和category_2(如果需要的话) - 加载数据回Power BI,然后创建折线图:X轴
date,图例category_1,Y轴用value的平均值即可
两种方案对比
- DAX方案:无需修改原始数据,后续数据更新时自动重新计算,灵活性更高,适合需要经常调整筛选条件的场景
- Power Query方案:提前过滤掉无效数据,模型数据量更小,运行速度更快,适合大数据集的场景
内容的提问来源于stack exchange,提问作者donquijote
相关产品推荐
相关产品推荐

