-
-
yangqh 数据老手Lv5
发表于2019-9-30 11:34
楼主
维过滤和维补足,是报表模板设计中非常常见的设置了,不过两者执行的先后不同,可能会导致最终的计算结果不同。这里举一个简单的栗子~
比如维表中有A~H 一共8个节点,主题表中只有A~E 5条数据,设置过滤条件过滤出ABCH四条数据,
如果是先进行维补足再做维过滤时,计算结果应当为ABCH四条数据(其中H数据值为空);
如果是先进行维过滤再做维补足时,计算结果应当为A~H八条数据(其中D~H数据值为空)。
那么在BI中做表时,分别如何达到这两种计算结果的效果呢?
实现先补足再过滤:
其实当同时设置过滤条件和维补足时,默认的计算规则就是先补足再过滤,所以只需要按照常规的做表方式来做即可,操作如下
1、主题表设置维表绑定
2、报表中浮动维表元上设置维补足和过滤条件,计算效果如下:
对应计算sql结构如下:
复制代码
实现先过滤再补足:
1、用维表对应的数据库表再创建一个主题表,并设置主题表关联
2、表格中使用基于维表数据库表创建的主题表字段做浮动,并设置维补足和过滤条件
计算结果如下:
此时对应计算sql结构如下:
复制代码会发现这段sql其实返回的结果集中并没有D~H这几行空数据,那计算结果中的这些空数据行是从哪来的呢?
其实这些数据,是通过内存处理自动做的补足,BI还是很聪明的吧~
比如维表中有A~H 一共8个节点,主题表中只有A~E 5条数据,设置过滤条件过滤出ABCH四条数据,


如果是先进行维补足再做维过滤时,计算结果应当为ABCH四条数据(其中H数据值为空);
如果是先进行维过滤再做维补足时,计算结果应当为A~H八条数据(其中D~H数据值为空)。
那么在BI中做表时,分别如何达到这两种计算结果的效果呢?
实现先补足再过滤:
其实当同时设置过滤条件和维补足时,默认的计算规则就是先补足再过滤,所以只需要按照常规的做表方式来做即可,操作如下
1、主题表设置维表绑定

2、报表中浮动维表元上设置维补足和过滤条件,计算效果如下:

对应计算sql结构如下:
- <font face="微软雅黑">select sum(a.ZB) as B2,a.WD as A2,max(b.ID) as mc_A20
- from FACT_BZCS a
- ,DIM_WD b
- where (A.WD=B.ID(+)) and ((a.WD IN ('A','B','C','F')))
- group by a.WD</font>
实现先过滤再补足:
1、用维表对应的数据库表再创建一个主题表,并设置主题表关联

2、表格中使用基于维表数据库表创建的主题表字段做浮动,并设置维补足和过滤条件

计算结果如下:

此时对应计算sql结构如下:
- <font face="微软雅黑">select sum(a.ZB) as B2,b.ID as A2
- from FACT_BZCS a
- ,DIM_WD_811 b
- where ((b.ID = a.WD)) and ((a.WD IN ('A','B','C','H')))
- group by b.ID </font>
