助睿实验作业2 - 学生用户画像-考勤主题标签构建
本实验基于"数智教育"大赛数据集,利用助睿零代码平台构建学生考勤主题标签ETL转换流。实验通过数据接入、关联、衍生、聚合等流程,实现了学生迟到、早退、请假等考勤行为的自动化统计,并建立了包含年级、校区、住校状态等多维度的学生画像标签。实验过程中解决了字段映射、空值处理等技术问题,最终成功处理23,630条考勤记录,生成19,546条统计结果。实验验证了零代码ETL平台在校园考勤
一、实验背景
基于“数智教育”大赛数据集,设计并实现学生多维度考勤统计ETL转换流
掌握ETL数据处理全流程(数据接入、关联、衍生、聚合、落地)
解决校园考勤人工统计效率低、口径不统一的问题
结合实验实际数据情况,优化空值处理逻辑,确保转换流可正常运行
输出精准的多维度考勤统计结果,为校园考勤管理提供数据支撑
1.2 实验环境
|
项目 |
说明 |
|
实验平台 |
助睿零代码在线实验平台(https://lab.guilian.cn/) |
|
产品官网 |
|
|
数据库类型 |
MySQL |
|
数据源 |
“数智教育”大赛数据集(3_kaoqin.csv、4_kaoqintype.csv、2_student_info.csv) |
统计学生迟到、早退、请假、没穿校服等异常考勤次数
按年级、校区、住校状态等维度进行画像分析
替代人工Excel统计,实现考勤数据从原始打卡到标准化结果的闭环处理
源数据说明:
|
数据源表 |
核心作用 |
关键字段 |
|
考勤主表(3_kaoqin) |
存储学生每日原始打卡记录 |
学生ID、班级ID、考勤类型ID、考勤时间 |
|
考勤类型码表(4_kaoqintype) |
标准化考勤事件名称 |
考勤类型ID、考勤事件名称 |
|
学生信息表(2_student_info) |
提供学生基础属性 |
学生ID、姓名、性别、住校状态 |
1.4 标签字段设计
学生基础属性标签:
|
标签字段 |
数据来源 |
说明 |
|
学生ID |
考勤主表 |
学生唯一标识 |
|
学生姓名 |
考勤主表 |
便于结果查阅 |
|
班级ID |
考勤主表 |
班级唯一标识 |
|
班级名称 |
考勤主表 |
用于提取年级和校区类型 |
|
性别 |
学生信息表 |
分析性别考勤差异 |
|
出生日期 |
学生信息表 |
分析年龄维度 |
|
政治面貌 |
学生信息表 |
分析不同群体考勤行为 |
学生画像维度标签(衍生字段):
|
标签字段 |
衍生逻辑 |
口径说明 |
|
年级 |
从班级名提取 |
包含“高一”→高一,包含“高二”→高二,包含“高三”→高三 |
|
是否住校 |
映射bf_zhusu |
1→“是”,0→“否”,空值→“未知” |
|
校区类型 |
从班级名判断 |
“白-”或“东-”开头→新校区,其他→老校区 |
考勤行为统计标签:
|
标签字段 |
统计逻辑 |
口径说明 |
|
迟到次数 |
统计迟到/晚到且非请假记录 |
考勤名称包含“迟到”“晚到”,排除请假 |
|
早退次数 |
统计早退且非请假记录 |
考勤名称包含“早退”,排除请假 |
|
请假次数 |
统计包含请假记录 |
考勤名称包含“请假”关键词 |
|
没穿校服次数 |
统计包含校服记录 |
考勤名称包含“校服”关键词 |
二、实验步骤
2.1创建实验项目
1.点击“新建项目”
2.输入项目名称“学生用户画像标签构建”
3.点击“确定”完成创建

2.2 获取实验数据集
1.在“文件库”新建目录“数智教育数据集”
2.从公共空间导入以下文件:
3_kaoqin.csv(考勤主表)
4_kaoqintype.csv(考勤类型码表)
2_student_info.csv(学生信息表)

2.3 建立数据源连接
1.在“元数据”tab页,右键“关系数据库” → “新建数据源”
2.配置MySQL连接:
连接名称:团队私有数据库
主机名:rm-2vc3qok06bag39a5n.mysql.cn-chengdu.rds.aliyuncs.com
端口:3306
数据库名:se_group_14
驱动类型:MySQL 8+
3.点击“测试”确认连接成功
4.点击“添加”完成配置

2.4 数据导入团队私有数据库
2.4.1 创建并导入考勤表
创建表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`)
) COMMENT='原始_学生考勤表';
导入配置:
使用“CSV文件输入”组件读取3_kaoqin.csv
使用“表输出”组件写入raw_attendance表

2.4.2 创建并导入考勤类型表
创建表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`)
) COMMENT='原始_考勤类型表';
特别配置:
列分隔符:制表符(TAB)
编码:GB2312

2.4.3 创建并导入学生信息表
创建表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`)
) COMMENT='原始_学生信息表';
特别配置:
使用“字段选择”组件将bf_zhusu、bf_qinshihao字段类型设置为String
bf_leaveSchool字段类型修改为String

2.5 创建目标标签表
建表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 '统计入库时间'
) COMMENT='学生考勤主题标签表';
2.6 核心转换流配置
2.6.1 整体流程设计
数据接入 → 数据关联 → 行为标记 → 分组聚合 → 属性关联 → 空值处理 → 结果入库
2.6.2 组件配置说明
|
组件 |
作用 |
关键配置 |
|
表输入(考勤记录) |
读取raw_attendance表 |
SQL获取所有字段 |
|
表输入(考勤类型) |
读取raw_attendance_type表 |
SQL获取所有字段 |
|
表输入(学生信息) |
读取raw_student_info表 |
SQL获取所有字段 |
|
排序记录 |
为关联排序 |
按attendance_type_id、attendance_task_order_id排序 |
|
记录集连接 |
关联考勤与考勤类型 |
LEFT OUTER,连接字段:attendance_type_id、attendance_task_order_id |
|
JavaScript代码 |
行为标签衍生 |
通过关键词匹配生成迟到、早退、请假、没穿校服标记 |
|
分组 |
多维度聚合 |
按stu_id、stu_name、cla_id、cla_name分组,SUM聚合 |
|
记录集连接1 |
关联学生信息 |
LEFT OUTER,连接字段:stu_id |
|
字段选择 |
移除冗余字段 |
保留核心字段 |
|
替换NULL值 |
处理空值 |
将空值替换为“未知” |
|
值映射 |
住校状态映射 |
0→“否”,1→“是” |
|
JavaScript代码 |
提取年级 |
从班级名提取高一/高二/高三 |
|
JavaScript代码 |
判定校区类型 |
班级名以“白-”或“东-”开头为新校区 |
|
表输出 |
结果入库 |
写入student_attendance_stats表 |
2.6.3 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 && attendance_task_name.includes("请假")){
isLeave = 1;
}
提取年级脚本:
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 = '未知'
}
校区类型判定脚本:
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 = '未知'
}

2.7 执行转换流
1.点击工具栏“执行”按钮
2.选择默认配置
3.点击“启动”开始执行
4.查看日志确认执行状态

3.1 执行结果
|
指标 |
数值 |
|
考勤记录读取 |
23,630条 |
|
学生信息读取 |
1,765条 |
|
考勤类型读取 |
15条 |
|
最终写入记录 |
19,546条 |
|
执行状态 |
✅ 成功 |
|
执行耗时 |
约13.5秒 |

问题1:建表后字段名不匹配: 执行导入时报错 Unknown column 'attendance_id' in 'field list'
- 问题原因:执行CREATE TABLE时表已存在,旧表结构与新SQL不一致
- 解决方法:先执行 DROP TABLE IF EXISTS 再执行 CREATE TABLE
问题2:考勤类型表导入失败: CSV读取字段乱码或字段不匹配
- 问题原因:列分隔符和编码格式与默认值不同
- 解决方法:列分隔符改为“制表符(TAB)”;编码改为“GB2312”
问题3:字段类型导致小数问题: bf_zhusu、bf_qinshihao字段出现小数
- 问题原因: CSV解析时Integer字段被识别为Double
- 解决方法: 使用“字段选择”组件将字段类型强制设置为String
问题4:表输出字段映射错误: 报错 Unknown column 'student_id' in 'field list'
- 问题原因: 表输出组件的字段映射未正确配置
- 解决方法: 点击“获取字段”从目标表获取字段,手动匹配流字段
问题5:NOT NULL字段空值错误: 报错 Column 'gender' cannot be null
- 问题原因: 学生信息表中某些字段存在空值
- 解决方法: 使用“替换NULL值”组件将空值替换为“未知”
5.1 实验收获
1.掌握了助睿ETL平台的操作流程
创建项目、获取数据、建立连接、新建转换流
添加组件、配置参数、执行转换、查看结果
2.掌握了ETL数据加工的完整流程
数据接入:从CSV文件导入数据库
数据关联:多表连接补充业务信息
数据衍生:JavaScript脚本生成新字段
数据聚合:分组统计计算指标
数据落地:结果写入目标表
3.理解了字段映射和空值处理的重要性
表输出字段必须与目标表完全匹配
NOT NULL字段需要处理空值
4.掌握了问题排查方法
通过执行日志定位错误
分析SQL语法错误、字段不匹配、约束冲突等常见问题
5.2 实验体会
相比传统编写SQL和脚本的数据处理方式,助睿平台的零代码拖拽式操作具有以下优势:
直观性:组件之间的数据流向清晰可见,便于理解和调试
低门槛:无需编写复杂代码,拖拽配置即可完成ETL任务
可复用:转换流可以保存、导出、复用,提高开发效率
易排查:执行日志详细,便于定位和解决问题
通过本次实验,成功构建了学生考勤主题标签ETL转换流,实现了考勤数据的自动化处理和多维度统计,为后续的学生用户画像分析奠定了数据基础。
更多推荐



所有评论(0)