如何在SAP BO Universe中避免相同OrderId行的求和重复
解决SAP BO Universe中订单Price重复求和问题
方案1:使用窗口函数创建去重求和度量
在Universe中新建一个度量,定义为:
SUM(CASE WHEN ROW_NUMBER() OVER (PARTITION BY Orders.OrderId ORDER BY Orders.OrderId) = 1 THEN Orders.Price ELSE 0 END)
该公式会为每个OrderId仅保留第一条记录的Price,其余记录的Price按0计算,最终求和时不会重复统计同一订单的金额。
方案2:创建订单唯一派生表
- 在Universe中新建派生表,SQL语句为:
SELECT DISTINCT OrderId, Price FROM Orders
- 将这个派生表与子订单表通过
OrderId建立一对多关联。 - 基于该派生表创建「订单金额」度量,直接使用
SUM(Price)即可。用户查询时调用这个派生表的金额字段,不会因子订单的多条记录导致重复求和。
方案3:使用子查询实现去重求和
创建度量时使用以下SQL:
SUM( (SELECT DISTINCT Price FROM Orders o WHERE o.OrderId = Orders.OrderId) )
子查询会为每个OrderId返回唯一的Price值,外层SUM对这些唯一值求和,从根源避免重复计数。
注意事项
- 方案1和方案3无需修改表结构,直接在度量层解决问题,适合不想调整Universe表关联的场景。
- 方案2通过派生表隔离订单唯一数据,逻辑更直观,用户使用时无需关注去重逻辑,能降低误操作风险。
内容的提问来源于stack exchange,提问作者wo0lien
相关产品推荐
相关产品推荐

