关于维过滤和维补足的先后关系

2912
1

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. <font face="微软雅黑">select sum(a.ZB) as B2,a.WD as A2,max(b.ID) as mc_A20
  2. from FACT_BZCS a
  3. ,DIM_WD b
  4. where (A.WD=B.ID(+)) and ((a.WD IN ('A','B','C','F')))
  5. group by a.WD</font>
复制代码


实现先过滤再补足:
1、用维表对应的数据库表再创建一个主题表,并设置主题表关联

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

计算结果如下:

此时对应计算sql结构如下:
  1. <font face="微软雅黑">select sum(a.ZB) as B2,b.ID as A2
  2. from FACT_BZCS a
  3. ,DIM_WD_811 b
  4. where ((b.ID = a.WD)) and ((a.WD IN ('A','B','C','H')))
  5. group by b.ID </font>
复制代码
会发现这段sql其实返回的结果集中并没有D~H这几行空数据,那计算结果中的这些空数据行是从哪来的呢?
其实这些数据,是通过内存处理自动做的补足,BI还是很聪明的吧~




最近看过此主题的会员

esen_56LOHNRPV0

esen_4YNPQEX87K

naqinga

灰龙

esen_551EV9Y3NG

哇咔咔01

1个回答

只看楼主

辰哥 管理员

发表于2019-12-5 14:46

只看该作者

取消 关注该作者的回复

沙发

学习了!

登录后可回答问题,请登录注册

快速回复 返回顶部 返回列表

小时

全天响应

分钟

快速处理问题

工程师强势助力

明星产品
解决方案
联系合作

400咨询:400-0011-866

技术支持QQ:400-0011-866(工作日9:00-18:00)

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

版权所有© 2006-2024 北京亿信华辰软件有限责任公司 京ICP备07017321号 京公网安备11010802016281号