简单设计一个onedata指标管理体系
以阿里云的maxcompute的数据仓库架构为例,

从上往下定义,
dwp的数据,来源是dws+dim,最主要是dws。这里不讨论dim的作用。
dws的数据来源于dwd。
dwd的数据来源于ods。
--------
接下来我们定义原子指标和派生指标。
派生指标定义在dws层。并且绑定原子指标。所有的应用数据由派生指标去group by。
原子指标定义在dwd层+虚拟层。原子指标绑定一个dwd的度量值,但是有可能会有计算,所以不完全在dwd,运行的时候可能会进行计算。称为一个虚拟的层。
当然可以把这个虚拟层做出来,专门做一层原子指标层。

这个时候我们的指标管理系统里面应该有以下东西:
| 指标名称 | 指标来源 | 指标口径 | |
| 原子指标 | 可以与度量值一致,也可以不一致 | 绑定dwd的表名和字段 |
1.和绑定的dwd的度量值完全对应 2.需要一点计算,录入计算逻辑 |
| 派生指标 | 修饰词+原子指标名称+时间周期 | 绑定一个原子指标 |
①修饰词:作为where过滤的字段 ②时间周期:近7天,近一个月等 ③聚合操作:平均,求和等 ③聚合维度,也可以不录,在模型管理里录 |
| 应用指标 | 同环比+修饰词+派生指标 | 绑定一个派生指标 |
①聚合的维度:派生指标所在表的字段 ②可能有一些简单的过滤。 ③可能会有一些同环比的计算 绝对不允许有字段计算,如加减乘除,if转化等,如果有,说明逻辑没有下沉。 |
举个例子:
应用指标需要:当月人流量大于2w次并且支付渠道为支付宝的的平均订单金额净增长,维度:每一个城市
拥有的业务过程:订单表。门店人流量表。
| 名称 | 来源 | 口径 | |
| 原子指标 | 订单金额 | 交易表:支付金额,退款金额 | 支付金额-退款金额 |
| 派生指标 |
当月人流量大于2w次 并且支付渠道为支付宝的的平均订单金额 |
订单金额 |
①修饰词: where 支付渠道=支付宝 having 月人流量>2w ②时间周期 where 订单时间是一个月 ③聚合操作:平均 ③维度:城市,品类 (聚合维度比业务指标更宽) |
| 应用指标 |
当月人流量大于2w次 并且支付渠道为支付宝的的平均订单金额净增长 |
当月人流量大于2w次 并且支付渠道为支付宝的的平均订单金额 |
①聚合维度:城市 ②环比计算,当月减上月 |
以上将一个应用指标的计算逻辑沉淀到不同的层次中的指标管理方式,实现了从度量值到最后应用指标的统一,再加上术语管理系统,
可以解决指标同名不同义,同义不同名的口径问题。称之为one data,即一个应用指标有且只有唯一的计算逻辑。
----------------------------------------------------------------------------------------
《模型的作用》
dws的表可以称之为派生指标的模型。
一个派生指标可以有不同的维度。比如近7月,近一个月,城市品类的,城市商圈的,所以 派生指标:模型 = 1:n
可以在录入不同维度的派生指标时,
①当做是不同的派生指标,将维度当做口径记录下来
②当做是同一个派生指标,建设不同维度的模型(表),绑定这个派生指标。如果这么做,应用指标绑定的将不是派生指标,而是dws模型里的字段。
----------------------------------------------------------------------------------------
《是否可以将度量值认为是原子指标》
原子指标代表的是指标的最底层,是服务于指标系统的。度量值代表的是业务发生的过程中产生的数据,是记录业务客观现象的。
虽然两者的字段有很多重合的地方,最好将原子指标重新定义,防止指标管理体系和数仓公共表建设过于耦合而增大统一指标口径的难度。
----------------------------------------------------------------------------------------
《派生指标和应用指标的区别》
应用指标的来源是派生指标,不一定要计算同环比,很多时候名称是一模一样的。
他们的区别在于维度。
dws为了满足更多的应用指标的计算,维度会更多 更细。
打个比方,维度为城市 品类 商圈 门店等级 的订单金额,可以上卷 城市维度,品类维度,商圈维度,城市+品类维度,等多达15个组合的应用指标。
这样BI计算应用指标的时候,就只要根据自己关心的维度做group by即可,非常简单方便。
简单设计一个onedata指标管理体系的更多相关文章
- 学生与部门管理app-产品功能与界面的简单设计
学生与部门管理app-产品功能与界面的简单设计 1. 结对成员学号 我:********* 大佬:*******10 2. 需求分析(NABCD模型) 2.1 N-需求 各个部门在开学初占据学校青春广 ...
- Tomcat详解系列(1) - 如何设计一个简单的web容器
Tomcat - 如何设计一个简单的web容器 在学习Tomcat前,很多人先入为主的对它的认知是巨复杂的:所以第一步,在学习它之前,要打破这种观念,我们通过学习如何设计一个最基本的web容器来看它需 ...
- 设计一个简单的,低耗的能够区分红酒和白酒的感知器(sensor)
学习using weka in your javacode 主要学习两个部分的代码:1.过滤数据集 2 使用J48决策树进行分类.下面的例子没有对数据集进行分割,完全使用训练集作为测试集,所以不符合数 ...
- 180626-Spring之借助Redis设计一个简单访问计数器
文章链接:https://liuyueyi.github.io/hexblog/2018/06/26/180626-Spring之借助Redis设计一个简单访问计数器/ Spring之借助Redis设 ...
- 设计一个简单的devops系统
前言 公司设计的RDMS挺好用的,我也照猫画虎简单的设计一个DevOps系统,与大家分享,不足之处欢迎拍砖,以免误人子弟 前置条件 gitlab gitlab-runner k8s 1. gitlab ...
- 【python免费代码】设计一个简单的学生信息管理系统
文章目录 前言 一.理解 二.部分截图展示 三.代码 四.总结 前言 设计一个简单的学生信息管理系统,实现以下功能(bug) : 录入学生信息,信息以文件方式存储 以学生学号或者学生姓名为条件查询该学 ...
- 如何设计一个简单的C++ ORM
2016/11/15 "没有好的接口,用C++读写数据库和写图形界面一样痛苦" 阅读这篇文章前,你最好知道什么是 Object Relation Mapping (ORM) 阅读这 ...
- ERP设计之系统基础管理(BS)-日志模块设计(转载)
原文地址:8.ERP设计之系统基础管理(BS)-日志模块设计作者:ShareERP 日志模块基本要素包括: 用户会话.登录.注销.模块加载/卸载.数据操作(增/删/改/审/弃/关等等).数据恢复.日志 ...
- 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑
阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...
随机推荐
- 旷视MegEngine数据加载与处理
旷视MegEngine数据加载与处理 在网络训练与测试中,数据的加载和预处理往往会耗费大量的精力. MegEngine 提供了一系列接口来规范化这些处理工作. 利用 Dataset 封装一个数据集 数 ...
- sql 处理数据字段为NULL 若不为空则显示该值,若为空转换成别的值。
第一种方法: 判断字段是否为空,如果为空转成你要的字符 1.oracle : nvl("字段名",'转换后的值')://字段名是双引号,转换后的值是单引号 2.sql Server ...
- JUC 并发编程--06, 阻塞队列(7种), 阻塞等待 api的 代码验证
这些队列的 api ,就是添加队列,出队列,检测对首元素, 由于 add()--remove(), offer()--poll(),太简单这里不做验证, 只验证后二组api: 阻塞等待( put()- ...
- SpringCloud Alibaba实战(5:子模块基本业务开发)
源码地址:https://gitee.com/fighter3/eshop-project.git 持续更新中-- 在上一节里,我们搭建了一个微服务项目的整体架构,并进行了版本控制. 接下来我们进一步 ...
- 权限管理(基本权限、附加权限、ACL权限)
基本权限 •访问方式(权限) 读取:允许查看内容-read r 写入:允许修改内容-write w 可执行:允许运行和切换-execute x 对于文本文件 r: cat head ...
- 『心善渊』Selenium3.0基础 — 1、Selenium自动化测试框架介绍
目录 1.Selenium介绍 2.Selenium的特点 3.Selenium版本说明 4.拓展:WebDriver与Selenium RC的区别 5.Webdriver工作原理 1.Seleniu ...
- 「题解」黑暗塔 wizard
本文将同步发布于: 洛谷博客: csdn: 博客园: 简书. 题目 题意简述 给定 \(y\),求 \(\varphi(x)=y\) 中 \(x\) 的个数和最大值. \(1\leq y\leq 10 ...
- 图文并茂教你学会使用 IntelliJ IDEA 进行远程调试
1. 前言 今天线上出现了个 Bug ,而且比较坑的是涉及到微信相关的东西不能线下调试.传统方式是在代码中各种的日志 log 埋点然后重新部署进行调试,再根据 log 中的信息进行分析.如果你的 lo ...
- 『言善信』Fiddler工具 — 16、使用Fiddler抓取移动端App请求
目录 1.抓取Android移动端App请求 2.抓取IOS移动端App请求 3.总结: 1.抓取Android移动端App请求 前提: 因为Fiddler抓包的原理就是通过代理,所以确保被测终端要和 ...
- c++性能测试工具:google benchmark进阶(一)
这是c++性能测试工具教程的第四篇文章,从本篇开始我将逐步介绍一些性能测试的高级技巧. 前三篇教程可以看这里: c++性能测试工具:google benchmark入门(一) c++性能测试工具:go ...