每天为维度展示当月的数据情况
Posted 潘潘潘的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每天为维度展示当月的数据情况相关的知识,希望对你有一定的参考价值。
/** * 获取每日数据统计 */ public function getOneDayCountLog() // 本月所有天数 for ($i = 1; $i < date(\'t\')+1; $i++) $monthDay[\'revenue_money_day\'] = \'\'; $monthDay[\'dayorder\'] = $i; $monthDay[\'net_receipts_money_day\'] = \'\'; $countMonthDay[] = $monthDay; // 每天为维度展示当月的数据情况 $monthSalesDay = Sms::build() ->group(\'dayorder\') ->field("sum(state) revenue_money_day, FROM_UNIXTIME(time, \'%d\') AS dayorder") ->field("sum(code) net_receipts_money_day, FROM_UNIXTIME(time, \'%d\') AS dayorder") ->order(\'dayorder asc\') ->whereMonth(\'time\') ->select(); // 天数数据添加 foreach ($countMonthDay as $key => $value) foreach ($monthSalesDay as $key1 => $value1) if ($value[\'dayorder\'] == ltrim($value1[\'dayorder\'], \'0\')) $countMonthDay[$key][\'revenue_money_day\'] = $value1[\'revenue_money_day\']; $countMonthDay[$key][\'dayorder\'] = ltrim($value1[\'dayorder\'], \'0\'); $countMonthDay[$key][\'net_receipts_money_day\'] = $value1[\'net_receipts_money_day\']; $data[\'countMonthDay\'] = $countMonthDay; return json_success(\'每日数据统计\', $data);
BIEE04_当维度表中的维不存在事实表中,需要展示所有维度并且数据类展示为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!
打开已有分析→进入【编辑】状态
点击上图的【红色标记】
点击【粘贴】后,出现三个【标准】,按照下面一个找到未定列的那个【标准】,将其【剪切】
【剪切后】就只剩下2个【标准】了
此时,将第一个【标准】中的【员工数】、【员工工资】全部置为sum(0)
修改完成之后,点击【结果】查看效果
结果很让人失望,报错了:
这个是排序问题造成,那么我们将union修改为union all即可解决该问题
此时,点击【结果】
结果一看,还是不对,级别怎么不排序了!这是由于刚才union结果集时排序自动被取消了!
选中【结果列】,增加升序排序在字段SEQ上
高高兴兴的看着等待结果的展示,点击【结果】,请看
真是见鬼了,排序了啊,为什么还是这样呢?
看来还有问题,那就继续寻找答案(是不是因为union all造成的呢?是不是两个结果集在一起就不会排序呢?),各种想法浮现出来,但是真正的问题出现在这里:(看下图标记部分)
将字段【SEQ】拖拽到【级别】前边,排序竟然成功了!
真是一路坎坷!
以上是关于每天为维度展示当月的数据情况的主要内容,如果未能解决你的问题,请参考以下文章
SQL 计算自当月第一天以来每天的累积 Distinct 计数
php 总结(14) 每个客服当月每天的资料查询,多重数组查询