1.背景
数据中台是管理数据资产的地方,那么使用数据时要重复考虑数据资产的复用,而非重复建设浪费资源。那么数据建模就需要设计才能实施。
2.好的模型
如何判断建模后的数据模型是一个好的模型,可从下面两个方向评估:
2.1 可复用的模型
(1)引用次数,被引用的次数越多,证明价值越大,所以引用次数需要记录下来,这也能表现数据资产的价值。
怎么提高引用次数
从血缘上看,自下而上就是只有一条,那么相对来说是比较差的。好的是相互交织发散
(2)查询次数
2.2 设计数据模型需要统一的标准
(1)要有主体域、业务过程
(2)规范表名、字段名
3.主题域划分方法
3.1 按照所属系统划分
业务系统有几种,就划分几种
3.2 按照业务(功能模块/业务线)或业务过程划分
如按照考勤主题、项目管理主题、日志管理主题等
3.3按照部门划分主题域
如按照领导、企管科室、运营科室等
3.4 常见的医疗主题域
参考:http://chisc.net/shangye/baike/fenxibaogao/zhuanlan/yejiejingying/yiliaoxinxihualunwen/2013-05-15/1637.html
4.数据生命周期
参考:https://www.cn-healthcare.com/article/20220117/content-565189.html
一般包括大数据组织、现 状评估、制定大数据战略、数据定 义、数据采集、数据分析、数据呈 现、数据治理及持续改进
5.维度:group by 维度
5.1 示例
参考https://doc.mbalib.com/view/155693a34c8c48ade4ff59cf75a1d19b.html
5.2 粒度:维度的层次
例如时间维度的粒度:时分秒;地域维度的粒度:省市区
5.3 维度角色:left join 维度表 as 维度角色
同个维度(如时间),但是不同动作产生的时间有不通含义,所以时间维度会有不同的维度角色
如表A是需要审批的数据记录,里面涉及4个时间:提交时间、审批时间、创建时间、更新时间,都是关联【时间维度】,为了让中台理解并自动生成sql,需要给不同时间字段设置不同维度角色
字段名 | 字段类型 | 描述 | 关联维度 | 维度角色 |
id | bigint(20) | 主键 | ||
content | varchar(1000) | 内容 | ||
submit_user_id | bigint(20) | 提交人id | ||
submit_date | date | 提交日期 | 时间维度 | time_role_submit |
apply_user_id | bigint(20) | 审批人id | ||
apply_date | date | 审批日期 | 时间维度 | time_role_apply |
create_date | date | 创建日期 | 时间维度 | time_role_create |
update_date | date | 更新日期 | 时间维度 | time_role_update |
时间维度表
字段名 | 字段类型 | 描述 |
val | date | 日期值(主键) |
day | int(2) | 日期(dd) |
day_yyyyMMdd | varchar(20) | 日期(yyyy-MM-dd) |
month | int(2) | 月份(MM) |
month_yyyyMM | varchar(20) | yyyy-MM |
year | int(4) | 年份(yyyy) |
从而根据上面【关联维度】和【维度角色】,自动生成sql
select
count(t.id) as total,
submit_date,
apply_date,
create_date,
update_date
from tableA as t
left join `时间维度` as time_role_submit on time_role_submit.val=t.submit_date
left join `时间维度` as time_role_apply on time_role_apply.val=t.apply_date
left join `时间维度` as time_role_create on time_role_create.val=t.create_date
left join `时间维度` as time_role_update on time_role_update.val=t.update_date
where 1=1
group by
time_role_submit.val,
time_role_apply.val,
time_role_create.val,
time_role_update.val
5.4 sql的注意事项
select
t.*
from ods as t
left join 维度表 on t.xxx = 维度表.主键
....
group by 维度表.主键
group by 维度表主键,而不是group by ods的时间字段,方便后期可以将这样事实表 left join 时间维度表,从而获取时间维度表的其他字段
6.厂商
6.1 阿里云-医疗健康数智平台 用户指南