【BIEE】04_当维度表中的维不存在事实表中,需要展示所有维度并且数据类展示为0

有时候,我们往往会存在这样的需求

例如:事实表的数据如下

EMP_FACT表示事实表,DIM_LEVEL是维度表

预期效果:(根据员工信息,分析各等级员工工资与员工个数)

我们在BIEE报表中新建报表,然后展示报表,展示结果如下:

图1

那么这个效果跟我们的预期效果可是差别比较大的!我们如何来改变这种差别呢?

首先我们分析上面2个表,我们需要解决2个问题,分别是:

①优秀、良好、一般按照顺序排列

②当事实表不存在【一般】级别数据记录时,展示该维度,并且对应值为0

环境准备

首先在数据库建立事实表与维度表

--新建维度表
  DROP TABLE DIM_LEVEL;
  CREATE TABLE DIM_LEVEL(ELEVEL VARCHAR(2) NOT NULL,
                         LEVEL_DEC VARCHAR(10),
                         DETAIL_DESC VARCHAR(100),
                         PRIMARY KEY (ELEVEL));
  INSERT INTO DIM_LEVEL VALUES (‘A‘, ‘优秀‘, ‘工资大于等于2000‘);

  INSERT INTO DIM_LEVEL VALUES (‘B‘, ‘良好‘, ‘工资大于等于1500且小于2000‘);

  INSERT INTO DIM_LEVEL VALUES (‘C‘, ‘一般‘, ‘工资小于1500‘);
  ------新建表
  DROP TABLE EMP_FACT;
  CREATE TABLE EMP_FACT(CUST_ID VARCHAR(40) NOT NULL ,
                        CUST_NAME VARCHAR(80),
                        SAL INT,
                        ELEVEL VARCHAR(2),
                        PRIMARY KEY (CUST_ID),
                        constraint FK_ELEVEL FOREIGN KEY (ELEVEL) REFERENCES DIM_LEVEL(ELEVEL));
  INSERT INTO EMP_FACT VALUES (‘C001‘, ‘牧云笙‘, 6000, ‘A‘);
  INSERT INTO EMP_FACT VALUES (‘C002‘, ‘牧云勤‘, 10000, ‘A‘);
  INSERT INTO EMP_FACT VALUES (‘C003‘, ‘牧云陆‘, 1700, ‘B‘);
  INSERT INTO EMP_FACT VALUES (‘C004‘, ‘寒江‘, 9000, ‘A‘);
  INSERT INTO EMP_FACT VALUES (‘C005‘, ‘穆如天彤‘, 10000, ‘A‘);
  COMMIT;

建立好维度之后,导入元数据到资料库中,并且建立相应连接与逻辑列

以下是已经建好的资料库截图

按顺序展示

上述环境准备好之后,做出来的报表就是【图1】那个样子了,级别是没有顺序的

现在我们需要按照顺序排序,需要在维度表新增一个排序字段

ALTER TABLE DIM_LEVEL ADD SEQ INT;
UPDATE DIM_LEVEL A SET SEQ=(SELECT CASE WHEN ELEVEL=‘A‘ THEN 1 WHEN ELEVEL=‘B‘ THEN 2 WHEN ELEVEL=‘C‘ THEN 3 ELSE NULL END
FROM DIM_LEVEL B WHERE A.ELEVEL=B.ELEVEL)
COMMIT;

1.将排序字段导入资料库

2.拖拽到模型层并且设置【级别描述】字段排序顺序列依赖SEQ

记得将字段拖到展现层哦,否则分析中没有SEQ字段!

3.分析中排序,并且隐藏

设置列属性

点击字段上的符号,在下拉中选择【排序】→【升序排序】设置SEQ字段为升序,设置完成后会出现如下向上箭头

4.查看

再次看到的数据就是已经排序了,那这个问题可只是个小插曲,并不是本文的精髓所在,下面所说的才是最主要的问题

展示无事实的维度

我们现在只有优秀,良好两个维度,可能有人在看报表的时候就会存在一个疑问,是不是根本就没统计【一般】这个维度,维度缺失确实很容易造成别人的误解,那么我们就来看看如何让他展示呢?

说说我的基本思路:

使用union将另外一个维度与现存事实合并,即虚拟事实

Let’s do it!

打开已有分析→进入【编辑】状态

点击上图的【红色标记】

接着点击第一个【标准(”SCOTT”)】,点击旁边的

点击【复制】即可,接着再点击,点击后,出现【粘贴】

点击【粘贴】后,出现三个【标准】,按照下面一个找到未定列的那个【标准】,将其【剪切】

【剪切后】就只剩下2个【标准】了

此时,将第一个【标准】中的【员工数】、【员工工资】全部置为sum(0)

修改完成之后,点击【结果】查看效果

结果很让人失望,报错了:

这个是排序问题造成,那么我们将union修改为union all即可解决该问题

此时,点击【结果】

结果一看,还是不对,级别怎么不排序了!这是由于刚才union结果集时排序自动被取消了!

选中【结果列】,增加升序排序在字段SEQ上

高高兴兴的看着等待结果的展示,点击【结果】,请看

真是见鬼了,排序了啊,为什么还是这样呢?

看来还有问题,那就继续寻找答案(是不是因为union all造成的呢?是不是两个结果集在一起就不会排序呢?),各种想法浮现出来,但是真正的问题出现在这里:(看下图标记部分)

将字段【SEQ】拖拽到【级别】前边,排序竟然成功了!

真是一路坎坷!

原文地址:https://www.cnblogs.com/OliverQin/p/8324865.html

时间: 2024-10-09 12:20:10

【BIEE】04_当维度表中的维不存在事实表中,需要展示所有维度并且数据类展示为0的相关文章

《BI那点儿事—数据的艺术》理解维度数据仓库——事实表、维度表、聚合表

事实表 在多维数据仓库中,保存度量值的详细值或事实的表称为“事实表”.一个按照州.产品和月份划分的销售量和销售额存储的事实表有5个列,概念上与下面的示例类似. Sate Product Mouth Units Dollars WA Mountain-100 January 3 7.95 WA Cable Lock January 4 7.32 OR Mountain-100 January 3 7.95 OR Cable Lock January 4 7.32 WA Mountain-100 F

事实表和维度表(转载)

维度表示你要对数据进行分析时所用的一个量, 比如你要分析产品销售情况, 你可以选择按类别来进行分析,或按区域来分析. 这样的按..分析就构成一个维度.前面的示例就可以有两个维度:类型和区域.另外每个维度还可以有子维度(称为属性),例如类别可以有子类型,产品名等属性. 下面是两个常见的维度表结构: 产品维度表:Prod_id, Product_Name, Category, Color, Size, Price时间维度表:TimeKey, Season, Year, Month, Date 而事实

事实表 和 维度表

维度表示你要对数据进行分析时所用的一个量, 比如你要分析产品销售情况, 你可以选择按类别来进行分析,或按区域来分析. 这样的按..分析就构成一个维度.前面的示例就可以有两个维度:类型和区域.另外每个维度还可以有子维度(称为属性),例如类别可以有子类型,产品名等属性. 下面是两个常见的维度表结构: 产品维度表:Prod_id, Product_Name, Category, Color, Size, Price时间维度表:TimeKey, Season, Year, Month, Date 而事实

数据仓库--事实表和维度表

本文主要参考如下几篇文章:http://www.cnblogs.com/47613593/archive/2009/02/20/1394581.htmlhttp://jackwxh.blog.51cto.com/2850597/827968 1.数据仓库与操作型数据库的区别 数据仓库的物理模型与常见的操作型数据库的物理模型有很大不同.最明显的区别是:操作型数据库主要是用来支撑即时操作,对数据库的性能和质量要求都比较高,为了防止"garbage in,garbage out",通常设计操

【转载】维度表和事实表的区别

免责声明:     本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除.     原文作者:知识点滴      原文地址: 维度表, 事实表, 数据仓库, BI...   以前一直对维度表, 事实表, 数据分析, BI等概念等有一些模糊. 这几天的学习终于让这些有了一些眉目了: 维度表示你要对数据进行分析时所用的一个量, 比如你要分析产品销售情况, 你可以选择按类别来进行分析,或按区域来分析. 这样的按..分析就构成一个维度.前面的示例就可以有两个维度:类型和区域.

维度表, 事实表, 数据仓库, BI...

以前一直对维度表, 事实表, 数据分析, BI等概念等有一些模糊. 这几天的学习终于让这些有了一些眉目了: 维度表示你要对数据进行分析时所用的一个量, 比如你要分析产品销售情况, 你可以选择按类别来进行分析,或按区域来分析. 这样的按..分析就构成一个维度.前面的示例就可以有两个维度:类型和区域.另外每个维度还可以有子维度(称为属性),例如类别可以有子类型,产品名等属性.下面是两个常见的维度表结构: 产品维度表:Prod_id, Product_Name, Category, Color, Si

数据仓库的几类事实表

交易事实表.周期快照事实表和累积快照事实表,事实快照 在数据仓库领域有一个概念叫Transaction fact table,中文一般翻译为“事务事实表”.事务事实表是维度建模的数据仓库中三种基本类型事实表中的一种,另外两种分别是周期快照事实表和累积快照事实表. 事务事实表与周期快照事实表.累积快照事实表使用相同的一致性维度,但是它们在描述业务事实方面是有着非常大的差异的. 事务事实表记录的事务层面的事实,保存的是最原子的数据,也称“原子事实表”.事务事实表中的数据在事务事件发生后产生,数据的粒

交易事实表、周期快照事实表和累积快照事实表

在数据仓库领域有一个概念叫Transaction fact table,中文一般翻译为"事务事实表".事务事实表是维度建模的数据仓库中三种基本类型事实表中的一种,另外两种分别是周期快照事实表和累积快照事实表. 事务事实表与周期快照事实表.累积快照事实表使用相同的一致性维度,但是它们在描述业务事实方面是有着非常大的差异的. 事务事实表记录的事务层面的事实,保存的是最原子的数据,也称"原子事实表".事务事实表中的数据在事务事件发生后产生,数据的粒度通常是每个事务一条记录

事实表和纬度表概述

事实表和纬度表概述 事实表 在多维数据仓库中,保存度量值的详细值或事实的表称为“事实表”.事实数据表通常包含大量的行.事实数据表的主要特点是包含数字数据(事实),并且这些数字信息可以汇总,以提供有关单位作为历史的数据,每个事实数据表包含一个由多个部分组成的索引,该索引包含作为外键的相关性纬度表的主键,而维度表包含事实记录的特性.事实数据表不应该包含描述性的信息,也不应该包含除数字度量字段及使事实与纬度表中对应项的相关索引字段之外的任何数据. 一个按照州.产品和月份划分的销售量和销售额存储的事实表