层 数据仓库_小尝试:基于指标体系的数据仓库搭建和数据可视化

关于作者:小姬,某知名互联网公司产品专家,对数据采集、生产、加工有所了解,期望多和大家交流数据知识,以数据作为提出好问题的基础,挖掘商业价值。

0x00 前言

我将整理文章分享数据工作中的经验,因为业务内容上的差异,可能导致大家的理解不一致,无法体会到场景中的诸多特殊性,不过相信不断的沟通和交流,可以解决很多问题。前面我们分析了职场基本功、数据指标体系,今天我们来就前面文章中的指标体系,聊一下数据仓库的搭建和数据可视化

历史导读:

小进阶:数据指标体系和数据治理的管理

小诀窍:不妨尝试从交付质量上打败对手

以下,Enjoy:

0x01 为什么基于指标体系搭建数据仓库

前面文章中我们提到过为什么要搭建指标体系,如果还无法体会指标体系的作用和意义,可以通过历史导读重温前面的2篇文章,或者加入我们的微信群,同大家一起交流。这里简单的在换2句话描述一下做指标体系的重要性。

  • 搭建指标体系实际上是同需求方达成一种协议,可以有效地遏制不靠谱的需求,让需求变得体系且有条理;
  • 数据指标体系是指导数据仓库搭建的基石,稳定且体系的数据需求,有利于数据仓库方案优化,效率提升。

没有数据指标体系的团队内数据需求经常表现为“膨胀”现象。每个人都有看数据的视角和诉求,然后以非专业的方式创造维度/指标的数据口径。数据从业人员被海量的数据需求缠住,很难抽离出业务规则设计好的解决方案,最终滚雪球似的搭建难以维护的“烟囱式”数据仓库。

提供数据可视化方案的过程,依然存在像搭建数据仓库一样的问题。数据可视化报表数量膨胀但使用率低,好似再多的数据报表都远远不够满足数据需求一样。长久下来维护成本居高不小,效益率不够高。这让数据从业者很苦恼,如果大家还有其他苦恼的问题,希望继续深入的沟通了解,欢迎评论留言或者加入我们的微信群聊共同交流。

0x02 基于指标体系搭建数据仓库思考

我们简单回忆下的数据仓库分层问题,做“又宽又薄”的数据仓库分层,让数据能够有序的流转。数据全链路的整个生命周期只有通过层次才能清洗明确的被使用者感知和消费。任何跨层依赖,循环依赖,多重依赖都会导致数据问题的多发且不可维护。

  • 数据仓库常见分层方式

bc9baee760ea405519914b54dd0f7f5d.png
  • 数据仓库分层和跨层依赖、循环依赖、多重依赖的不同表现形式

6d9b339a99f6a3bf769103b3de0501e6.png

因此,我们需要有效的组织和管理数据,让它更有秩序。

  • 每层都有作用域和职责,清晰每层数据的目标定位和理解。
  • 规范工作方式,做标准数据分层,开发通用性强(健壮)的数据中间层,避免耦合重复计算问题。
  • 提供统一的数据服务,输出统一认知的数据口径
  • 将复杂的数据任务拆解,标准步骤每层解决场景问题。

从数据仓库的分层来看,ODS层是贴业务,形态主要依赖业务数据形式;APP层是贴使用场景,取决于数据怎么呈现和消费,DW层是中间层,负责发挥重要的扩展作用,肩负大量的数据加工计算责任。

鉴于以上数据仓库的分层逻辑,我们不难得出结论。

  • ODS层的搭建不需要过多思考,依赖业务库的表现形式;
  • APP层的更多依赖数据最终的场景搭建,考虑场景因素居多,比如多维、速度、口径。

只有DW层让数据生产者有极大的发挥空间,如何设计出好的(扩展性强)DW层是数据仓库的重点标准,相信很多同学在DW层搭建的过程都出现过类似问题“理想很丰满,现实很残酷”,搭建的数据“不接地气,不实用”,还是不能解决数据需求问题,总是跟不上业务的发展变幻。

那么,从现在开始不妨首先建立指标体系,基于指标体系搭建数据仓库。我们常见的指标体系大致包含以下内容:

  1. 产品框架

eb16169141a1ea1c12b3abacd3d3c123.png
  1. 数据矩阵

7fefe4d4d5fee6efd56c113e7ee108c8.png

说明:

根据产品框架梳理出可靠的数据矩阵效果最佳,单现实的情况是在产品框架下的不同报表的指标口径或是计算逻辑可能存在差异,因此数据矩阵可以是根据某个报表单独针对性小矩阵。

  1. 数据口径

501c71b6fb8b052c24d752361f74937d.png

说明:同数据矩阵一样不同的数据报表中,相同的指标名称可能存在不同的数据口径或者计算逻辑 ,因此指标的口径定义方面也可以做一些调整,例如口径和计算逻辑不同,必须区分出不同的指标名称,或者是相同的指标名称,做好指标口径定义的说明,告知受众群体差异点在哪里。

0x03 基于指标体系搭建数据仓库

常见的数据仓库搭建,实现数据分层大致分为两种模式:

  • A模式:基于业务实体或者数据的应用场景,从应用层向底层推导过程。
  • B模式:基于已有的数据,从底层分类整理数据,向应用层逐步搭建。

以底层向应用层搭建数据仓库,侧重在于需求尚且不清晰的情形下开展数据开发工作,首先实现数据预处理,做好数据的采集对接和数据主题分类。以备数据消费场景落地的时候,快速实现功能的开发。这种模式通用型强,使用广泛,同时也会造成很多冗余和设计不合理,实际响应需求的时候出现扩展性差,重构几率高的现象。

另一种模式则是在需求明确的前提下,以需求向底层推导数据仓库建模。通过需求让参与项目的各方快速理解业务诉求,统一目标的认知。高质量的梳理出业务需求和数据仓库之间的关系,针对性强的搭建数据仓库。但是这依然有诟病,就是数据建设容易出现“烟囱式”搭建,满足场景有限,复用性差。

基于指标体系搭建数据仓库,主要解决的是“A模式”中的数据场景考虑不全面的问题。如果数据的使用场景考虑不全面就会造成“烟囱式”数据搭建,复用性差。数据需求如果以“点状”碎片的形式提出,没有全局的认知和规划,数据仓库的搭建只能针对性的以“点状的烟囱式”搭建。如果需求能体系化的产出,梳理出业务场景中所需要的维度、指标。那么就可以最大限度的解决数据建模过程中的“烟囱式”,从而让数据的搭建“又宽又薄”。

例如,我们有如下数据矩阵

28bf98edc2dcecfd96430a99c517c9eb.png

那么,我们可以选择的数据仓库分层建模方式如下

3546bb056e63ede0cafc903035865e05.png

说明库.表1:通过APP层的数据表服务数据可视化,数据应用服务,多维查询;库.表2:实时明细表,通过与其他的实时表(库.表3)或者维度表(库.表4、5)关联生成APP层的数据表;库.表6:埋点数据产生的日志表,或者是从业务库对接过来的业务数据(比如订单数据)

0x04 数据可视化报表

1afaa421fd5643da87046e00d2c9c23e.png

当然,理想很丰满现实很残酷,正如我几次提到实际工作存在很多不理想,这是很多人遇到的问题,我也在探索新的方式,如果大家有兴趣可以加入微信群一起交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336678.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机中级职称报考入口,2020年9月计算机职称考试报名流程(附入口)

2020年9月计算机等级报名公告正在陆续公布,计算机等级考试网上怎么报名?小编为大家整理计算机等级报名流程如下:2020年9月计算机等级报名流程一、注册通行证考生登入报名网页后,点击“用户注册”按钮,根据网页提示&…

简单工厂抽象工厂工厂方法_让工厂美丽

简单工厂抽象工厂工厂方法每个名副其实的Java程序员都知道Factory Pattern 。 这是一种便捷,标准化的方法,它通过教一个组件如何捕鱼而不是将它们交给它们来减少耦合。 但是,在使用大型系统时,该模式确实会向系统添加很多样板代码…

枚举所有进程及其ID

#include<Windows.h>#include<TlHelp32.h> //声明快照函数的头文件#include<stdio.h>int main(int argc, char*argv[]){system("color 0A"); //设置底色PROCESSENTRY32 pe32; //声明该结构体变量//在使用这个结构前&#xff0…

内蒙古大学计算机组成原理实验,内蒙古大学计算机组成原理期末练习0

内蒙古大学计算机组成原理期末练习0 (4页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;9.9 积分第 1 页 共 4 页 《《计算机组成原理计算机组成原理》》期末练习期末练习 班级 专业 姓名 学号 编号 …

dev的编辑器不支持getchar吗_“两头婚兴起”:你支持不娶不嫁,孩子随父姓也随母姓吗?...

何为两头婚&#xff1f;简单来说就是男不娶&#xff0c;女不嫁&#xff0c;没有彩礼也没有嫁妆的说法。男女俩人结婚之后没有谁到谁家里之说&#xff0c;两夫妻过自己的小日子&#xff0c;与各自的原生家庭保持一定的联系。婚后生育两个孩子&#xff0c;一个随父姓&#xff0c;…

字符串操作之字符串拷贝功能实现

#include<iostream> using namespace std; //思路分析&#xff1a; //a.确定被拷贝的数组内存是否小于等于目标数组的内存大小 //b.拷贝数组 //c.目标数组最后一个字符为空字符(\0)//str1:被拷贝的数组 str2:目标数组 len:目标数组的长度 bool stringCopy(char* str1, ch…

2015年传智播客java_2015年的Java –重大事件

2015年传智播客java2015年是Java的一年&#xff0c;语言&#xff0c;平台&#xff0c;生态系统和社区继续主导着软件领域&#xff0c;只有Javascript对整个行业产生了类似的影响。 如果您错过了2015年的亮点&#xff0c;这里是发生的一些重大事件。 Java 20岁了&#xff0c;还…

vue 删除两个集合中相同的数据_vue.js如何删除数组里面的数据

vue.js如何删除数组里面的数据发布时间&#xff1a;2020-12-10 12:04:44来源&#xff1a;亿速云阅读&#xff1a;107作者&#xff1a;小新这篇文章主要介绍了vue.js如何删除数组里面的数据&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文…

字符串操作之字符串连接

/* 将str1与str2连接—->(将合成的字符串放入str1中) 思路分析: a. 确定str1的内存大小是否小于str1str2-1; b. 连接; c. 连接后的字符串最后一个为空字符(‘\0’)。 */ //str1-->存放最终连接字符串的数组 ,len--->str1的内存大小 #include<iostream> using na…

全国计算机证件照要露耳朵吗,结婚证照片要露耳朵么 结婚登记照露一只耳朵行吗...

结婚证件照&#xff0c;这是可以在在民政局里面照的&#xff0c;也是可以在外面的影楼照的&#xff0c;在外面影楼照的话&#xff0c;照出来会比较好看&#xff0c;就是价格有点贵。结婚证上面的照片是证件照&#xff0c;所以是有一定的要求的。露一只耳朵行不行呢&#xff1f;…

findfirst_当心findFirst()和findAny()

findfirst过滤Java 8 Stream &#xff0c;通常使用findFirst()或findAny()来获取在过滤器中幸存的元素。 但这可能并不能真正实现您的意思&#xff0c;并且可能会出现一些细微的错误。 那么 从我们的Javadoc&#xff08; 此处和此处 &#xff09;可以看出&#xff0c;这两种方…

儿童学python下哪个软件好用_【开源软件】超好用的Python学习软件!没有之一!...

可以观看视频&#xff01;文章结尾&#xff0c;有下载、安装方法&#xff01;曾几何时&#xff01;Python开始掀起了一阵狂猛的学习浪潮&#xff1f;Python那么Python为什么那么火&#xff1f;https://wenwen.sogou.com/z/q889141941.htm咱们在网上随便搜索&#xff0c;就是一大…

土木计算机2级,请教各位,我是学土木的,考计算机二级的哪个比较好?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼谁听说近来是开学季&#xff0c;听度娘说开学季有三倍经验&#xff0c;竟然有三倍经验&#xff1f;但是就算有三倍经验我也不会借这谁听说近来是开学季&#xff0c;听度娘说开学季有三倍经验&#xff0c;竟然有三倍经验&#xff1f…

javafx_JavaFX在这里留下来!

javafx上周在网上看到了一些有关JavaFX未来的讨论。 许多人给人以Oracle将JavaFX搁置的印象。 这主要是由Shai Almog&#xff08;代号为One&#xff09;撰写的博客文章“ Should Oracle Spring Clean JavaFX”引起的。 我早些时候写了一个博客&#xff0c;“它的灵感”来自于我…

ssms2008 代码自动提示_使用 SSMS 的提示和技巧 - SQL Server Management Studio (SSMS) | Microsoft Docs...

使用 SQL Server Management Studio (SSMS) 的提示和技巧Tips and tricks for using SQL Server Management Studio (SSMS)03/13/2018本文内容本文介绍了一些使用 SQL Server Management StudioSQL Server Management Studio (SSMS) 的提示和技巧。This article gives you some…

递增星号打印解析

#include<iostream> using namespace std;//输出一个5X5递增*号图形 //分析首先需要打印出5行&#xff0c;每行打印的*号数量与当前行数相同int main() {for (int i 1; i <5; i)//循环打印确定行数为5{for (int j 0;j<i;j)//从每行第一个位置开始打印&#xff0c;…

计算机接口控制采集时序图,自动站实时数据质量控制

自动站实时数据质量控制利用极值法、比较法、综合(本文共2页)阅读全文>>通过2次自动站实时数据质量控制失败的案例,分析总结了自动气象站实时数据质量控制的经验教训。结果表明:(1)值班员必须严格执行地面气象观测规范和各项规章制度;必须充分认识建立和运行实时自动气象…

jpa语法错误_JPA陷阱/错误

jpa语法错误根据我在帮助团队和进行培训方面的经验&#xff0c;这是我遇到的一些陷阱/错误&#xff0c;它们在使用JPA的基于Java的系统中引起了一些问题。 需要一个公共的无参数构造函数 始终使用双向关联/关系 将OneToMany用于可能庞大的集合 需要一个公共的无参数构造函数…

python源码文件以什么格式结尾结尾_查看python源码,发现里面的函数都以pass结尾,那么意义何在?...

例如&#xff1a;class str(object):"""str(object) -> strstr(bytes_or_buffer[, encoding[, errors]]) -> strCreate a new string object from the given object. If encoding orerrors is specified, then the object must expose a data bufferthat …

java流式传输对象_使用Java 8在地图上流式传输

java流式传输对象在本文中&#xff0c;我将向您展示如何在标准Java映射上有效地实现Speedment Open Source流&#xff0c;并将Stream接口扩展为MapStream&#xff01; 即使在复杂的情况下&#xff0c;此添加将使保持流的具体性和可读性变得更加容易。 希望这将允许您继续流式传…