环境:BIEE 11.1.1.7....
背景:
随着BI系统的普及,事实表和维表逐渐走入‘攻城狮’的视线。随着业务系统的庞杂,有时候你只展示一个维度的报表好像out得拿不出手了。
那么多维度交叉下的数据,如果要包含某些事实表不存在但存在于维表的维度数据该怎么处理呢?
很多TX自然就想到了‘包含空值’这个分析属性可选框。
那么大家知道勾选了‘包含空值’这个属性后对分析的影响么?
假设维度DIM有列A,其值B\C\D\E,但事实表FACT有指标列H,只存在B\C\D的对应记录。两表内连接。
那么这个时候若展示列A和指标H,不添加过滤条件,列A的值应该只有B\C\D,若勾选了‘包含空值’,则值E也会展示,其对应的指标H为null。
假设,有两个维度和事实表关联呢?三个呢?四个呢?
经实际测试,随着维度增加,性能成几何倍数下降。建议超过两个维度和事实表关联的分析,不要勾选‘包含空值’,如果对性能有苛刻要求,最好单维度再勾选,多维度用其它方法代替实现。
问题来了:假设有和5个维度关联展示的分析,要求其中某1个或者某2个维度没有事实数据的也展示,有什么方法呢?
这个时候用‘包含空值’就是想尝试S字怎么写了。那么有其它方法么?
union结果集?一个正常的显示结果集,用中间分析放正常显示的维度,然后再拼一个上面展示结果集中没有值的维度集?
貌似可行,但痛并快乐着的union结果集,实在让人高兴不起来,还有其它方法么?
还有么?其实绕个弯,也许会柳暗花明。
下面介绍一种利用BIEE自身功能的方法实现。
1、在物理层新建视图,选择从SQL语句(select 1 as A from dual)中创建。建立别名F1,和上述5个维度各自关联,设置连接关系为复杂连接(1=1)
2、将上述物理层的别名表F1拖至逻辑层,针对各自维度建立指标,设置聚合关系为max或min,针对对应维度设置层级为detail,其它为total,假设针对维度A的指标INCLUDE_A,设置聚合关系为max,针对维度A的层级为detail,其它4个维度为total。
3、将建立的5个指标拖至表示层,供前台报表访问展示。
4、在需要展示的报表中新增隐藏列,例如要包含维度A的没有事实表的部分数据,则拖维度A对应的指标INCLUDE_A。
这样,利用BIEE自身的多事实表出指标的功能,自动拼接上了没有数据的那部分维度信息。