如何修改OBIEE/OAC中跨不同事实表查询的全外连接条件?
在OBIEE/OAC中修改多事实表全外连接条件的方法
在OBIEE/OAC环境中,当报表关联不同事实表时,会话日志里可能出现仅基于单个字段(如Ky1)做全外连接的SQL。要将连接条件修改为同时匹配Ky1和Ky2,核心是调整语义层(RPD)中的表关系定义,具体操作如下:
操作步骤
- 打开对应工具:OBIEE使用Oracle BI Administration Tool,OAC则进入Web端的语义层编辑界面
- 定位目标业务模型:找到包含FACT1和FACT2的业务模型(Business Model)
- 修改表连接关系:
- 若FACT1和FACT2为直接连接:编辑现有连接的条件,在原
Ky1 = Ky1基础上,添加AND FACT1.Ky2 = FACT2.Ky2的匹配规则 - 若通过维度表间接关联:确认中间维度表同时包含Ky1和Ky2字段,调整事实表与维度表的连接条件,确保两个事实表通过维度表关联时,自动传递Ky1和Ky2的双重匹配逻辑
- 若FACT1和FACT2为直接连接:编辑现有连接的条件,在原
- 发布并生效:保存语义层修改后,OBIEE需重新发布RPD,OAC提交语义层更改;随后清除系统缓存,重新运行报表
- 验证结果:查看会话日志,确认生成的SQL中全外连接条件已更新为同时匹配Ky1和Ky2
关键说明
OBIEE/OAC的查询生成逻辑完全由语义层定义的表关系决定,报表层面无法直接修改底层连接条件,必须通过调整语义层配置实现需求
原查询示例(仅Ky1连接):
SAWITH1 AS (select F1.D1, F1.D2, F1.Ky1, F1.Ky2 from FACT1 F1), SAWITH2 AS (select F2.D1, F2.D2, F2.Ky1, F2.Ky2 from FACT2 F2), SAWITH3 AS (select T1.D1,T2.D2 FROM SAWITH1 T1 full outer join SAWITH2 T2 ON T1.Ky1=T2.Ky1)
修改后目标查询(Ky1+Ky2连接):
SAWITH3 AS (select T1.D1,T2.D2 FROM SAWITH1 T1 full outer join SAWITH2 T2 ON T1.Ky1=T2.Ky1 and T1.Ky2=T2.Ky2)
内容的提问来源于stack exchange,提问作者Junaid Ahmad
相关产品推荐
相关产品推荐

