
做 SAP Analytical Query 时,有一种问题非常容易让人产生错觉。明细行全部正确。每一条航班的客座率正确,每一条航班是否属于低客座率航班的判断也正确。可是一旦显示 Airline、Connection,甚至整个查询的 Total,总计数字突然不对了。SQL 没写错,CDS Association 没问题,Cube 里的基础数据也没有重复,公式单独看也完全合理。问题往往出在一个更隐蔽的位置,公式到底应该在哪一个粒度上被计算。这正是 Formula Exception Aggregation 解决的问题。SAP Analytical Engine 默认会按照查询当前需要的结果粒度进行聚合。如果一个公式依赖多个基础 Measure,而业务规则要求它必须先在航班、日期、客户、物料或者其他细粒度上计算,再把公式结果向上汇总,那么普通的@Aggregation.default: #FORMULA很可能不够。此时,我们需要显式告诉 Analytical Engine,公式必须保留哪些 Reference Dimension 进行计算。SAP 将这种机制称为 Exception Aggregation。它并不是简单地把SUM改成AVG,也不是给某个 Measure 换一个聚合函数。它真正控制的是公式计算发生时的数据粒度,以及公式结果从这个粒度向最终 Query Result 粒度收敛时采用什么规则。SAP 官方文档对执行逻辑的描述非常明确,Analytical Engine 会先完成 Standard A