1. 背景
1.1 现状
「小数公司」的人事部门率先搭建了「报表OA系统」作为人事任务流程,将人事工作标准化、流程化,非常适合小数公司目前的人事工作现状。
而行政部门新采购了简道云应用进行业务的规范化流转,通过「简道云表单系统」进行行政后勤和薪资绩效管理录入。
1.2 问题
由于员工基础信息均存储在人事部门搭建的「报表OA系统」中,对于简道云系统录入的后勤和薪资绩效管理数据而言,无法与员工信息、考勤等数据进行联合分析,这样的数据孤岛影响了公司的数据融合和使用。
同时,由于公司希望制作报表看板、进行业务的自助数据分析,通过数据反哺业务,降本增效,而当前公司没有统一的数据源,都是通过 IT 直接在原始数据库中取数,数据指标字段不统一,数据质量低。
因此急需提升数据质量,搭建数据仓库,规范数据使用流程。
本文中介绍的非功能性规范均为建议性规范,产品功能无强制,仅供指导。
2. 解决思路
公司使用了 FineBI 集成 FineDataLink 「数据开发」模块。
通过数据开发搭建数据仓库,将「简道云填报系统」中的表单数据和接口数据下云落库至指定数据库中;同时也将报表填报的人事数据取到同一数据库中,打破数据孤岛,生成数据仓库 ODS 层。
使用 FineDataLink 进行数据清洗和整合计算,通过 ETL(Extract、Transform及Load)完成从 ODS 层到 DW、DM 层的数据处理,提升数据质量,同时输出满足业务需求的规整数据,输出至下游供给有使用需求的员工,让他们通过数据集市进行数据分析和看板制作。
3. 方案内容
3.1 搭建 ODS 层数仓
ODS 层,即数据引入层:存放未经过处理的原始数据至数据仓库系统,结构上与源系统保持一致,是数据仓库的数据准备区。
此层级我们按照系统进行划分:「简道云系统」、「OA报表系统」
将「简道云」表单应用中的行政后勤和薪资绩效表单数据通过配置简道云数据源 接入 FineDataLink 中,实现简道云数据下云,原表原样的将数据同步至指定的数据库。
同时对于简道云的接口数据,也可通过数据同步-API 等方式实现数据同步。
将「报表 OA系统」填报的数据(包括移动端和PC端)接入FineDataLink 中,原表原样将数据同步至指定的数据库。
由于使用的是定时同步,因此需要根据数据量、数据更新频率等方式对数据同步设置更新方式。
比如「部门职务表」、「员工信息表」等数据表数据量不大,且更新频率不高,因此可以使用清空后全量写入数据的更新方式;
而「考勤记录表」、「请假明细表」数据量比较大,但是数据只会新增和修改,不会删除,因此可以根据 ID 字段进行比对更新;
「办公资产录入」表数据量比较大,且可能会出现数据删除的情况,因此可以使用比对更新和比对删除进行数据更新。
更多更新方式可参见:数据更新专题概述
任务设计文档表如下图所示:
模块 | ods_层任务名 | 更新频率 | 来源数据库 | 来源表 | 目标数据库 | 目标数据表 | 使用参数 | 更新方式 | 更新原因 |
---|---|---|---|---|---|---|---|---|---|
简道云系统 | ods_salary | 每天更新一次 | 简道云数据源 | 薪资基础表 | 写_Data Warehouse | ods_salary | / | 清空后全量写入 | 首次更新,需要读取全量数据 数据量不大 |
ods_kpi | 简道云数据源 | 绩效/职级录入表 | 写_Data Warehouse | ods_kpi | / | 清空后全量写入 | 数据量不大 首次更新,需要读取全量数据 | ||
ods_station | 简道云数据源 | 办公工位录入 | 写_Data Warehouse | ods_station | ods_station_id ods_station_aa ods_station_bb ods_station_cc | 比对更新 比对字段 _id | 接口取数 循环取数 | ||
ods_materials | 简道云数据源 | 办公资产录入 | 写_Data Warehouse | ods_materials | ods_materials_createTime ods_materials_deletetime | 比对更新 比对删除 | 数据量比较大 | ||
OA报表系统 | ods_department | MYSQL FRDemo | Hr_部门职务表 | 写_Data Warehouse | ods_department | / | 清空后全量写入 | 首次更新,数据量不大 且更新频率不高 因此直接清空写入 | |
ods_employee | MYSQL FRDemo | Hr_员工信息表 | 写_Data Warehouse | ods_employee | / | 清空后全量写入 | |||
ods_position | MYSQL FRDemo | Hr_岗位信息表 | 写_Data Warehouse | ods_position | / | 清空后全量写入 | |||
ods_resignation | MYSQL FRDemo | Hr_离职转岗表 | 写_Data Warehouse | ods_resignation | / | 清空后全量写入 | |||
ods_contract | MYSQL FRDemo | Hr_员工合同信息 | 写_Data Warehouse | ods_contract | / | 清空后全量写入 | |||
ods_recruit | MYSQL FRDemo | Hr_招聘信息表 | 写_Data Warehouse | ods_recruit | / | 清空后全量写入 | |||
ods_interview | MYSQL FRDemo | Hr_面试记录表 | 写_Data Warehouse | ods_interview | / | 清空后全量写入 | |||
ods_attendance | MYSQL FRDemo | Hr_考勤记录表 | 写_Data Warehouse | ods_attendance | / | 比对更新 比对字段 id | 数据量比较大 | ||
ods_vacation | MYSQL FRDemo | Hr_请假明细表 | 写_Data Warehouse | ods_vacation | / | 比对更新 比对字段 id | |||
ods_workout | MYSQL FRDemo | Hr_出差明细表 | 写_Data Warehouse | ods_workout | / | 清空后全量写入 |
3.2 搭建 DW 层数仓
DW 层,即包括 DIM 维度表、DWD 和 DWS,由 ODS 层数据加工而成。主要完成数据加工与整合,建立一致性的维度,构建可复用的面向分析和统计的明细事实表,以及汇总公共粒度的指标。
公共维度层(DIM):基于维度建模理念思想,建立整个数仓的一致性维度。降低数据计算口径和算法不统一风险。公共维度层的表通常也被称为逻辑维度表。
比如某维度表中部门使用的是二级部门ID,而另一张数据表中使用的是部门2,这时候在 DW 层需要进行统一。
公共汇总粒度事实层(DWS):以分析的主题对象作为建模驱动,基于上层的应用和产品的指标需求,构建公共粒度的汇总指标事实表,以宽表化手段物理化模型。构建命名规范、口径一致的统计指标,为上层提供公共指标,建立汇总宽表、明细事实表。公共汇总粒度事实层的表通常也被称为汇总逻辑表,用于存放派生指标数据。
明细粒度事实层(DWD):以业务过程作为建模驱动,基于每个具体的业务过程特点,构建最细粒度的明细层事实表。可以结合企业的数据使用特点,将明细事实表的某些重要维度属性字段做适当冗余,即宽表化处理。
此层级我们按照主题域进行划分:
公共维度层(DIM):「dim_员工信息」
任务设计文档表如下图所示:
模块 | 目标表 | dim_层任务节点 | 更新频率 | 来源表 | 说明 | 更新方式 | 更新方式原因 |
---|---|---|---|---|---|---|---|
dim_员工信息 | dim_position | dim_position | 每天一次 | ods_position | 维度表 | 清空后全量写入 | 维表,数据量不大 |
dim_employee | dim_employee | ods_employee | 清空后全量写入 | ||||
dim_department | dim_department | ods_department | 清空后全量写入 |
明细粒度事实层(DWD):「dwd_招聘」、「dwd_考勤」、「dwd_后勤」、「dwd_工资绩效」、「dwd_入离职」
对于数据更新的策略,依然和 ODS 层中相同,详情参见:数据更新专题概述
3.3 搭建 DM 层数仓
DM 层,即数据应用层 ADS:存放数据产品个性化的统计指标数据,根据 DW 与 ODS 层加工生成。
此层级中依据DW 与 ODS 层进行数据合并、计算,产出了「基础员工信息宽表」、「员工信息&办公工位」等宽表,「二级部门员工人数」等指标数据表,生成数据集市。
3.4 配置调度任务
对于已经搭建好的数据仓库,由于使用的是定时任务,因此需要设置调度配置,来实现数据的定时更新。
对于数据仓库的调度任务,设置每一层的调度任务和总调度任务,以确保整个数仓的定时更新完整和秩序性。
例如对于没有业务上下游关联的数据,可以使用并行排布的方式进行执行更新,提高运行效率,如下图所示:
而对于有业务上下游关联的数据,则需要使用串联方式进行更新,确保上下游之间的更新时间和秩序,如下图所示:
3.5 数据输出
对于 DW 和 DM 层数据,可以将其直接输出至 BI 系统中,便于自助分析使用。
同时 FineReport 也可以从 DW 和 DM 层数据库中取数进行看板制作。