本次实验应用助睿数智平台

  • 平台全称:**助睿数智(Uniplore)**一站式数据科学实验平台
  • 平台定位:覆盖数据接入、ETL处理、机器学习建模到可视化分析的全链路Agentic零代码数据智能。
  • 产品官网:https://www.uniplore.com/ 实验平台地址:http://lab.guilan.cn/

一、实验背景

1.1 实验目的

基于「数智教育」大赛数据集,我设计并实现了一个面向学生多维度考勤统计的“助睿”ETL转换流。该方案覆盖数据接入、关联、衍生、聚合、落地全流程,有效解决了校园考勤人工统计效率低、口径不统一的问题。同时,结合实际数据特征优化了空值处理逻辑,确保转换流稳定运行,输出精准的多维度考勤结果,为校园考勤管理提供可靠的数据支撑。

1.2 实验环境

  • 工具:助睿数智(Uniplore)数据集成平台(ETL)、MySQL
  • 数据源:数智教育大赛数据集(7 张核心业务表)
  • 实验设备
  • CPU:13th Gen Intel® Core™ i5-13500H (2.60 GHz)
  • GPU:Intel® Iris® Xe Graphics (128 MB)

1.3 实验范围

本次实验完成了助睿ETL转换流的全流程配置,涵盖多表接入、多表关联、考勤行为标签衍生、多维度聚合统计及结果落地入库。重点验证了数据关联的精准性、统计指标的准确性以及指标口径的一致性。同时,结合实验数据实际情况优化配置,确保转换流顺利运行,为校园考勤管理提供可靠的数据输出。

二、转换流整体设计

2.1 功能用途

本转换流替代传统人工Excel统计,实现从原始打卡明细到标准化考勤台账的闭环处理,批量输出多维度统计指标。一方面固化统计口径、提升处理效率、沉淀可追溯的考勤台账,为校园考勤管理提供数据支撑;另一方面具备良好的可扩展性,支持按住校、年级、校区等维度灵活扩展,新增考勤类型时无需修改转换流,充分适配校园考勤管理的核心需求。

2.2 核心逻辑

接入三大数据源 → 多表关联 → 标记考勤行为 → 计算核心指标 → 关联基础属性 → 结果入库,实现全流程自动化。该流程通过助睿ETL平台可视化界面完成配置。

数据源表 核心作用 关键字段
考勤主表(3_kaoqin) 存储学生每日原始打卡记录、考勤行为明细 学生ID、班级ID、学期(qj_term)、打卡时间(DataDateTime)、考勤类型ID(ControllerID)、考勤描述(controler_name)
考勤类型码表(4_kaoqintype) 标准化考勤事件名称,区分正常与异常考勤类型 考勤类型ID(controller_id)、考勤事件名称(control_task_name)
学生信息表(2_student_info) 提供学生基础属性,支撑多维度学生画像构建 学生ID(bf_StudentID)、班级ID(cla_id)、学生姓名(bf_Name)、性别(bf_sex)、出生日期(bf_BornDate)、政治面貌(bf_policy)、是否住校(bf_zhusu)

三、数据与标签梳理

根据转换流的核心逻辑,需对数据与标签进行系统梳理,明确数据来源、标签维度及计算口径,为后续ETL转换流配置奠定基础。

3.1 源数据说明

本次转换流处理的数据来源于“数智教育”大赛数据集。原始数据集共包含7张核心业务表,具体如下:

序号 数据表 说明
1 1_teacher.csv 教师信息
2 2_student_info.csv 学生信息
3 3_kaoqin.csv 考勤主表
4 4_kaoqintype.csv 考勤类型码表
5 5_chengji.csv 成绩信息
6 6_exam_type.csv 考试类型
7 7_consumption.csv 消费信息

本次实验聚焦考勤主题。分析以上7张数据表,可以发现与考勤行为直接相关且能支撑多维度分析的表为以下3张:

  • 3_kaoqin.csv:考勤主表,作为核心事实表,记录每一次学生的考勤行为明细
  • 4_kaoqintype.csv:考勤类型码表,提供考勤行为的标准化名称,是行为标签生成的维度表
  • 2_student_info.csv:学生信息表,提供学生基础属性(如住校、性别等),支撑维度拆分的属性表

这三张表共同形成了“事实表 + 维度表 + 属性表”的完整星型模型结构,各表核心作用及关键字段如下:

数据源表 核心作用 关键字段
考勤主表(3_kaoqin) 存储学生每日原始打卡记录、考勤行为明细 学生ID、班级ID、学期(qj_term)、打卡时间(DataDateTime)、考勤类型ID(ControllerID)、考勤描述(controler_name)
考勤类型码表(4_kaoqintype) 标准化考勤事件名称,区分正常与异常考勤类型 考勤类型ID(controller_id)、考勤事件名称(control_task_name)
学生信息表(2_student_info) 提供学生基础属性,支撑多维度学生画像构建 学生ID(bf_StudentID)、班级ID(cla_id)、学生姓名(bf_Name)、性别(bf_sex)、出生日期(bf_BornDate)、政治面貌(bf_policy)、是否住校(bf_zhusu)

3.2 标签字段说明

根据学生考勤主题的分析需求,可构建三大类标签:学生基础属性标签学生画像维度标签考勤行为指标标签

3.2.1 学生基础属性标签
标签字段 数据来源表 选表依据 示例用途
学生ID 2_student_info 主键,唯一标识学生身份,与考勤主表关联的核心键值 关联学生身份与考勤记录,确保每次考勤行为可追溯到具体学生
班级ID 2_student_info 标识学生所属班级,是班级层面分析的基本单元 按班级统计平均迟到次数,识别考勤异常班级
学生姓名 2_student_info 身份标识字段,便于结果表的人工验证与定位 结果表可读性保障,支持按学生维度溯源考勤明细
性别 2_student_info 区分男女生考勤行为差异的基础属性 对比男生与女生的迟到频次与早退规律
出生日期 2_student_info 反映年龄结构,支持分年龄段分析 分析不同年龄段学生的请假如趋势差异
政治面貌 2_student_info 体现不同群体身份特征的行为差异 考察不同政治面貌群体的考勤行为特点

选表依据:以上字段均为学生的基础身份信息,主要从学生信息表(2_student_info)中获取。考勤主表(3_kaoqin)中也包含部分学生信息字段,可同时提取作为交叉验证。这些基础属性是后续分维度统计的核心依据。

示例用途:可按性别维度分析男女生在迟到、早退等异常考勤行为上的差异;也可按政治面貌维度,观察不同学生群体的考勤习惯与纪律意识。

3.2.2 学生画像维度标签
标签字段 数据来源表 选表依据 示例用途
年级 2_student_info(班级名称衍生) 按班级名称提取年级信息,支撑年级层级的考勤对比 区分高一、高二、高三年级,识别不同年级学生的考勤规律差异
住校状态 2_student_info(是否住校字段) 区分住校生与走读生的生活模式差异 分析走读生是否因通勤距离更易迟到,校服穿戴是否因家庭管理而存在不同
校区类型 2_student_info(班级名称衍生) 基于数据说明中2017-2018年新校区启用的背景,增设新旧校区对比维度,便于观察不同管理规则下的考勤行为差异 对比新旧校区的校服穿戴规范执行情况,分析新老校区在考勤纪律要求上的落实效果

选表依据:这三个标签字段属于衍生维度,原始数据中没有直接提供,需根据班级名称和住校字段进行二次加工。

  • 年级维度:通过从班级名称(如“高一(1)班”)中提取年级信息,按年级进行考勤管理和对比分析。
  • 住校维度:基于原始住校字段,区分住校生与走读生,二者的作息时间与通勤条件差异明显,考勤行为模式也存在区别。
  • 校区类型维度:源于数据说明中的背景信息——“2017-2018年新校区启用”,新旧校区的管理制度和校风建设力度可能存在差异,增设该维度有助于管理层面的横向对比。

示例用途:可按住校状态分析走读生相较于住校生是否更容易迟到;可按校区类型对比新旧校区在校服穿戴规范上的执行情况,为管理层优化管理措施提供数据反馈。

3.2.3 考勤行为统计标签
标签字段 数据来源表 选表依据 示例用途
迟到次数 3_kaoqin + 4_kaoqintype 基于考勤事件关联码表,识别迟到行为并计数 精准定位迟到频次高的学生,便于班主任针对性提醒
早退次数 3_kaoqin + 4_kaoqintype 基于考勤事件关联码表,识别早退行为并计数 洞察早退行为的发生时间规律,分析是否存在群体性早退倾向
请假次数 3_kaoqin + 4_kaoqintype 基于考勤事件识别请假行为(区分正常缺勤与异常缺勤) 区分病假、事假分布,避免将正常缺勤误判为违规缺勤
校服违规次数 3_kaoqin + 4_kaoqintype 识别“校服[移动考勤]”类型记录,仅统计未穿校服的情况 评估校服管理规定的执行效果,分析违规高发时段与群体

选表依据:这四类异常考勤行为是学校日常学生管理的核心关注点。

  • 迟到和早退:反映学生的时间管理能力和纪律意识,也是评价学生守时习惯的核心指标。
  • 请假次数:用于区分正常缺勤与异常缺勤,避免人工统计时将请假错误归类为迟到或早退。
  • 校服穿戴:是学校行为规范体系中的重要考核项。根据数据说明中的描述,“校服[移动考勤]”特指未穿校服的情况,因此该标签仅统计校服违规记录,不统计正常穿校服的考勤。

示例用途:可结合学生的迟到次数、请假频次及校服违规记录,综合判断学生的考勤风险等级,辅助学校建立精细化的考勤预警与干预机制。

3.3 标签处理口径

所有标签口径需统一固化,确保统计结果准确可比。核心统计口径设计如下:

标签类型 处理口径 设计理由
基础属性字段 学生身份、班级归属等按原始数据直接映射 以原始数据为准,保持数据的真实性,仅进行必要的格式标准化处理
衍生维度字段 年级:按班级名称前缀提取(如“高一”);住校状态:原始字段映射为“住校/走读”;校区类型:按班级所属校区划分新旧校区 通过二次加工补齐分析维度,使标签表能够支撑更多维度的对比分析
考勤行为指标 迟到/早退:排除请假记录,仅统计违规打卡行为;请假次数:考勤事件名称中包含“请假”关键词即计入请假;校服违规:考勤事件名称中包含“校服”关键词即计为违规 避免将请假等正常缺勤误计入迟到或早退;覆盖事假、病假等所有请假类型;精准识别未穿校服的违规记录

统计口径设计要点说明:

  1. 排除请假记录:请假属于正常缺勤,不应计入迟到或早退的违规统计,避免重复计数和误判,保证考勤统计的公平性与准确性。

  2. 请假全覆盖:只要考勤事件名称中包含“请假”关键词,无论事假、病假或其他请假类型,均计入请假次数,确保统计无遗漏。

  3. 校服违规唯一识别:根据数据说明中的描述,考勤类型中的“校服[移动考勤]”明确指未穿校服,因此包含“校服”关键词的记录即为违规。此处不统计正常穿校服的考勤打卡记录。

以上口径一经固化,在后续ETL转换流配置中严格执行,确保统计结果在不同时间段、不同数据批次之间保持一致的度量标准。

四、实验步骤

4.1 创建实验项目

点击“新建项目”,输入项目名称“学生用户画像标签构建”,点击“确定”。

在这里插入图片描述

创建成功后即可在数据集成页面看到新创建的项目。

在这里插入图片描述

4.2 数据资源获取

为方便后续的数据使用,我们可以将原始数据导入我们的团队私有数据库。

4.2.1 获取实验数据集

首先获取本次的实验数据集:点击“文件库”,右键根目录,点击“新建目录”并命名为“数智教育数据集”,点击“确定”。

在这里插入图片描述
接下来导入公共空间的数据资源到这个目录下。

点击公共空间

在这里插入图片描述

点击“数据资源”

在这里插入图片描述

点击“3_kaoqin.csv”卡片右上角的“更多”,并点击“导出”

在这里插入图片描述

在弹出的窗口中选择导出到刚刚新创建的目录“数智教育数据集”下,点击“确定”。

1920×945 84 KB

以同样的方式导出数据表 4_kaoqintype.csv 和 2_student_info.csv。

“数智教育数据集”中最终包含三个csv文件。

在这里插入图片描述

4.2.2 建立数据源连接

在元数据tab页,关系数据库右键打开菜单,选择“新建数据源”
在这里插入图片描述

弹出新建数据库连接窗口,连接名称为“团队私有数据库”,连接类型选择“MySQL”,用户名和密码自行填写。服务器主机名填写“rm-2vc3qok06bag39a5n.mysql.cn-chengdu.rds.aliyuncs.com”,端口号为3306,数据库名为平台分发的数据库名称,驱动类型选择“MySQL 8+”,

在这里插入图片描述

填写完毕后,点击“测试”按钮验证填写信息是否正确,如果填写无误,会返回“数据库连接成功”

在这里插入图片描述
最后,点击“添加”增加一个数据库连接。
在这里插入图片描述

4.2.3 数据导入团队私有数据库
4.2.3.1 原始考勤记录表数据导入

(1)创建原始_学生考勤表

新建转换工作流,并命名为“创建原始_学生考勤表”。
在这里插入图片描述

在该工作流中拖拽“执行一个SQL脚本”组件,通过执行SQL脚本来创建一个标签表。

在这里插入图片描述

数据库连接选择“团队私有数据库”,在组件中填写SQL脚本。

在这里插入图片描述

SQL脚本如下:

CREATE TABLE IF NOT EXISTS  `raw_attendance` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `attendance_id` varchar(64) DEFAULT NULL COMMENT '考勤ID',
  `learn_term` varchar(30) DEFAULT NULL COMMENT '学期',
  `data_datetime` varchar(50) DEFAULT NULL COMMENT '时间和日期',
  `attendance_type_id` varchar(64) DEFAULT NULL COMMENT '考勤类型ID',
  `attendance_name` varchar(100) DEFAULT NULL COMMENT '考勤名称',
  `attendance_task_order_id` varchar(64) DEFAULT NULL COMMENT '考勤事件ID',
  `stu_id` varchar(64) DEFAULT NULL COMMENT '学生ID',
  `stu_name` varchar(100) DEFAULT NULL COMMENT '学生姓名',
  `cla_name` varchar(100) DEFAULT NULL COMMENT '班级名',
  `cla_id` varchar(64) DEFAULT NULL COMMENT '班级ID',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '入库时间',
  PRIMARY KEY (`id`),
  KEY `idx_student_id` (`stu_id`),
  KEY `idx_term` (`learn_term`)
) COMMENT='原始_学生考勤表';

其他参数无需勾选,点击“确认”,并启动转换流。

在这里插入图片描述
(2)导入原始考勤数据

新建转换工作流,并命名为“导入原始考勤数据”,在该工作流中拖拽一个“CSV文件输入”组件到画布。

在这里插入图片描述
双击CSV文件输入组件,在步骤名称中输入“考勤记录”。

在这里插入图片描述

点击文件名后的“浏览文件”按钮,在弹出的窗口中选择“3_kaoqin.csv”,点击“确定”。
在这里插入图片描述

列分隔符和封闭符使用默认参数,编码选择“UTF-8”。

在这里插入图片描述

下滑在字段表格中空白处右键点击“获取字段”

在这里插入图片描述

字段获取成功后点击“确认”

在这里插入图片描述

接下来拖拽一个“表输出”组件到画布,并创建“考勤记录”CSV文件输入组件到“表输出”组件的连线,连线类型选择“主输出步骤”,工作流如图所示。

在这里插入图片描述

双击“表输出”组件,基本配置中,数据库连接选择“团队私有数据库”,目标表输入我们使用SQL组件创建的“raw_attendance”,具体配置如下:

在这里插入图片描述

点击“数据库字段”,在空白处右键“获取字段”

在这里插入图片描述

将表字段修改为建表语句中对应的字段,点击“确认”
在这里插入图片描述

完成后运行转换流,运行过程会定时刷新组件状态,并画布下面显示执行日志。

在这里插入图片描述

4.2.3.2 原始考勤类型表数据导入

参照 4.2.3.1 小节的实验操作,将原始考勤类型表“4_kaoqintype.csv”数据导入到团队私有数据库。

在这里插入图片描述

其中建表SQL为:

CREATE TABLE IF NOT EXISTS `raw_attendance_type` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `attendance_type_id` varchar(64) NOT NULL COMMENT '考勤类型id',
  `attendance_type_name` varchar(100) DEFAULT NULL COMMENT '考勤类型名称',
  `attendance_task_order_id` varchar(64) DEFAULT NULL COMMENT '考勤事件id',
  `attendance_task_name` varchar(100) DEFAULT NULL COMMENT '考勤事件名',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '入库时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_attendance_type_id` (`attendance_task_order_id`)
)COMMENT='原始_考勤类型表';

新建“导入原始考勤类型数据”工作流,将csv文件中的数据导入SQL表,工作流结构如下。

在这里插入图片描述

“CSV文件输入”组件配置如下,文件名选择“4_kaoqintype.csv”,分隔符为“插入制表符(TAB)”、编码为“GB2312”。

在这里插入图片描述

配置完成后获取数据库字段并点击“确认”。
表输出组件的配置如下。

在这里插入图片描述
在这里插入图片描述

配置完成后执行转换流,运行过程会定时刷新组件状态,并画布下面显示执行日志

4.2.3.2 原始学生基本信息表数据导入

参照“4.2.3.1 ”小节的实验操作,将原始学习基本信息表“2_student_info.csv”数据导入到团队私有数据库。

其中的建表SQL为:

CREATE TABLE IF NOT EXISTS `raw_student_info` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增ID',
  `stu_id` varchar(64) NOT NULL COMMENT '学生ID',
  `stu_name` varchar(100) DEFAULT NULL COMMENT '学生姓名',
  `stu_sex` varchar(10) DEFAULT NULL COMMENT '性别',
  `stu_nation` varchar(50) DEFAULT NULL COMMENT '民族',
  `born_date` varchar(10) DEFAULT NULL COMMENT '出生日期(年)',
  `cla_name` varchar(100) DEFAULT NULL COMMENT '班级名',
  `native_place` varchar(200) DEFAULT NULL COMMENT '家庭住址',
  `residence_type` varchar(50) DEFAULT NULL COMMENT '家庭类型',
  `policy` varchar(50) DEFAULT NULL COMMENT '政治面貌',
  `cla_id` varchar(64) DEFAULT NULL COMMENT '班级ID',
  `cla_term` varchar(30) DEFAULT NULL COMMENT '班级学期',
  `live_on_campus` varchar(10) DEFAULT NULL COMMENT '是否住校',
  `leave_school` varchar(10) DEFAULT NULL COMMENT '是否退学',
  `dormitory_no` varchar(50) DEFAULT NULL COMMENT '宿舍号',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '入库时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_student_id` (`stu_id`),
  KEY `idx_cla_id` (`cla_id`)
) COMMENT='原始_学生信息表';

执行创建原始_学生信息表转换流:

在这里插入图片描述

使用“CSV文件输出”组件输入“2_student_info.csv”数据,编码使用“UTF-8”。

1920×945 84.8 KB

获取字段时,需要将“bf_leaveSchool”的字段类型修改为“String”

在这里插入图片描述
bf_zhusu、bf_qinshihao 这2个字段是Integer,为避免出现小数,需要使用“字段选择”组件来固化并规范

拖拽“字段选择”组件到画布中,创建“CSV文件输入”组件到“字段选择”组件的连线,连接线类型选择“主输出步骤”

在这里插入图片描述

双击“字段选择”组件,在配置窗口中,点击“元数据”,并在空白处插入2行,将“bf_zhusu”、“bf_qinshihao”字段的元数据设置如下:

597×416 19.1 KB
599×421 18.2 KB
使用“表输出”组件将“2_student_info.csv”数据输出到团队私有数据库的“raw_student_info”中

在这里插入图片描述
在这里插入图片描述

执行转换流:

在这里插入图片描述

4.2.4 创建学生考勤主题标签表

新建转换工作流,并命名为“创建学生考勤主题标签表”,在该工作流中拖拽“执行一个SQL脚本”组件,通过执行SQL脚本来创建一个标签表。

SQL脚本如下:

CREATE TABLE IF NOT EXISTS student_attendance_stats (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '自增主键',
    student_id INT NOT NULL COMMENT '学生ID', 
    student_name VARCHAR(50) NOT NULL COMMENT '学生姓名',
    class_id INT NOT NULL COMMENT '班级ID',
    class_name VARCHAR(50) NOT NULL COMMENT '班级名称',
    grade VARCHAR(10) NOT NULL COMMENT '年级',
    gender VARCHAR(10) NOT NULL COMMENT '性别',
    birth_date  VARCHAR(10) NOT NULL COMMENT '出生日期',
    political_status VARCHAR(20) NOT NULL COMMENT '政治面貌',
    is_boarder VARCHAR(10) NOT NULL COMMENT '是否住校',
    campus_type VARCHAR(10) NOT NULL COMMENT '校区类型',
    late_count INT NOT NULL DEFAULT 0 COMMENT '迟到次数',
    early_leave_count INT NOT NULL DEFAULT 0 COMMENT '早退次数',
    leave_count INT NOT NULL DEFAULT 0 COMMENT '请假次数',
    uniform_violate_count INT NOT NULL DEFAULT 0 COMMENT '没穿校服次数',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '统计入库时间',
    INDEX idx_student (student_id),
    INDEX idx_class (class_id),
    INDEX idx_grade (grade)
)  ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学生考勤主题标签表';

其他参数使用默认选项,完成后组件配置如下:

在这里插入图片描述

完成后运行转换流,运行过程会定时刷新组件状态,并画布下面显示执行日志。

在这里插入图片描述

4.3 学生考勤主题标签构建

4.3.1 数据接入

获取考勤记录、考勤类型数据、学生信息数据
首先,我们需要获取考勤记录、考勤类型数据、学生信息数据。考勤记录表记录了每位学生每天的考勤行为,考勤类型表定义了每种考勤行为对应的类型名称(如正常考勤、没穿校服等),学生信息表提供了学生是否住校的核心属性。只有将这三份数据分别接入并后续关联起来,才能完整判断学生的每次考勤是正常还是违纪,同时支撑住校相关维度的统计。

新建转换流“学生考勤主题标签”,点击“确定”

在这里插入图片描述

创建成功后进入转换流设计页面。
点击“组件库”,搜索“表输入”,拖拽3个表输入组件至画布中。

在这里插入图片描述

双击第一个表输入组件,在配置窗口中,步骤名称修改为“考勤记录”,数据库连接选择“团队私有数据库”,并点击“获取SQL查询语句”

704×630 25.6 KB

在数据库中选择“raw_attendance”原始_学生考勤表。

在这里插入图片描述

系统提示弹窗中点击“确认”,获取“raw_attendance”考勤记录表的所有字段。获取SQL查询语句后,点击“确认”

在这里插入图片描述

同样的,参考以上步骤,将“表输入 1”和“表输入 2”组件分别命名为“考勤类型”和“学生信息”,分别获取“raw_attendance_type”考原始_考勤类型表和“raw_student_info”原始_学生信息表所有字段数据。

在这里插入图片描述
在这里插入图片描述

4.3.2 数据关联:关联考勤记录+考勤类型

使用记录集连接组件,将考勤主表与考勤类型码表关联——因为考勤记录表只有考勤类型ID(attendance_type_id)和考勤任务顺序ID(control_task_order_id ),缺少具体的考勤行为名称,而通过记录集连接组件进行连接,即可为每条考勤记录补充“正常考勤”“没穿校服”“迟到”“请假”等具体行为信息,确保后续能准确识别各类考勤行为。具体操作如下:

在组件库搜索“记录集连接”组件,并将组件拖拽至画布中,并创建“考勤记录”CSV文件输入组件到记录集连接组件的连接线。

1920×945 56.8 KB
为避免因为排序问题造成连接结果出错。添加一个排序记录组件到转换流的“考勤记录”与“记录集连接”之间。数据传输模式选择“随机分发”。

在这里插入图片描述
建立好的数据流结构如下所示:
在这里插入图片描述
双击“排序记录”组件,通过“获取字段”功能获取字段列表,然后删除多余字段,只保留“attendance_type_id”、“attendance_task_order_id”字段。因为下一步连接是使用这两个字段进行连接,所以采用这两个字段对记录进行排序。最后设置步骤名称为“按照考勤类型和考勤任务类型排序”。
在这里插入图片描述

创建“考勤类型”表输入组件到记录集连接组件的连接线。由于“考勤类型”组件的记录默认是按“attendance_type_id”、“attendance_task_order_id”这两个字段升序记录的,所以无需再次排序。

在这里插入图片描述

需要通过记录集连接组件来配置“考勤记录”和“考勤类型”两个表的关联关系。

双击记录集连接组件,第一个Transform选择“按照考勤类型和考勤任务类型排序”,第二个Transform选择“考勤类型”,连接类型选择LEFT OUTER

分别获取两个Transform的连接字段,2个Transform字段中**仅保留“attendance_type_id”、“attendance_task_order_id”**字段,这样做表示使用这2个字段进行记录连接。

配置好的“记录集连接”组件如图所示。

594×199 11.3 KB

4.3.3 行为标签衍生:统计学生异常考勤次数

通过Javascript脚本生成考勤行为二进制标记,为后续聚合统计提供支撑,确保标签判断精准。具体操作如下:

添加“JavaScript 代码”组件,对接“记录集连接”组件的输出,通过关键词匹配,生成二进制判断标签(1=是,0=否),用于后续指标聚合:

在这里插入图片描述

双击“JavaScript代码”组件,命名为“提取异常考勤记录”,在Script1中输入JavaScript脚本。

脚本代码如下:

// 初始化变量
var isLate = 0;
var isEarly = 0;
var isLeave = 0;
var isNoUniform = 0;

// 核心判断逻辑
if(attendance_type_name != null && attendance_task_name != null){

    // 迟到判断(排除请假)
    if((attendance_type_name.includes("迟到") || 
        attendance_type_name.includes("晚到") || 
        attendance_task_name.includes("迟到") || 
        attendance_task_name.includes("晚到")) && 
        !attendance_task_name.includes("请假")){
      isLate = 1;
    }

    // 早退判断(排除请假)
    if((attendance_type_name.includes("早退") || 
        attendance_task_name.includes("早退")) && 
        !attendance_task_name.includes("请假")){
      isEarly = 1;
    }

    // 校服违规:只要包含“校服”就标记违规
    if(attendance_type_name.includes("校服") || attendance_task_name.includes("校服")){
      isNoUniform = 1;
    }
}

// 请假判断
if(attendance_task_name != null){
    if(attendance_task_name.includes("请假")){
      isLeave = 1;
    }
}

使用“获取变量”获取输出字段,系统将自动解析脚本中变量定义代码,生成字段数据
在这里插入图片描述
点击“测试脚本”,确认标记字段(is_late_early、is_leave等)仅存在1和0两个值,标签判断准确(如迟到记录对应is_late_early=1,正常出勤对应is_compliant=1),无异常。
在这里插入图片描述
预览数据如下:

在这里插入图片描述

4.3.4 多维度分组聚合统计

实验核心:按两大统计维度聚合数据,将明细数据转化为统计指标,满足多层级考勤管理需求。具体操作如下:
在助睿ETL平台拖拽2个“分组”组件,分别对接“用户自定义Java表达式”组件的输出,按两大统计维度进行聚合,统一聚合指标,确保数据全覆盖:

添加“分组”组件,并建立连接线,连线选择“主输出步骤”,建立好的数据流结构如下:

在这里插入图片描述
双击“分组”组件,设置分组字段为“stu_id”、“stu_name”、“cla_id”、“cla_name”

在这里插入图片描述

设置聚合字段为“late_early_count”、“leave_count”、“no_uniform_count”、“compliant_count”、“total_attendance”

在这里插入图片描述

4.3.5 关联学生信息

基于上述结果,使用记录集连接组件,关联学生信息表——因为考勤记录表仅包含学生ID和班级ID,缺少学生是否住校的核心属性,通过按学生ID关联学生信息表,可补全该属性,支撑住校相关维度的统计。具体操作如下:

添加“排序记录”组件,并建立“学生信息”表输入组件到“排序记录”组件的连接线

在这里插入图片描述

双击“排序记录”组件,通过“获取字段”功能获取字段列表,然后删除多余字段,只保留“stu_id”字段。因为下一步连接是使用这个字段进行连接,所以采用这个字段对记录进行排序。最后设置步骤名称为“按照学生编号进行排序”

在这里插入图片描述

拖拽“记录集连接”组件至画布中,创建“按照学生编号进行排序”排序记录组件到“记录集连接 1”组件的连接线。

在这里插入图片描述

由于考勤记录数据不是按“学号”升序记录的,所以在进行记录关联前,也需要对数据进行排序。再次添加“排序记录”,并建立“记录集连接”组件到“排序记录”组件的连接线
在这里插入图片描述

双击“排序记录”组件,按下图进行配置,步骤名称设置为“考勤数据按学号排序”,排序字段为“stu_id”

在这里插入图片描述

创建“考勤数据按学号排序”记录排序组件到记录集连接 1组件的连线,关联学生信息和考勤记录信息

在这里插入图片描述

记录集连接 1组件的第一个Transform选择“考勤数据按学号排序”,第二个Transform选择“按照学生编号进行排序”,连接类型选择LEFT OUTER。

分别获取两个Transform的连接字段,均保留“stu_id”,连接类型选择LEFT OUTER,表示使用考勤记录的字段 stu_id与学生信息的字段 stu_id进行左外连接。

配置详情如下:

在这里插入图片描述

4.3.6 字段选择:移除冗余字段

经过多表关联和前期接入,数据中会包含大量与考勤统计无关的字段(如学生信息表中的非必要属性),需要对关联后的数据进行冗余字段移除,因为这些冗余字段不仅会增加数据处理的负担,还可能导致后续聚合、计算出现干扰,只有移除冗余字段,保留核心有用字段,才能提升处理效率,确保统计逻辑清晰。具体操作如下:

搜索“字段选择”,拖拽至画布中,创建“记录集连接 1”组件到字段选择组件的连接线。

在这里插入图片描述

双击字段选择组件,在配置弹窗中,步骤名称输入“移除冗余字段”,点击“移除”Tab标签,右键空白处并点击“获取字段”

在这里插入图片描述

在获取的字段中,删除以下字段,为后续时间维度拆解和行为标签衍生奠定基础:

学生 ID(stu_id)
学生姓名(stu_name)
班级 ID(cla_id)
班级名称(cla_name)
迟到次数(late_count);
早退次数(early_count);
请假次数(leave_count);
没穿校服次数(no_uniform_count)
性别(stu_sex)
出生日期(born_date)
政治面貌(policy)
是否住校(live_on_campus)

在这里插入图片描述

在字段选择组件鼠标右键弹出菜单,点击“显示输出字段”,查看输出字段是否正确

在这里插入图片描述
以下是输出示例:
在这里插入图片描述

4.3.7 空值处理

拖拽“替换NULL值”组件至画布,创建“移除冗余字段”字段选择组件到“替换NULL值”组件的连线,连线类型选择“主输出步骤”

在这里插入图片描述

编辑“替换NULL值”组件,勾选“选择字段”,在字段空白表格中右键。点击“插入”。

在这里插入图片描述

共插入四行数据,字段名称分别为“stu_sex”、“born_date”、“policy”、“live_on_campus”,空值均替换为“未知”。

在这里插入图片描述

在这里插入图片描述

4.3.8 学生基础属性标准化处理

经过多表关联与字段筛选后,原始数据中住校状态为编码值,且缺少年级、校区类型等画像分析必需字段,无法直接用于学生考勤标签输出与后续用户画像分析。因此需要对学生基础属性进行标准化映射、缺失字段衍生,统一数据格式、补齐分析维度,保证标签表规范可用。

4.3.8.1 住校状态映射

原始住校状态以数字形式存储,可读性差且存在空值,通过映射转换为规范文本并处理空值,使标签表更直观,同时满足住校/走读考勤对比分析的需求。

添加“值映射”组件,步骤名称改为“住校状态映射”,使用的字段名为“live_on_campus”,不匹配时的默认值为“否”。

496×488 16.4 KB

在下方字段值表格空白处右键,点击“插入”,双击插入的行,在源值中输入“0”,目标值输入“否”,代表将原数据中的“0”统一映射为“否”。

在这里插入图片描述

再插入一行,在源值中输入“1”,目标值输入“是”,并点击“确认”。

500×420 15.4 KB

4.3.8.2 从班级名提取年级

原始数据无独立年级字段,无法按年级做考勤统计与画像分群,通过从班级名称中提取年级信息,补齐年级维度,支撑年级层面的考勤分析。

拖拽“JavaScript代码”组件至画布中,步骤名称改为“从班级提取年级”,并输入以下代码:

var gra_name
if (cla_name == null){
  gra_name='未知'
}else if(cla_name.includes('高一')){
  gra_name='高一'
}else if (cla_name.includes('高二')){
  gra_name='高二'
}else if (cla_name.includes("高三")){
  gra_name='高三'
} else{
  gra_name='未知'
}

在这里插入图片描述

接下来需要设置“gra_name”字段类型,在配置窗口的下方空白表格处右键,点击“插入”

在这里插入图片描述
字段名称输入“gra_name”,类型为“String”,替换“字段名”或“重命名”值选择“否”,设置完成后点击“确认”
在这里插入图片描述

4.3.8.3 校区类型判定

原始数据无校区类型字段,不同校区管理口径与考勤规则存在差异,通过班级名称规则判定老校区/新校区,增加校区分析维度,使考勤标签更贴合校园实际管理场景。

参考“4.3.9.2 从班级名提取年级”步骤,添加“JavaScript代码”组件,“JavaScript代码”组件命名为“校区类型判定”,输入的代码如下:

var class_campus_type
if (cla_name == null){
  class_campus_type='未知'
}else if(cla_name.startsWith('白-') || cla_name.startsWith('东-')){
  class_campus_type='新校区'
}else if (cla_name != null && !isEmpty(cla_name)){
  class_campus_type='老校区'
} else{
  class_campus_type='未知'
}

字段名称“class_campus_type”,类型为“String”,替换“字段名”或“重命名”值选择“否”

在这里插入图片描述

4.3.9 结果入库

实验核心:将统计结果写入目标表,形成标准化台账,便于后续查询、分析和追溯。具体操作如下:

添加表输出组件,并创建“校区类型判定”“JavaScript代码组件到表输出组件的连线
在这里插入图片描述

双击表输出组件,选择“团队私有数据库”连接;勾选**“裁剪表”,这样表输出组件在插入数据前会清空原始表数据,避免重复插入;勾选“指定数据库字段”**,建立工作流字段与数据库表字段的映射关系。勾选后会激活“数据库字段”tab页,在数据库字段tab页,右键选择“获取字段”。
在这里插入图片描述

双击表字段中的字段名称,在下拉框中选择正确的对应字段。

在这里插入图片描述

4.3.10 执行工作流

执行转换流,点击工具栏中的“执行”按钮

在弹出执行配置窗口中,选择默认配置,然后点击“启动”按钮,启动工作流
在这里插入图片描述

查看日志,工作流执行后会打开日志页面,定期刷新工作流日志数据。

在这里插入图片描述
执行成功后在数据库中查看。
打开“元数据”tab页,在“团队私有数据库”连接上右键选择“加载元数据”。

在这里插入图片描述

然后进入数据探查页面,展开“团队私有数据库”。

在这里插入图片描述在这里插入图片描述

双击目标表“student_attendance_stats”,在右侧页面选择“查询”tab标签。

在这里插入图片描述

查看数据库表数据是否符合预期。

5 实验小结

本次实验基于「数智教育」大赛数据集,借助助睿数智(Uniplore)一站式数据科学实验平台,设计并实现了一个面向学生多维度考勤统计的ETL转换流,完成了从原始打卡数据到标准化考勤台账的全流程自动化处理。以下是本次实验的主要成果与经验总结。

5.1 核心成果

  1. 构建了“事实表 + 维度表 + 属性表”星型数据模型
    以考勤主表(3_kaoqin)为事实表,考勤类型码表(4_kaoqintype)为维度表,学生信息表(2_student_info)为属性表,三者通过学生ID、考勤类型ID等键值关联,形成清晰的数据架构,支撑多维度聚合分析。

  2. 固化了统一、可解释的考勤统计口径

    • 迟到/早退:仅统计异常打卡行为,排除请假记录,避免误判。
    • 请假次数:凡考勤事件名称包含“请假”关键词即计入,覆盖事假、病假等全部类型。
    • 校服违规:依据数据说明,包含“校服”关键词即视为未穿校服,不重复统计正常穿校服记录。
      上述口径在ETL转换流中以脚本和条件判断方式固化,确保了统计结果的一致性与可复现性。
  3. 实现了多维度的灵活聚合与扩展

    • 输出结果表 student_attendance_stats 同时包含学生基础属性(性别、政治面貌、出生日期)、画像维度(年级、住校状态、校区类型)以及考勤行为指标(迟到、早退、请假、校服违规次数)。
    • 支持按班级、年级、住校、校区类型等维度自由下钻分析,新增考勤类型或统计维度时无需修改转换流核心逻辑,仅需调整标签映射规则,具备良好的可扩展性。
  4. 验证了ETL全流程在助睿平台上的可行性

    • 通过表输入记录集连接排序记录JavaScript代码分组值映射替换NULL值表输出等组件的组合配置,完成了数据接入、关联、衍生、聚合、清洗、落地全步骤。
    • 针对原始数据中的空值问题,设计了合理的替换策略(如将缺失的性别、政治面貌等替换为“未知”),确保了转换流的稳定运行。

5.2 关键问题与解决方案

问题描述 解决方案
考勤记录表缺少考勤行为名称,仅有类型ID 通过记录集连接(LEFT OUTER JOIN)关联考勤类型码表,补充“迟到”“请假”“校服”等可读标签。
考勤类型ID组合键导致关联结果异常 在关联前对两张表均按 attendance_type_idattendance_task_order_id 进行排序,避免因记录顺序不一致造成连接错位。
原始数据中存在空值(如政治面貌、住校状态) 使用“替换NULL值”组件,将这些字段的空值统一替换为“未知”,提升结果表的完整性和可读性。
住校状态为0/1编码,不直观 通过“值映射”组件将0→“否”、1→“是”,并设置默认值为“否”。
缺少年级、校区类型等画像维度 通过JavaScript脚本从班级名称中提取年级(高一/高二/高三)和校区类型(新校区/老校区),补齐分析维度。
聚合时需要同时输出学生级和班级级统计 使用“分组”组件分别按学生ID和班级ID进行聚合,并关联学生信息表获得完整属性。

5.3 实验价值与意义

  • 替代人工Excel统计:转换流可批量处理万级考勤记录,输出结果稳定、可追溯,彻底解决了人工统计效率低下、口径不统一的问题。
  • 沉淀标准化考勤台账:结果表 student_attendance_stats 可直接服务于学校的考勤报表、学生画像分析、违纪预警等场景,为校园管理提供数据支撑。
  • 零代码/低门槛:全程通过助睿ETL平台的可视化组件完成配置,无需编写复杂的数据处理程序,降低了数据工程的技术门槛,也便于后续业务人员自行维护和扩展。
  • 平台能力验证:充分验证了助睿数智平台在数据集成、转换、清洗、聚合等方面的实用性和稳定性,为后续开展更复杂的校园数据智能分析(如学业成绩与考勤关联分析)奠定了基础。

5.4 改进方向

尽管本转换流已满足核心需求,但仍存在以下可优化之处:

  • 性能优化:当前处理万级数据时运行时间在可接受范围内,若扩展至十万级或百万级,可考虑增加并发执行或使用数据库端聚合代替部分分组组件。
  • 实时性提升:目前为批量离线处理,未来可结合助睿平台的实时同步能力,构建准实时考勤统计看板。
  • 更多维扩展:可进一步关联成绩表、消费表,分析考勤行为与学业表现、校园消费习惯的关联,为精准育人提供更丰富的标签。

5.5 总结

本次实验完整覆盖了ETL转换流的数据接入、关联、衍生、聚合、落地全流程,成功实现了学生多维度考勤统计的自动化与标准化。通过合理的模型设计、严谨的口径定义以及针对空值和编码问题的优化处理,确保了转换流的稳定运行和输出结果的准确性。实验不仅解决了校园考勤管理中的实际问题,也为后续基于助睿平台构建更复杂的数据智能应用积累了宝贵经验。


实验平台:助睿数智(Uniplore)一站式数据科学实验平台
产品官网:https://www.uniplore.com/
实验地址:http://lab.guilan.cn/

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐