如何在Power BI中用DAX计算环比新增客户及季度实现方案
解决方案:Power BI中按月/季度获取新增客户
一、按月维度获取新增客户DAX实现
前提准备
建议先建立日期表并关联orders表的Date_Created列,时间维度筛选会更稳定。若暂时没有日期表,也可直接基于orders表的日期字段处理。
方式1:创建计算表返回新增客户列表
通过计算表直接输出选中月份的新增客户(即当月有记录、上月无记录的客户):
新增客户_月度 = VAR 选中月份 = MAX('日期表'[年份月份]) -- 日期表需包含格式化的年月字段,如"2022-07" VAR 上月 = EDATE(选中月份, -1) VAR 当前月客户 = VALUES(orders[Customer]) VAR 上月客户 = CALCULATE(VALUES(orders[Customer]), '日期表'[年份月份] = 上月) RETURN EXCEPT(当前月客户, 上月客户)
无日期表时的替代写法:
新增客户_月度 = VAR 选中日期 = MAX(orders[Date_Created]) VAR 当前月起始 = DATE(YEAR(选中日期), MONTH(选中日期), 1) VAR 上月起始 = EDATE(当前月起始, -1) VAR 当前月客户 = CALCULATE(VALUES(orders[Customer]), DATESMTD(orders[Date_Created])) VAR 上月客户 = CALCULATE(VALUES(orders[Customer]), DATESMTD(DATEADD(orders[Date_Created], -1, MONTH))) RETURN EXCEPT(当前月客户, 上月客户)
方式2:用度量值标记新增客户
若需在现有表格中标记每个客户是否为当月新增,可编写以下度量值,后续筛选度量值为1的记录即可:
是否为月度新增客户 = VAR 选中月份 = MAX('日期表'[年份月份]) VAR 客户首次下单日期 = CALCULATE(MIN(orders[Date_Created]), ALLEXCEPT(orders, orders[Customer])) VAR 首次下单月份 = DATE(YEAR(客户首次下单日期), MONTH(客户首次下单日期), 1) RETURN IF(首次下单月份 = 选中月份, 1, 0)
二、按季度维度实现的可行性
完全支持按季度维度实现,逻辑与月度一致,仅需将时间范围替换为季度:
方式1:计算表返回季度新增客户
新增客户_季度 = VAR 选中季度 = MAX('日期表'[年份季度]) -- 日期表需包含格式化的季度字段,如"2022-Q3" VAR 上季度 = DATEADD('日期表'[日期], -1, QUARTER) VAR 当前季度客户 = VALUES(orders[Customer]) VAR 上季度客户 = CALCULATE(VALUES(orders[Customer]), '日期表'[年份季度] = FORMAT(上季度, "YYYY-Qq")) RETURN EXCEPT(当前季度客户, 上季度客户)
方式2:度量值标记季度新增客户
是否为季度新增客户 = VAR 选中季度 = MAX('日期表'[年份季度]) VAR 客户首次下单日期 = CALCULATE(MIN(orders[Date_Created]), ALLEXCEPT(orders, orders[Customer])) VAR 首次下单季度 = FORMAT(客户首次下单日期, "YYYY-Qq") RETURN IF(首次下单季度 = 选中季度, 1, 0)
示例验证
以你提供的6月、7月数据为例:
- 选中2022年7月时,当前月客户集合为{A、C、D、E、F、G、H},上月客户集合为{A、B、C、D、E、F}
- 通过
EXCEPT函数计算后,得到新增客户G、H,符合需求预期。
内容的提问来源于stack exchange,提问作者snailoftheyear
相关产品推荐
相关产品推荐

