一、实验背景与目标

1.1实验背景

在校园考勤管理中,传统的人工Excel统计方式存在三大痛点:效率低且数据量大时极易出错、统计口径不统一导致不同老师对迟到早退的理解不一致、难以进行多维度分析如按年级或住校走读对比。

所以本实验基于数智教育大赛真实数据集,使用助睿零代码ETL平台,设计并实现一个自动化的学生考勤主题标签构建流程。

1.2实验目标

实验目标包括掌握ETL数据处理全流程,即数据接入、关联、衍生、聚合、落地,同时构建学生多维度考勤统计标签,具体包括迟到次数、早退次数、请假次数和没穿校服次数,最终输出可直接用于学生画像分析或行为预警的标准表。

二、实验环境与数据集

实验环境为助睿零代码在线实验平台,数据库使用MySQL团队私有数据库,核心功能模块包括资源库、文件库、元数据管理和转换流设计。

而本次实验使用三张核心数据表。

第一张是考勤主表,文件名为3_kaoqin.csv,作为事实表记录每次考勤行为,关键字段包括学生ID、班级ID、考勤类型ID和打卡时间。

第二张是考勤类型码表,文件名为4_kaoqintype.csv,作为维度表提供考勤事件的标准名称,关键字段为考勤类型ID和考勤事件名称。

第三张是学生信息表,文件名为2_student_info.csv,作为属性表提供学生基础属性,关键字段包括学生ID、班级、性别和是否住校。

这三张表共同形成了星型模型,即事实表加维度表加属性表的结构。

三、整体转换流设计

整个ETL流程遵循数据接入、清洗整合、维度拆解、标签标记、指标计算、结果落地的核心逻辑。

图中各核心组件的作用如下:

1)表输入组件用于读取数据库中的原始数据表。

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

3)记录集连接组件按关联字段连接两表,补充考勤行为名称或学生属性。

4)字段选择组件用于移除冗余字段,保留核心必要字段。

5)JavaScript代码组件执行脚本,通过关键词匹配提取异常考勤记录并生成二进制标记。

6)分组组件按指定维度分组,使用SUM函数聚合统计各类异常次数。替换NULL值组件将空值字段替换为未知。

7)值映射组件将住校状态编码0和1映射为否和是。

8)最后表输出组件将最终结果写入数据库目标表。

四、实验步骤详解

4.1创建实验项目

登录助睿零代码在线实验平台后,先进入个人团队,然后点击新建项目

输入项目名称学生用户画像标签构建,点击确定。创建成功后即可在数据集成页面看到新创建的项目。

4.2 数据资源获取

项目创建成功后点击项目右上角的更多按钮,选择打开项目。在项目页面左侧可以看到资源库、文件库、元数据三个菜单。

首先获取实验数据集。点击文件库,右键根目录选择新建目录,输入目录名称为数智教育数据集,点击确定。

然后点击公共空间,再点击数据资源,找到3_kaoqin.csv文件,点击卡片右上角的更多按钮后,选择导出,在弹出的窗口中选择导出到刚刚创建的目录下。

并重复以上操作,将4_kaoqintype.csv和2_student_info.csv也导出到该目录。

接下来建立数据源连接。在元数据标签页中,右键点击关系数据库节点选择新建数据源。

连接类型选择MySQL,使用助教提供的用户名和密码,服务器主机名填写数据库连接地址,端口号为3306,数据库名与用户名保持一致,连接名称为团队私有数据库。

填写完毕后点击测试按钮验证,成功后点击添加。

4.3 数据导入团队私有数据库

首先创建原始学生考勤表。新建一个转换流并命名为“创建原始_学生考勤表”,并拖拽“执行一个SQL脚本”组件到画布。

双击执行SQL脚本组件,填写建表SQL脚本。

SQL脚本如下:

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

目标数据库选择团队私有数据库。而SQL脚本的主要内容是创建名为raw_attendance的表。

接下来导入原始考勤数据。新建一个转换流并命名为导入原始考勤数据,拖拽一个CSV文件输入组件到画布。

双击CSV文件输入组件,设置步骤名称为“考勤记录”,点击浏览文件选择3_kaoqin.csv,编码选择UTF-8,在字段表格中右键点击获取字段。

拖拽一个“表输出”组件到画布,建立从CSV文件输入组件到表输出组件的连线,连线类型选择主输出步骤。

双击表输出组件,数据库连接选择团队私有数据库,目标表输入raw_attendance,勾选“裁剪表”和“指定数据库字段”,并在数据库字段标签页中右键获取字段,并将表字段修改为建表语句中对应的字段。

点击执行按钮运行转换流,查看执行日志确认成功。

接下来按照同样的方法导入原始考勤类型表和原始学生信息表。考勤类型表的CSV文件输入组件中列分隔符为插入制表符,编码为GB2312。学生信息表需要拖拽一个字段选择组件来固化bf_zhusu和bf_qinshihao这两个整数字段的数据类型,避免出现小数。

学生信息表转换流中字段选择组件的配置,元数据标签页中bf_zhusu和bf_qinshihao的类型设置为Integer

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

新建一个转换流并命名为创建学生考勤主题标签表,拖拽执行一个SQL脚本组件。SQL脚本创建名为student_attendance_stats的表。

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.5 学生考勤主题标签构建转换流

这是整个实验的核心部分,需要新建一个转换流并命名为学生考勤主题标签。

第一步是数据接入。拖拽三个表输入组件至画布,分别命名为“考勤记录”、“考勤类型”和"学生信息"。

第二步是关联考勤记录和考勤类型。不过要在考勤记录组件和记录集连接组件之间添加一个“排序记录”组件,,并将其命名为“按照考勤类型和考勤任务类型排序”,同时设置排序字段为attendance_type_id和attendance_task_order_id。

配置记录集连接组件,第一个Transform选择“按照考勤类型和考勤任务类型排序”,第二个Transform选择”考勤类型“,连接类型选择LEFT OUTER,连接字段使用attendance_type_id和attendance_task_order_id。

第三步是行为标签衍生。添加JavaScript代码组件,输入脚本代码,通过关键词匹配生成isLate、isEarly、isLeave、isNoUniform四个二进制标记。

脚本代码如下:

// 初始化变量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;     } }

第四步是多维度分组聚合统计。添加分组组件,按学生ID、学生姓名、班级ID、班级名称等维度分组,对四个标记字段分别求和。

第五步是关联学生信息。先添加一个排序记录组件,将其命名为“按照学生编号进行排序。获取字段后仅保留stu_id。

然后再添加一个”记录集连接“组件,配置如下图。

第六步是字段选择移除冗余字段。添加字段选择组件,只保留需要的字段。

第七步是空值处理。添加替换NULL值组件,将性别、出生日期、政治面貌、是否住校的空值替换为未知。

第八步是住校状态映射。添加值映射组件,将live_on_campus字段的0映射为否,1映射为是。

第九步是从班级名称提取年级。添加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”字段类型,在配置窗口的下方空白表格处右键,点击“插入”后将其类型设置为“String”

第十步是校区类型判定。添加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='未知'

}

第十一步是结果入库。添加表输出组件,选择团队私有数据库连接,目标表为student_attendance_stats,勾选裁剪表,在数据库字段标签页中建立字段映射。

最后点击执行按钮运行转换流。

启动后可以查看执行日志。

五、总结

至此,我们利用助睿零代码平台,完成了从原始打卡记录到学生考勤画像标签的完整ETL流程。相比于传统的手工Excel统计,这套自动化流程不仅大幅提升了效率,更重要的是统一了统计口径,为后续的学生行为分析、预警干预提供了可靠的数据支撑。

数据 pipeline 的建设从来不是一蹴而就的,但借助像助睿这样的零代码工具,我们确实可以用更低的门槛解决实际的业务痛点。希望今天的实战演练能为你今后的数据工作带来一些启发。

感谢您的观看,我们下期实战再见!

Logo

一站式 AI 云服务平台

更多推荐