1 实验概述

1.1 实验目标

本实验依托 "数智教育" 竞赛公开数据集,设计并实现面向学生考勤主题的标签化 ETL 数据转换流水线,系统掌握数据接入、跨表关联、特征衍生、聚合计算与结果落地的完整 ETL 工程化实施流程。针对校园传统考勤管理中人工统计效率低下、统计口径不统一、数据质量难以保障等痛点,通过标准化自动化的数据处理流程,输出精准的多维度考勤统计结果,为校园精细化考勤管理提供可靠的数据支撑。同时结合本次实验数据集的实际特征,优化空值处理与异常数据过滤逻辑,保障转换流的稳定运行与输出结果的准确性。

1.2 实验环境与资源

实验平台:采用助睿数智(Uniplore)AI 驱动一站式数据科学平台,该平台提供从数据接入、零代码 ETL 处理、机器学习建模到可视化分析的全链路功能,广泛应用于高校数据分析教学与企业级数据加工场景。实验在线平台地址:https://lab.guilian.cn/,产品官方网站:https://www.uniplore.com/

数据源:"数智教育" 大赛官方数据集(包含 7 张核心业务数据表)

实验设备:可正常访问互联网的计算机,具备数据库连接权限与助睿 ETL 平台访问权限

1.3 实验覆盖范围

本次实验完整覆盖助睿 ETL 转换流的全流程配置,包括多源数据接入、多表关联整合、考勤行为标签衍生、多维度聚合统计及结果落地入库。实验重点验证数据关联的精准性与统计指标的准确性,结合实验数据的实际特征优化配置参数,确保实验流程顺利完成并输出符合要求的考勤主题标签数据。

2  ETL 转换流整体架构设计

2.1 功能定位与业务价值

本 ETL 转换流旨在替代传统人工 Excel 统计模式,构建从原始打卡数据采集到标准化统计结果输出的全自动化闭环处理链路,支持批量生成多维度考勤分析指标。通过固化统一的统计口径,彻底解决人工统计中口径不一致、数据错误率高的问题,大幅提升考勤数据处理效率,沉淀标准化的考勤数据台账。转换流采用模块化设计,可灵活扩展新的考勤类型与统计维度,无需重构核心流程,能够快速适配校园考勤管理的动态需求。

2.2 核心处理逻辑

转换流采用 "多源数据接入→跨表关联整合→考勤行为标签化→多维度指标聚合→基础属性关联→结果落地存储" 的分层处理架构,全程通过助睿 ETL 平台的可视化拖拽界面完成配置与调试,实现全流程无代码化开发。该架构确保了数据处理过程的可追溯性与可维护性,便于后续根据业务需求进行调整与优化。

3 数据模型与标签体系设计

3.1 源数据模型分析

本次实验所使用的数据来源于 "数智教育" 大赛公开数据集,该数据集共包含 7 张核心业务数据表:教师信息表(1_teacher.csv)、学生基础信息表(2_student_info.csv)、考勤主表(3_kaoqin.csv)、考勤类型码表(4_kaoqintype.csv)、成绩信息表(5_chengji.csv)、考试类型码表(6_exam_type.csv)与消费信息表(7_consumption.csv)。

聚焦考勤主题分析需求,筛选出 3 张核心数据表构建星型分析模型:

1. 考勤主表(3_kaoqin.csv):作为事实表,记录学生每次考勤行为的原始明细数据,是整个分析的基础

2. 考勤类型码表(4_kaoqintype.csv):作为维度表,提供标准化的考勤事件名称定义,是生成行为标签的核心依据

3. 学生信息表(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

考勤主表 / 学生信息表

学生唯一标识,用于数据关联与去重

学生姓名

考勤主表 / 学生信息表

便于结果查阅与人工核对

班级 ID

考勤主表 / 学生信息表

班级唯一标识,用于班级维度统计

班级名称

考勤主表 / 学生信息表

用于提取年级与校区类型等衍生维度

性别

学生信息表

可按性别维度分析考勤行为差异

出生日期

学生信息表

可用于年龄维度分析,识别不同年龄段的考勤特点

政治面貌

学生信息表

可按政治面貌维度分析不同群体的考勤行为

3.2.2 学生画像维度标签

学生画像维度标签属于衍生特征,通过对原始数据进行二次加工生成,用于从不同维度对学生群体进行划分,支撑精细化分析与管理。

标签字段

衍生逻辑

设计依据

年级

从班级名称(cla_name)中提取关键词

学校管理通常按年级统计考勤情况,便于分层管理与对比分析

是否住校

映射学生信息表 bf_zhusu 字段(1→"是",0→"否",空值→"未知")

住校生与走读生的通勤方式与作息规律存在显著差异,有助于针对性分析不同群体的考勤行为特征

校区类型

从班级名称(cla_name)前缀判断

根据数据集说明,2017 年启用的新校区班级名称统一以 "白 -" 或 "东 -" 开头,其余归为老校区,可用于对比分析新旧校区的考勤执行效果

3.2.3 考勤行为统计标签

考勤行为统计标签聚焦学校日常学生管理的核心考核指标,直接反映学生的纪律意识与行为规范情况。

标签字段

设计依据

迟到次数

学生时间管理能力与纪律意识的核心衡量指标

早退次数

学生时间管理能力与纪律意识的核心衡量指标

请假次数

用于区分正常缺勤与异常缺勤,避免将正常请假误判为违纪

没穿校服次数

学校日常行为规范考核的重要组成部分

3.3 标签处理口径规范

为确保统计结果的准确性与可比性,所有标签的处理口径进行统一固化,具体规范如下:

3.3.1 基础属性字段处理口径

字段

处理方式

口径说明

学生 ID

直接读取

从考勤主表获取,保证与原始考勤记录的一致性

学生姓名

直接读取

从考勤主表获取

班级 ID

直接读取

从考勤主表获取

班级名称

直接读取

从考勤主表获取

性别

空值替换

从学生信息表获取,空值统一替换为 "未知"

出生日期

空值替换

从学生信息表获取,空值统一替换为 "未知"

政治面貌

空值替换

从学生信息表获取,空值统一替换为 "未知"

3.3.2 衍生维度字段处理口径

字段

处理方式

口径说明

年级

关键词匹配提取

班级名称包含 "高一"→"高一",包含 "高二"→"高二",包含 "高三"→"高三",其他情况→"未知"

是否住校

编码映射 + 空值替换

bf_zhusu=1→"是",bf_zhusu=0→"否",空值→"未知"

校区类型

前缀特征判断

班级名称以 "白 -" 或 "东 -" 开头→"新校区",其他→"老校区"

3.3.3 考勤行为指标统计口径

指标

统计逻辑

口径说明

迟到次数

COUNT (迟到 / 晚到 AND 非请假)

考勤事件名称包含 "迟到" 或 "晚到" 关键词,且不包含 "请假" 关键词的记录条数

早退次数

COUNT (早退 AND 非请假)

考勤事件名称包含 "早退" 关键词,且不包含 "请假" 关键词的记录条数

请假次数

COUNT (包含请假)

考勤事件名称包含 "请假" 关键词的所有记录总条数(含事假、病假等各类请假)

没穿校服次数

COUNT (包含校服)

考勤事件名称包含 "校服" 关键词的异常情况记录条数

统计口径设计说明:

排除请假记录:请假属于正常缺勤,不应计入迟到或早退的违纪统计,避免重复计数和误判

请假全覆盖:只要考勤事件名称中包含 "请假" 关键词,无论事假、病假或其他类型,均计入请假次数

校服违规唯一识别:根据数据集说明,考勤类型中的 "校服 [移动考勤]" 明确指未穿校服,因此包含 "校服" 关键词的记录即为违规 

4 实验步骤

4.1 创建实验项目

与之前实验相同,这里不再赘述  

4.2 数据资源准备

4.2.1 获取实验数据集

为方便后续数据处理与管理,将公共空间中的实验数据集导入到项目私有文件库:

首先切换至 "文件库" 标签页,右键点击根目录,选择 "新建目录" 选项

输入目录名称为“数智教育数据集”,点击“确定”

接下来我们将公共空间的数据资源导入到这个目录下

点击公共空间,点击“数据资源”

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

在弹出的窗口中选择导出到刚刚新创建的目录下,之后点击确定

可以看到在数智教育数据集的目录下,新增了3_kaoqin.csv

接下来重复以上导出操作,将本次实验用到的数据表 4_kaoqintype.csv 和 2_student_info.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文件输入组件时,考勤类型原始表的列分隔符和考勤表的不一样,在配置中,列分隔符为“插入制表符(TAB)”、编码为“GB2312”

获取字段:

表输出组件的配置与“4.2.3.1 原始考勤记录表数据导入”小节的一样

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

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”数据

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

特别说明:bf_zhusu、bf_qinshihao 这2个字段是Integer,为避免出现小数,需要使用“字段选择”组件来固化并规范

拖拽“字段选择”组件到画布中,创建“CSV文件输入”组件到“字段选择”组件的连线。

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

使用“表输出”组件将“2_student_info.csv”数据输出到团队私有数据库的“raw_student_info”中

最后执行转换流即可

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

新建转换工作流,并命名为“创建学生考勤主题标签表”,在该工作流中拖拽“执行一个SQL脚本”组件,通过执行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 数据转换流逻辑说明

本次学生考勤主题标签生成的 ETL 转换流遵循 "数据接入→清洗整合→维度拆解→行为标记→指标聚合→结果落地" 的标准化数据处理流程:

数据接入:读取考勤原始打卡表、考勤类型码表与学生信息基础表

数据整合:通过多表关联,为原始打卡记录绑定学生班级、住校属性与考勤事件名称

标签标记:基于考勤事件名称进行关键词匹配,自动识别迟到、早退、请假、未穿校服等行为

指标计算:按学生维度进行分组聚合,统计各类异常考勤次数

结果落地:关联学生衍生维度标签并进行空值处理后,将最终结果写入考勤主题标签表

转换流中各核心组件的作用如下表所示:

组件名称

核心作用

表输入

从数据库中读取原始数据表数据

排序记录

按照指定字段对数据进行排序,为记录集连接做准备

记录集连接

按关联字段连接两个数据表,补充考勤行为名称或学生属性

字段选择

移除冗余字段,保留核心必要字段

JavaScript 脚本

执行自定义逻辑,通过关键词匹配提取异常考勤记录,生成二进制标记

分组

按指定维度分组,使用聚合函数计算各类统计指标

替换 NULL 值

将空值字段替换为 "未知",确保数据完整性

值映射

将编码值(如 0/1)映射为业务含义明确的文本(如 "否"/"是")

表输出

将最终处理结果写入数据库目标表

4.3.2 数据接入:获取考勤记录、考勤类型数据、学生信息数据

1. 切换到资源库,同样右键根目录,新建“学生考勤主题标签”转换流

2. 点击“组件库”,搜索“表输入”,拖拽3个表输入组件至画布中

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

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

5. 获取SQL查询语句后,点击“确认”

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

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

由于考勤主表仅记录了考勤类型 ID 与考勤任务顺序 ID,缺少具体的考勤行为名称,需要通过关联考勤类型码表来补充该信息:

1. 将“记录集连接”组件拖拽至画布中,创建“考勤记录”CSV文件输入组件到记录集连接组件的连接线

2. 在建立连接线时,会出现“排序需要”的提示。这是由于记录集连接组件是按接收数据的顺序进行记录关联的,如果接收的数据是无序的,可能会造成记录连接结果出错。

3. 为避免因为排序问题造成连接结果出错。添加一个排序记录组件到转换流的“考勤记录”与“记录集连接”之间。

4. 双击“排序记录”组件,通过“获取字段”功能获取字段列表,然后删除多余字段,只保留“attendance_type_id”、“attendance_task_order_id”字段。因为下一步连接是使用这两个字段进行连接,所以采用这两个字段对记录进行排序。最后设置步骤名称为“按照考勤类型和考勤任务类型排序”

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

6. 需要通过记录集连接组件来配置“考勤记录”和“考勤类型”两个表的关联关系。双击记录集连接组件,进行以下配置

注:点击“获得连接字段”后,删除多余字段,2个Transform字段中仅保留“attendance_type_id”、“attendance_task_order_id”字段。

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

通过 JavaScript 脚本实现考勤行为的自动识别与标记,为后续聚合统计提供支撑,具体操作如下:

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

2. 双击“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;

    }

}

3. 使用“获取变量”获取输出字段,系统将自动解析脚本中变量定义代码,生成字段数据

4. 点击“JavaScript脚本”组件的“测试脚本”按钮,确认标记字段(is_late_early、is_leave等)仅存在1和0两个值,标签判断准确(如迟到记录对应is_late_early=1,正常出勤对应is_compliant=1),无异常。


预览数据如下:

4.3.5 多维度分组聚合统计

将明细考勤记录按学生维度进行分组聚合,生成每位学生的考勤统计指标。具体操作如下:
    在助睿ETL平台拖拽2个“分组”组件,分别对接“用户自定义Java表达式”组件的输出,按两大统计维度进行聚合,统一聚合指标,确保数据全覆盖:
聚合规则

  • 聚合函数:SUM(迟到标记)→ 迟到次数(late_count);
  • 聚合函数:SUM(早退标记)→ 早退次数(early_count);
  • 聚合函数:SUM(请假标记)→ 请假次数(leave_count);
  • 聚合函数:SUM(没穿校服标记)→ 没穿校服次数(no_uniform_count)

操作如下:

1. 添加“分组”组件,并建立连接线,连线选择“主输出步骤”

2. 双击“分组”组件,设置分组字段为“stu_id”、“stu_name”、“cla_id”、“cla_name”

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

4.3.6 关联学生信息

完成考勤行为指标聚合后,需关联学生基础信息表,补充性别、政治面貌、住校状态等属性字段,支撑后续多维度分析:

1. 由于“学生信息”数据表中的学号不是升序记录的,所以在进行记录关联前,也需要对数据进行排序。再次添加“排序记录”,并建立“学生信息”表输入组件到“排序记录”组件的连接线

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

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

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

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

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

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

8. 点击第一个Transform的连接字段中的“获得连接字段”按钮,即可获取考勤记录和考勤类型关联后的字段。同样的,获取第二个Transform的连接字段。第一个Transform字段保留“stu_id”,第二个Transform字段保留“stu_id”。连接类型选择LEFT OUTER,表示使用考勤记录的字段 stu_id与学生信息的字段 stu_id进行左外连接。

9. 最后点击“确认”即可

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

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

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

2. 双击字段选择组件,在配置弹窗中,步骤名称输入“移除冗余字段”,点击“移除”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)

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

4.3.8 空值处理

为保证数据完整性与后续统计准确性,对所有可能存在空值的字段进行统一处理:
拖拽“替换NULL值”组件至画布,创建“移除冗余字段”字段选择组件到“替换NULL值”组件的连线

双击“替换NULL值”组件,勾选“选择字段”

在字段空白表格中右键。点击“插入”

双击插入的行,字段名称选择“stu_sex”,值替换为“未知”

继续插入行,将“born_date”、“policy”、“live_on_campus”的空值均替换为“未知”

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

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

4.3.9.1 住校状态映射

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

添加“值映射”组件到画布中,并创建替换NULL值组件到值映射组件的连线

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

在下方字段值表格空白处右键,点击“插入”

双击插入的行,在源值中输入“0”,目标值输入“否”,代表将原数据中的“0”统一映射为“否”

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

4.3.9.2 从班级名提取年级

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

拖拽“JavaScript代码”组件至画布中,创建住校状态映射组件到JavaScript代码组件的连线

双击“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.9.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.10 结果入库

将处理完成的考勤主题标签数据写入预先创建的结果表:

1. 添加表输出组件,并创建“校区类型判定”“JavaScript代码组件到表输出组件的连线

2. 双击表输出组件,选择“团队私有数据库”连接;

3. 勾选“裁剪表”,这样表输出组件在插入数据前会清空原始表数据,避免重复插入

4. 勾选“指定数据库字段”,建立工作流字段与数据库表字段的映射关系。勾选后会激活“数据库字段”tab页,在数据库字段tab页,右键选择“获取字段”

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

4.3.11 执行工作流

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

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

3. 查看数据库结果

打开“元数据”tab页,在“团队私有数据库”连接上右键选择“加载元数据”

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

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

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

制作不易,看到这了麻烦给个小心心吧~~

Logo

一站式 AI 云服务平台

更多推荐