🤬 场景需求
在制造业财务建模中,计算“累计数”(如累计折旧、实时库存余量、累计回款)是高频动作。 当你使用经典的CALCULATE(SUM(...), FILTER(ALL(Calendar), [Date] <= MAX([Date]))) 时,一旦事实表突破 100 万行,报表切片器卡顿感明显,甚至导致“视觉对象内存超限”。
💡 知识点破局
放弃 FILTER 嵌套,拥抱索引加速。 在 DAX 引擎中,复杂的 FILTER 迭代是性能杀手。通过在 Power Query 中预生成一个“累计辅助索引”(影子表逻辑),或使用 DAX 窗口函数WINDOW 能够大幅降低引擎扫描成本。
推荐方案:WINDOW 函数直接取数
累计库存 (高效版) = SUMX( WINDOW( 1, ABS, 0, REL, ORDERBY('日期表'[Date], ASC) ), [当日库存变动] )
核心优势:
WINDOW函数直接在公式引擎层面对数据块进行切片,无需像FILTER那样逐行扫描每一行日期,性能提升通常在 50%-80% 以上。
⚠️ 避坑提醒
1. 排序一致性:WINDOW 函数中的 ORDERBY 必须与日期表字段完全一致,否则累计逻辑会错乱。 2. 粒度陷阱: 如果你的累计涉及多个维度(如按 SKU + 仓库累计),务必在 WINDOW 的 PARTITIONBY 中声明分区维度,否则会造成内存溢出。 3. 计算列 vs 度量值: 百万级数据建议直接在后端 SQL 或 Power Query 中预先处理静态累计,前端仅保留动态切片的度量值。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END











暂无评论内容