PowerBI中按客户ID维度标记有效调研存在情况的DAX实现方案
Power BI 不符合调研要求客户标记实现方案
前置确认
客户事实表与调研表(Survey Table)已通过Customer ID建立1对多关系,客户表为1端,调研表为多端。
方案1:DAX度量值实现(推荐,原生兼容切片器筛选)
该方案无需修改原始表结构,支持动态上下文计算,适配所有切片器筛选操作。
度量值代码
不合规客户标记 = VAR 入职天数 = DATEDIFF(MAX('客户表'[Start Date]), TODAY(), DAY) VAR 有效调研数量 = CALCULATE(COUNT('调研表'[Survey]), '调研表'[Survey] IN {"Survey 1","Survey 2","Survey 3"}) VAR 总调研数量 = CALCULATE(COUNT('调研表'[Survey])) RETURN IF( // 条件1:入职超30天且无任何调研记录 (入职天数 > 30 && ISBLANK(总调研数量)) // 条件2:有调研记录但无符合要求的有效调研 || (NOT(ISBLANK(总调研数量)) && 有效调研数量 = 0), "不合规", "合规" )
使用方法
- 表格可视化直接拉取客户表
Customer ID、Start Date字段,再加入上述不合规客户标记度量值 - 如需仅展示不合规客户,对该度量值添加筛选器,筛选值为「不合规」即可
- 支持任意维度切片器筛选(如入职时间段、客户ID区间等),度量值会自动根据筛选上下文计算结果
灵活优化提示
如果需要经常调整有效调研范围,可单独建立一张「有效调研列表」维度表存储Survey 1/2/3等有效值,将度量值中IN后的枚举列表改为引用该表的列即可,后续调整范围无需修改DAX代码。
方案2:PowerQuery自定义列实现(适合固定规则场景)
该方案将标记逻辑固化到数据模型中,适合规则不频繁变动的场景,也支持切片器筛选。
操作步骤
- 打开PowerQuery编辑器,选中客户表,执行「合并查询」操作,和调研表按
Customer ID做左外合并(保留客户表所有行,匹配调研表对应行) - 展开合并后的调研表列,仅保留
Survey字段,无匹配的行该字段默认显示为null - 按
Customer ID分组,分组配置:- 新列名:
所有调研类型 - 操作:提取去重值列表
- 新列名:
- 新增自定义列,输入公式:
#"新增不合规标记列" = Table.AddColumn(#"分组后的表", "不合规标记", each let 入职天数 = Duration.Days(DateTime.LocalNow() - [Start Date]), 有调研记录 = not List.IsEmpty(List.RemoveNulls([所有调研类型])), 有有效调研 = List.ContainsAny([所有调研类型], {"Survey 1","Survey 2","Survey 3"}) in if (入职天数 >30 and not 有调研记录) or (有调研记录 and not 有有效调研) then "不合规" else "合规" )
- 关闭并上载数据,直接把自定义列拉取到表格可视化即可使用。
效果验证
对照示例数据,输出结果符合预期:
- Customer 78、Customer 91:入职超30天无调研,标记为不合规
- Customer 56:有调研但不属于指定范围,标记为不合规
- 如你示例中的Survey A/B/C/D属于指定有效范围,可直接调整规则中的枚举列表即可适配。
内容的提问来源于stack exchange,提问作者samdep
相关产品推荐
相关产品推荐

