BIEE 11g 11.1.1.7.1跨事实指标不使用full outer join问题解决办法

环境升级后,特定报表出现数据缺失问题。原因在于SQL连接方式由全外连接变为左外连接。解决方案包括调整会话变量FOJ_GRAND_TOTAL_LBM值或升级环境。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当我们把环境升级到11.1.1.7.1之后,发现部分报表在特定情况下会出现没有数据的情况,通过检查生成的sql发现,在特定场合原本应该使用

full outer join的却变成了left outer join,导致最终数据的缺失。

 

下面以SampleApp V309为例,描述问题现象,并给出解决办法

 

如下图所示报表

 

1-Revenue来自F0 Sales Base Measures逻辑事实表

9- Full Time Empl  (Beg Period)来自F4 Headcount Base Measures逻辑事实表

Time为公共维度,另外Products只与F0 Sales Base Measures关联,不与F4 Headcount Base Measures关联

上面的报表没有什么问题,能够正确显示,如下图:

 

 

下面我们在对1-Revenue在Products维表上添加过滤

 

结果如下图所示:

 

我们会看到由于非公共维度(Products)的引入,会使得9- Full Time Empl  (Beg Period)显示为空,怎么解决这个问题?

其实可以把9- Full Time Empl  (Beg Period)在Products的聚合级别设置为Total即可

 

 

然后在查看结果

 

可以看到,缺少了2009 Q4的那条记录(虽然2009 Q4的Revenue为空,但是Full Time Empl却是有数的,这个时候也应该显示出来才符合逻辑)

查看SQL可以发现,是由于使用了left out join导致的

 

 

 

通过联系oracle support知道,这是由于7.1的调整造成的,可以通过将会话变量 FOJ_GRAND_TOTAL_LBM的值设置为1来解决,

或者升级到11.1.1.7.140415来解决

 

方法如下:

在rpd中新建FOJ_GRAND_TOTAL_LBM会话变量,并设置默认初始值为1,由于会话变量必须和初始化块绑定,随便新建一个初始化块并将其禁用即可!

 

 然后注销、重新登录,清除相关缓存,重新查看报表,显示正常:

 

 

 

 

 

 

 

另外:如果你想针对单个分析来进行测试,你还可以在分析的高级选项页里下方的前缀里填上

set variable FOJ_GRAND_TOTAL_LBM=1;

如下图所示:

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值