乐于分享
好东西不私藏

AI写的同比环比该不该物化?别让“优雅代码”毁了报表

AI写的同比环比该不该物化?别让“优雅代码”毁了报表

今天我们来讲,同比和环比

很多同学想当然地把同比环比也物化成了列,结果报表是快了,但业务一改口径,整个模型直接崩盘。核心结论:同比环比不要直接物化,要“拆”着物化。

PART 01
痛点复盘:为什么同比环比是“隐形炸弹”

场景:

你让AI:“写一个DAX,计算销售额的同比和环比增长率。”AI交出教科书级别的代码,用了SAMEPERIODLASTYEARDATEADD和复杂的DIVIDE函数。

逻辑没错,但一旦数据量上百万,或者业务加上了复杂的筛选切片器,报表就开始卡顿。那你只能返工重刷全表,因为你把同比结果写死在了数据里。

核心矛盾

同比环比是半累加度量。分母和分子会随筛选上下文动态变化。AI只管算出当下的结果,不管这个结果在未来是否还能复用。

PART 02
核心概念:半累加度量与物化边界

物化误区

直接新建一列,把“本月销售额 / 上月销售额 - 1”算好存起来。这是最危险的做法,因为一旦时间筛选变化,这列数据就废了。

正确思路

基础值物化,比率DAX算。把不怎么变的基础值(如销售额、订单量)在Power Query里算好;把随时会变的比率(如同比、环比)留在DAX里轻量计算。

技术逻辑

Power Query负责提供标准化的原材料(本月数、上月数、去年同期数);DAX负责根据当前的筛选器,把这些原材料临时组装成比率。

PART 03

实操:基础值物化 + DAX轻算

第一步:在PQ中物化基础值(关键步骤)

不要算增长率,只算绝对数

在Power Query中,为每一行数据增加以下辅助列:

1. 本月销售额:当前行的销售额。

2. 上月销售额:通过偏移函数(如Index配合Merge)取上一月的销售额。

3. 去年同期销售额:通过日期表关联,取去年同期的销售额。

注意:这些基础值一旦写入,除非数据源头变了,否则刷新时无需重复计算逻辑,性能极高。

第二步:在DAX中计算比率

回到Power Query,新建两个简单的度量值:

效果对比

旧做法:AI写复杂DAX,实时算同比环比 = 全表扫描 + 复杂除法 = 慢

新做法:PQ算基础值,DAX做简单除法 = 读取结果 + 简单运算 = 快。

PART 04
避坑指南:什么时候千万别物化

动态日期范围

如果业务需要随意切换“近7天”“近30天”的环比,不要物化。物化只适用于固定的日历周期(年、季、月)。

实时数据场景

如果数据每5分钟更新一次,物化会导致刷新极慢,且基础值频繁变动,失去物化意义。

口径频繁调整

如果业务每个月都在改“同比”的计算规则(例如是否剔除退货),绝对不要物化比率,否则每次改口径都要全表重刷。

AI是代码生成器。AI只知道把“本月”除以“上月”,但它不知道业务下个月会不会改规则。你懂架构,所以你知道:把不变的基础值存起来,把万变的规则留在DAX里。

记住:

物化是牺牲灵活性换取性能。如果你的业务灵活性要求高于性能要求,那就别物化。基础值物化,比率DAX算。