当我们把环境升级到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;
如下图所示: