内容分析:
本文档详细描述了纯数据库层面的轻量级数据质控系统的设计与实现。系统旨在满足某领域业务系统实施过程中对第三方数据源对接和下级单位数据上报的质控需求。文档内容主要包括项目需求、设计约束、实现思路、技术实现、界面设计、功能设计等多个方面。技术实现部分详细说明了质控规则设置、质控管理、质控统计页面、质控明细页面、质控总览以及数据错误列表的设计与实现。阅读时长:
由于本文档内容较为详细,且包含多个模块的设计与实现,预计阅读时长为40-60分钟。具体时间取决于读者的阅读速度和对内容的熟悉程度。对于不熟悉数据质控领域的读者,可能需要更长时间来理解和消化文档内容。
数据质量管理是数据治理研究领域的具体内容,目前市场上有众多成熟产品满足业务系统数据质量管理需求。本文采用一种低成本、较为轻量级的设计与实现思路,探索数据质量监测的需求实现。
目录
一、项目需求
在某领域的业务系统实施过程中,作为某一子领域主管部门,要实现众多第三方数据源对接、下级单位数据上报的需求。在此过程中,数据具有多源、异构、海量的显著特征。亟需数据质量监测功能,提供给数据管理者及时掌握数据情况。
二、设计约束
- 数据质控对象是多源、异构、海量数据在数据中心落地后的数据表进行处理。
- 数据质控规则在系统投入使用后会根据业务要求灵活调整。
- 数据质控检查由系统自动完成
- 需要定期进行数据检查。
- 数据质控规则的设定由专人完成
三、实现思路
- 在数据库设计数据质控规则存储、管理表,用以记录数据质控规则。
- 数据质控规则实质上是一段SQL脚本,由数据质控检查作业调用执行。
- 检查规则应分为汇总查询语句和明细查询语句两部分。其中,汇总查询语句的返回结果对于各个规则来讲是统一结构的,而明细查询返回结果是根据检查规则不同而变化。
- 因为明细查询返回结果不同,因此将结果通过For xml子句转换成xml存储于数据表中,程序读出后直接绑定到GridView上显示。
- 系统自动记录后台执行检查过程中的错误,形成错误列表,并能查看详细数据。
- 由管理员或者开发人员通过设置功能,添加、删除、修改质控检查规则,并设置启用与否。
- 基于上述思路,可以发现、报警(预警)的数据质量问题包括:数据准确性、数据唯一性、数据及时性、数据关联性、数据一致性、数据完整性等。基本涵盖大部分数据质量问题。
四、技术实现
1. 规则设置
1.1 数据表设计
- 质控规则表:T_Cas_DataAudit_Rule
字段名 | 说明 | 数据类型 | 主键 | 外键 | 非空 |
---|---|---|---|---|---|
AuditID | 主键 | int | TRUE | TRUE | |
SEARCH_SQL | 查询语句 | VARCHAR(500) | TRUE | ||
SEARCH_DETAIL_SQL | 明细查询语句 | VARCHAR(500) | TRUE | ||
SEARCH_TYPE | 质控类型代码(JZ_CODE[]) | VARCHAR(10) | TRUE | ||
SEARCH_CLASS | 质控类别代码(JZ_CODE[]) | VARCHAR(10) | TRUE | ||
DESCRIPTION | 描述 | VARCHAR(500) | TRUE | ||
TABLE_NAME | 表名 | VARCHAR(30) | |||
TABLE_SHOW | 表名的前台显示字段及中文名称 | VARCHAR(500) | |||
TABLE_DESC_NAME | 表中文显示名 | VARCHAR(50) | TRUE | ||
IS_ENABLE | 是否启用 1启用 0未启用 | CHAR(1) | TRUE | ||
OP_NAME | 操作人 | VARCHAR(30) | TRUE | ||
OP_TIME | 操作时间 | DATE | TRUE |
1.2 功能设计
1.2.1 查询功能
用户可以通过设定多个查询条件,检索符合条件的质控信息,查询结果将以列表形式展示,并提供排序、翻页以及导出到Excel的功能。
- 输入描述:
- 质控类型:用户可以选择特定的质控类型作为查询条件。
- 质控类别:用户可以选择特定的质控类别进行筛选。
- 描述:支持模糊查询,用户输入关键字,系统返回包含这些关键字的描述信息。
- 表中文显示名:同样支持模糊查询,用户输入关键字,系统检索匹配的表中文显示名。
- 是否启用:用户可以从下拉列表中选择“是”或“否”来查询当前是否启用的质控项目。
- 操作人:用户可以输入操作人的名称或ID来查询特定操作人负责的质控项目。
- 操作日期:用户可以选择一个日期范围,查询在该时间段内进行操作的质控项目。
- 输出描述:
- 序号:查询结果将包括一个序号列,用于标明每行记录的顺序。
- 质控类别:显示每条记录所属的质控类别。
- 质控类型:显示每条质控记录的质控类型。
- 表中文显示名:展示每条记录在系统中的中文显示名称。
- 描述:展示每条质控记录的详细描述信息。
- 操作区(系统):标明每条质控记录是在哪个系统或区域内进行的操作。
- 其他功能描述:
- 结果排序功能:查询结果默认根据序号进行排序,用户也可以根据需要选择其他字段进行排序。
- 翻页功能:当查询结果超过一页时,用户可以通过翻页功能查看所有的查询结果。
- 导出到Excel:用户可以将查询结果导出到Excel文件中,以便进一步分析或存档。
1.2.2 显示详细
点击操作区中的查看
- 当用户在查询结果的操作区中点击“查看”时,系统将展示所选质控项目的详细信息。
- 详细信息包括但不限于:质控类型、质控类别、描述、表名、表名的前台显示字段及中文名称、表中文显示名、是否启用状态、操作人和操作时间等。
- 用户可以通过此功能深入了解特定质控项目的所有相关信息,以便进行进一步的分析或操作。
1.2.3 新增
1. 点击查询页面上的新增按钮触发
- 用户在查询页面点击“新增”按钮后,将打开一个新的界面或弹出窗口,用于输入新质控项目的相关信息。
2. 设置查询语句、类型代码、类别代码、描述、表名、表名的前台显示字段及中文名称、表中文显示名
- 用户需要在新增界面中填写质控项目的各项信息,包括查询语句(必须以“SELECT ”开头)、类型代码、类别代码等。
- 这些信息是创建新质控项目的基础,必须准确填写以确保质控项目的正确性和有效性。
3. 其中的质控类型(如非空检查、逻辑规则)、质控类别(经案系统要求)
- 用户需要选择或输入质控类型和质控类别,这些分类信息有助于后续对质控项目的管理和查询。
4. 设置是否启用
- 用户可以设置新质控项目是否立即启用,这决定了该项目在当前系统中的活动状态。
5. 保存时更新操作人、操作时间
- 当用户点击保存时,系统除了保存质控项目的所有信息外,还会自动记录操作人和操作时间,以便后续追踪和审计。
注意需求细节:注意控制SQL注入风险
1.2.3 修改
1. 点击操作区中的“编辑”触发
- 用户可以在查询结果的操作区中点击“编辑”来修改选定的质控项目。
2. 设置查询语句、类型代码、类别代码、描述等
- 在编辑界面中,用户可以修改质控项目的各项信息,与新增界面类似,但需要确保修改后的信息仍然保持准确性和完整性。
3. 设置是否启用
- 用户也可以在编辑过程中更改质控项目的启用状态。
4. 保存时更新操作人、操作时间
- 修改完成后,点击保存将更新质控项目的所有信息,并同时记录操作人和操作时间。
注意需求细节:注意控制SQL注入风险
1.2.4 删除
1. 点击显示详细页面或者编辑页面中的删除后触发
- 用户可以在显示详细页面或编辑页面中点击“删除”来移除选定的质控项目。
2. 质控类别为“经案系统要求”的规则不能删除
- 系统会检查质控项目的类别,如果类别为“经案系统要求”,则该项目不能被删除,以确保系统关键质控规则的完整性。
3. 删除之前应有确认提示
- 在执行删除操作之前,系统会弹出一个确认提示框,要求用户再次确认是否真的要删除该项目,以防止误操作导致的数据丢失。
2. 质控管理
2.1 界面设计
2.2 功能设计
2.2.1 结果导出
将查询结果导出Excel
- 功能描述:用户可以将查询到的质控结果数据导出为Excel文件,以便于数据的进一步分析、存档或共享。
- 输入:用户选择导出的查询结果数据。
- 输出:生成一个包含所选查询结果数据的Excel文件。
- 需求细节:
- 提供“导出”或类似功能的按钮,用户点击后触发导出操作。
- 导出的Excel文件应包含查询结果的所有字段,并保持数据的完整性和格式的正确性。
- 在导出过程中,应提供进度提示或反馈,以便用户了解导出进度。
- 导出完成后,应提供下载链接或自动下载功能,方便用户获取导出的Excel文件。
2.2.2 生成报表
弹出质控统计页面
- 功能描述:用户可以生成质控统计报表,以便对质控数据进行汇总和分析。
- 输入:用户触发生成报表的操作。
- 输出:弹出一个质控统计页面,展示质控数据的统计信息。
- 需求细节:
- 提供“生成报表”或类似功能的按钮或链接,用户点击后触发统计页面的弹出。
- 质控统计页面应包含质控数据的汇总信息,如图表、统计数据等。
- 统计信息应根据查询条件进行筛选和计算,确保数据的准确性和实时性。
- 提供报表的导出功能,如PDF、图片等格式,以便用户保存或分享统计结果。
2.2.3 查看明细
弹出质控明细页面
- 功能描述:用户可以查看质控项目的详细明细,以便深入了解每个质控项目的具体情况。
- 输入:用户选择查看明细的操作。
- 输出:弹出一个质控明细页面,展示选定质控项目的详细信息。
- 需求细节:
- 在查询结果或相关页面上提供“查看明细”或类似功能的按钮或链接。
- 用户点击后,应弹出一个新的页面或窗口,展示选定质控项目的所有相关信息和明细数据。
- 明细页面应包含质控类型、质控类别、描述、表名、表名的前台显示字段及中文名称、表中文显示名等详细信息。
- 提供打印或导出功能,方便用户保存或分享质控明细信息。
3. 质控统计页面
3.1 界面设计
3.2 数据表设计
- 质控结果表:T_Cas_DataAudit_Result
字段名 | 说明 | 数据类型 | 主键 | 外键 | 非空 |
---|---|---|---|---|---|
ResultID | 质控结果ID,主键 | int | TRUE | TRUE | |
UNITID | 单位编号 | VARCHAR(500) | TRUE | ||
AuditID | 规则编号 | int | TRUE | ||
AuditContent | 质控规则 | VARCHAR(500) | TRUE | ||
ErrRow | 错误记录数 | int | TRUE | ||
AuditTime | 质控检查时间 | DATE | TRUE |
- 质控规则调用语句参考
DECLARE @s NVARCHAR(max)
SELECT @s=ISNULL(@s+',','')+QUOTENAME(unitid) FROM t_Cas_DataAudit_Result GROUP BY unitid
set @s='select AuditContent [质控规则],'+@s+',AuditTime [发现时间]
from
(select Auditcontent,Unitid,ErrRow,AuditTime from t_Cas_DataAudit_Result where ……) a
pivot
(max([ErrRow]) for [UnitID] in('+@s+'))b '
exec (@s)
核心逻辑是:从质控规则表中取出规则相应的检查SQL语句,并执行,最后将执行结果以XML格式存到结果表中。
3.3 功能设计
- (参见界面设计图),在上面界面设计中的条件支持下拉选择,包括多选
- 结果支持导出到Excel
4. 质控明细页面
4.1 界面设计
(图略)
- 点击质控管理的错误数字时弹出方式显示
- 点击质控统计页面中的数字时弹出方式显示
4.2 数据表设计
- 质控结果明细表:T_Cas_DataAudit_DetailResult
字段名 | 说明 | 数据类型 | 主键 | 外键 | 非空 |
---|---|---|---|---|---|
DetailResultID | 主键 | int | TRUE | TRUE | |
ResultID | 质控结果ID | int | TRUE | TRUE | |
ErrData | 错误数据记录(xml格式的文本,由于错误数据的字段名、字段数不能统一,因此采用xml格式存储,前台直接用Gridview绑定该XML即可显示) | VARCHAR(2000) | TRUE |
注:ErrData实例:
<质控检查明细>
<Row>
<Auditcontent>XX人表 XX人姓名为空</Auditcontent>
< XX单位1>3</ XX单位1>
< XX单位2>2</ XX单位2>
</Row>
<Row>
<Auditcontent>xx登记表 姓名为空</Auditcontent>
< XX单位3>4</ XX单位3>
</Row>
<Row>
<Auditcontent>xx表 是否变造为空</Auditcontent>
< XX单位3>1</ XX单位3>
</Row>
</质控检查明细>
4.3 功能设计
(略)
5. 质控总览
5.1 界面设计
5.1.1 数据采集情况与质控规则
5.1.2 本次检查情况
5.1.3 各系统及单位情况
5.1.4 数据质量趋势
5.2 功能点
结合5.1界面设计的原型图,系统功能如下:
- 点击数据质控节点时框架内显示
- 注:上图中质控“最近五次检查情况”的X轴显示的应为批次号
- 违反质控规则构成分析取得本批次检查结果中问题原因排名头5位的列出,剩余原因统一归为其他类共同构成上面的饼图
- 先取得结果库中最大的批次号,以此查询检查开始时间、完成时间,计算耗时、检查出的总记录数
- 系统后台检查时,同一次检查,批次号一致。
- 上图中蓝色、红色数字均可点击,点击后框架内显示相应页面、数据
5.3 数据表设计
- 错误记录表:T_Cas_JobErrorMsg
Name | Comment | Data Type | Primary | Foreign Key | Mandatory |
---|---|---|---|---|---|
ErrMsgID | 错误记录编号 | uniqueidentifier | TRUE | FALSE | TRUE |
LogID | 作业日志编号 | uniqueidentifier | FALSE | TRUE | FALSE |
BatchID | 批次号 | char(14) | FALSE | FALSE | TRUE |
ErrorNo | SQL错误代码 | varchar(30) | FALSE | FALSE | TRUE |
ErrorMsg | 错误描述 | nvarchar(100) | FALSE | FALSE | TRUE |
ErrorSQL | 发生错误的脚本 | nvarchar(500) | FALSE | FALSE | TRUE |
ErrTime | 发生错误的时间 | datetime | FALSE | FALSE | TRUE |
ErrType | 错误类别[00 数据抽取错误;01 数据检查质控错误] | char(2) | FALSE | FALSE | TRUE |
CheckOpID | 检查人编号 | int | FALSE | FALSE | FALSE |
CheckDT | 检查日期 | datetime | FALSE | FALSE | FALSE |
- 执行日志表:T_Cas_JobLog
Name | Comment | Data Type | Primary | Foreign Key | Mandatory |
---|---|---|---|---|---|
LogID | 作业日志编号 | uniqueidentifier | TRUE | FALSE | TRUE |
BatchID | 批次号 | char(14) | FALSE | FALSE | TRUE |
BeginDT | 开始执行时间 | datetime | FALSE | FALSE | TRUE |
EndDT | 执行结束时间 | datetime | FALSE | FALSE | TRUE |
ErrorNum | 发生错误次数 | int | FALSE | FALSE | TRUE |
TotalNum | 总影响行数 | int | FALSE | FALSE | TRUE |
JobType | 作业类型[00 数据抽取错误;01 数据检查质控错误] | char(2) | FALSE | FALSE | TRUE |
6. 数据错误列表
6.1 界面设计
6.2 功能设计
如6.1 中界面设计所示,具体功能描述略。
注意实现需求细节:未读的为红色显示,或以醒目图标展示。