本文来研究客户的交易年龄。与自然年龄不同,交易年龄指的是客户在发生交易时的年龄,这在多年分析中的差异就会非常显著。
问题背景
在生意中,往往需要计算交易客户的平均年龄,但随着时间的推移,客户每年的年龄都在长大,因此,在计算中使用用户在交易时的年龄更加贴切,而不是客户的静态年龄。
静态平均年龄计算
如果客户的年龄已经由最新的年龄所标记了,这个年龄由 TODAY
和 BIRTHDAY
的 YEAR
共同决定。那么,其平均年龄的计算可以是:
Customer.AverageAge.Dim =
CALCULATE(
AVERAGEX(
SUMMARIZE( Customer , Customer[Age] ) , [Age]
)
,
TREATAS( VALUES( 'Order'[CustomerID] ) , Customer[CustomerID] )
)
该算法从客户表
中获取已经计算得到的年龄。
动态平均年龄计算
如果考虑多年数据,那么在购买的时候用最新的用户年龄就不够合理,就需要考虑动态年龄,使用订单数据计算如下:
代码语言:javascript复制Customer.AverageAge.Fact =
CALCULATE(
AVERAGEX(
SUMMARIZE( Customer , Customer[BirthYear] ) , YEAR( MAX( 'Calendar'[Date] ) ) - [BirthYear]
)
,
TREATAS( VALUES( 'Order'[CustomerID] ) , Customer[CustomerID] )
)
这里通过交易时的客户找回客户表,但用交易所在的日期年份来计算年龄后再做平均,这样就更加合理。
技巧:钩子
这里使用了一个通用的 DAX 技巧:钩子。
我们称 TREATAS( VALUES( 'Order'[CustomerID] ) , Customer[CustomerID] )
是一个钩子,它将不相关的两列挂载起来,进而可以实现计算。
效果
如果观察用不同方法得到的结果,可以看出:
在 2019 年,由于购买时的客户更加年轻,因此平均年龄与 2020 年有所不同,也更加真实的反应了业务。
总结
在研究与客户有关的问题时,往往需要在 客户表
和 订单表
之间联动,这就涉及到不少 DAX 技巧,大家可以自行演练实验。
DAX 设计模式(第二版)中文在线学习正式开放
PowerBI 免费技术讲座系列 - BI佐罗专场
财务报告三大表统一及高级分析通用模板 - 数据结构篇
Zebra BI 4.5 发布 - 支持自定义计算
全网首发 PowerBI 全动态中国式复杂矩阵完美增强版 4.0 版
全网首发 PowerBI DAX 支持面向切面超级设计模式共迎 2021
《PowerBI 高级》 - 视频课首发,成为专家必备
在订阅了BI佐罗讲授的《BI真经》之《BI进行时》课程区,除了可以下载本文案例,还可以观看视频讲解。