Uniplore学生考勤画像|零代码ETL超丝滑教程
全网最懂你的助睿ETL学生考勤标签构建保姆级攻略,和官方报告1:1精准对齐,无任何内容缩减,每一步都讲透、每一个配置都标清,小白也能跟着操作一次跑通,告别踩坑✅
🎯 实验开摆前先搞懂:我们到底要做啥?(不跳过!基础必看)
核心目标:基于3张原始数据表,通过助睿ETL平台,完成「数据接入→清洗整合→维度拆解→标签标记→指标计算→结果落地」全流程,最终生成规范的「学生考勤主题标签表」,实现学生考勤行为的多维度统计,支撑校园考勤管理和学生画像分析。
简单说:不用手动Excel统计,让系统自动算出每个学生的迟到、早退、请假次数,还能关联学生基础信息,直接生成可用的考勤台账,高效又精准!
🧩 核心三板斧:3张关键数据表(记牢!后续全靠它们)
|
表名(原文对应) |
江湖身份(好记版) |
核心关键字段 |
作用 |
|---|---|---|---|
|
3_kaoqin.csv |
考勤主表(事实表) |
学生ID、班级ID、打卡时间、考勤类型ID、班级名、学生姓名 |
记录每位学生每天的具体考勤行为,是所有统计的基础 |
|
4_kaoqintype.csv |
考勤类型码表(维度表) |
考勤类型ID、考勤类型名称、考勤事件ID、考勤事件名称 |
给考勤主表的“考勤类型ID”做翻译,明确每次考勤是“迟到”“早退”还是“没穿校服” |
|
2_student_info.csv |
学生信息表(属性表) |
学生ID、姓名、性别、出生日期、政治面貌、是否住校、班级名、班级ID |
补充学生基础属性,支撑“年级”“是否住校”“校区类型”等维度分析 |
🏷️ 三大类标签拆解(最终要输出的内容,提前有预期)
我们最终要构建的标签表,包含3大类标签,每一类都不能少,和原文完全一致:
-
基础属性标签:学生ID、学生姓名、班级ID、班级名称、性别、出生日期、政治面貌(从学生信息表和考勤主表提取)
-
画像维度标签:年级(从班级名称提取)、是否住校(从学生信息表映射)、校区类型(从班级名称判断)
-
考勤行为标签:迟到次数、早退次数、请假次数、没穿校服次数(通过考勤记录统计计算)
补充说明:标签口径和原文完全统一,比如“迟到次数”要排除请假记录,“没穿校服”直接识别考勤事件中的“校服”关键词,后续会详细讲配置方法。
🚀 第一步:创建项目+获取数据资源(5分钟搞定,超简单)
这一步的核心是“搭好实验环境”,把需要的项目和数据都准备好,每一步都要跟着做,不能跳!
1.1 创建实验项目
-
登录助睿ETL平台,找到页面上的「新建项目」按钮,点击进入创建页面

-
在“项目名称”输入框中,精准输入「学生用户画像标签构建」(不能改名字,后续操作要对应);

-
点击「确定」,创建成功后,在“数据集成”页面就能看到我们新建的项目,此时项目处于“未开启”状态,后续逐步完善。

温馨提示:创建后可以刷新页面,确认项目已显示,避免后续找不到项目白费功夫~
1.2 打开项目并熟悉页面布局
-
找到新建的「学生用户画像标签构建」项目,点击项目右上角的「…」,在弹出的菜单中选择「打开项目」;

-
打开后,页面左侧会显示3个核心菜单,记牢它们的作用,后续全要用:
-
资源库:管理工作流(新建、修改、运行转换流/作业流),是我们后续操作的核心区域;
-
文件库:保存工作流需要用到的原始文件(比如3张CSV表)和运行后产生的文件;
-
元数据:配置数据库连接、运行环境等,是“数据导入数据库”的关键前提。
-
1.3 获取实验数据集(把3张核心表导入项目)
我们需要把公共空间的3张原始CSV表,导入到我们项目的文件库中,方便后续使用,步骤如下:
-
点击左侧菜单「文件库」,右键点击“根目录”,在弹出的菜单中选择「新建目录」;

-
输入目录名称「数智教育数据集」,点击「确定」,此时文件库中会新增这个目录;

-
点击页面上方的「公共空间」,切换到公共空间的“数据资源”页面;

-
在数据资源列表中,找到「3_kaoqin.csv」(考勤主表),点击它右上角的「更多」,选择「导出」;

-
在弹出的“导出数据资源到项目空间”窗口中,选择导出路径为我们刚刚新建的「数智教育数据集」,点击「确定」;

-
等待导出完成,刷新文件库的「数智教育数据集」目录,会看到「3_kaoqin.csv」已导入;

-
重复步骤4-6,分别导出「4_kaoqintype.csv」(考勤类型表)和「2_student_info.csv」(学生信息表),确保3张表都成功导入到「数智教育数据集」目录中,缺一不可。
1.4 建立数据源连接(关键!不建连接无法导入数据库)
我们需要建立和“团队私有数据库”的连接,后续才能把CSV表的数据导入数据库,步骤和原文完全一致,参数不能错:
-
点击左侧菜单「元数据」,找到「关系数据库」,右键点击「关系数据库」,选择「新建数据源」;

-
在弹出的“数据库连接”窗口中,按以下参数配置:
-
连接名称:团队私有数据库;
-
连接类型:MySQL(下拉选择,不要选错);
-
用户名:;
-
密码:助教提供(按实际提供的密码填写,注意大小写);
-
服务器主机名:rm-2vc3qok06bag39a5n.mysql.cn-chengdu.rds.aliyuncs.com;
-
端口号:3306(MySQL默认端口,固定填写);
-
数据库名称:labs;
-
驱动类型:MySQL 8+(下拉选择,对应数据库版本)。

-
-
配置完成后,点击「测试」按钮,验证连接是否成功;
-
若弹出「数据库连接成功」的提示,说明配置正确,点击「添加」,完成数据源连接创建;若连接失败,检查参数是否输错,尤其是服务器主机名和密码。

补充:连接成功后,「关系数据库」节点下会新增「团队私有数据库」子节点,后续所有数据库操作都用这个连接。
📥 第二步:创建原始表+导入数据(核心步骤,SQL直接复制)
这一步是“把CSV文件的数据,导入到数据库中”,需要先创建3张原始表(对应3张CSV表),再分别导入数据,每一张表的操作都要完整,不跳过任何细节,和原文完全一致。
2.1 原始_学生考勤表(对应3_kaoqin.csv)
先创建表结构,再导入CSV数据,步骤如下:
2.1.1 创建原始_学生考勤表(执行SQL脚本)
-
点击左侧「资源库」,右键根目录,选择「新建转换流」,输入转换流名称「创建原始_学生考勤表」,点击「确定」;

-
进入转换流设计页面,点击页面右侧「组件库」,搜索「执行一个SQL脚本」组件,拖拽到画布中;

-
双击「执行一个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='原始_学生考勤表';
-
-
其他参数保持默认,点击「确认」,完成组件配置;

-
点击转换流页面上方的「运行」按钮,运行转换流;

-
运行过程中,画布下方会显示执行日志,若日志显示「完成处理(R=0.W=1.U=0.E=0)」,说明表创建成功,没有报错。
2.1.2 导入原始考勤数据(把3_kaoqin.csv导入数据库)
-
右键「资源库」根目录,新建转换流,命名为「导入原始考勤数据」,点击「确定」;

-
在组件库搜索「CSV文件输入」组件,拖拽到画布中,双击组件进行配置:

-
步骤名称:输入「考勤记录」(方便识别);

-
文件名:点击「浏览文件」,在弹出的窗口中,找到「数智教育数据集」→「3_kaoqin.csv」,点击「确定」;
-
列分隔符:保持默认「插入制表符(TAB)」;
-
封闭符:保持默认;
-
编码:选择「UTF-8」(重点!选错编码会导致中文乱码);

-
下滑到“字段表格”,右键空白处,点击「获取字段」,系统会自动读取CSV文件的所有字段;

-
字段获取成功后,点击「确认」,完成CSV文件输入组件配置。
-
-
在组件库搜索「表输出」组件,拖拽到画布中;

-
创建「考勤记录」(CSV文件输入)到「表输出」的连接线,点击连接线,选择「主输出步骤」;

-
双击「表输出」组件,进行配置:

-
步骤名称:保持默认「表输出」即可;
-
数据库连接:选择「团队私有数据库」;

-
目标表:输入「raw_attendance」(我们刚刚创建的原始_学生考勤表,必须完全一致);

-
提交记录数量:保持默认1000;
-
点击「数据库字段」标签,右键空白处,点击「获取字段」,系统会自动匹配CSV文件字段和数据库表字段;

-
将表字段修改为建表语句中对应的字段(确保字段一一对应,比如CSV中的“kaoqing_id”对应表中的“attendance_id”);

-
点击「确认」,完成表输出组件配置。
-
-
点击转换流上方的「运行」按钮,运行转换流;
-
运行完成后,查看日志,若显示「完成处理」且无报错,说明数据导入成功;若有报错,检查字段映射是否正确、编码是否为UTF-8。

2.2 原始_考勤类型表(对应4_kaoqintype.csv)
2.2.1 创建原始_考勤类型表(执行SQL脚本)
-
新建转换流,命名为「创建原始_考勤类型表」;


-
拖拽「执行一个SQL脚本」组件到画布,配置数据库连接为「团队私有数据库」;

-
复制粘贴以下SQL(原文完整SQL,不修改任何内容):
DROP TABLE IF EXISTS `raw_attendance_type`; 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='原始_考勤类型表'; -
点击「确认」,运行转换流,确保表创建成功(日志无报错)。

2.2.2 导入原始考勤类型数据(把4_kaoqintype.csv导入数据库)
-
新建转换流,命名为「导入原始考勤类型数据」;

-
拖拽「CSV文件输入」组件到画布,双击配置:

-
步骤名称:输入「考勤类型记录」;
-
文件名:浏览选择「数智教育数据集」→「4_kaoqintype.csv」;
-
列分隔符:选择「插入制表符(TAB)」(重点!和考勤主表一致,但后续编码不同);
-
编码:选择「GB2312」(重点差异!选错会导致中文乱码);

-
右键字段表格,点击「获取字段」,确认字段读取成功后,点击「确认」。

-
-
拖拽「表输出」组件到画布,创建「考勤类型记录」到「表输出」的主输出连接线;

-
双击「表输出」组件,配置如下:
-
数据库连接:团队私有数据库;
-
目标表:raw_attendance_type(刚刚创建的原始_考勤类型表);
-
点击「数据库字段」,获取字段后,按以下对应关系调整: 表字段(数据库)流字段(CSV文件)attendance_type_idcontroler_idattendance_type_namecontroler_nameattendance_task_order_idcontrol_task_order_idattendance_task_namecontrol_task_name


-
点击「确认」,完成配置;
-
运行转换流,查看日志,确保无报错,数据导入成功。

-
2.3 原始_学生信息表(对应2_student_info.csv)
操作逻辑和前两张表一致,但有1个关键差异:需要用「字段选择」组件固化2个Integer字段,避免出现小数,其他步骤完全照搬原文。
2.3.1 创建原始_学生信息表(执行SQL脚本)
-
新建转换流,命名为「创建原始_学生信息表」;

-
拖拽「执行一个SQL脚本」组件到画布,配置数据库连接为「团队私有数据库」;

-
复制粘贴以下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='原始_学生信息表';
-
点击「确认」,运行转换流,确保表创建成功(日志无报错)。

2.3.2 导入原始学生信息数据(把2_student_info.csv导入数据库)
-
新建转换流,命名为「导入原始学生信息数据」;

-
拖拽「CSV文件输入」组件到画布,双击配置:
-
步骤名称:输入「学生信息记录」;
-
文件名:浏览选择「数智教育数据集」→「2_student_info.csv」;
-
列分隔符:保持默认「插入制表符(TAB)」;
-
编码:选择「UTF-8」;

-
右键字段表格,点击「获取字段」,将「bf_leaveSchool」的字段类型修改为「String」(避免类型错误);

-
点击「确认」,完成CSV文件输入组件配置。

-
-
拖拽「字段选择」组件到画布,创建「学生信息记录」(CSV文件输入)到「字段选择」的主输出连接线;

-
双击「字段选择」组件,进行配置(重点!固化Integer字段):
-
步骤名称:输入「固化字段类型」;
-
点击「元数据」标签,右键空白处,点击「插入」,新增2行;
-
按以下配置设置元数据(确保2个字段为Integer类型,避免小数):字段名称改名成类型长度精度二进制转普通存储bf_zhusu(空着,不改名)Integer-1-1否bf_qinshihao(空着,不改名)Integer-1-1否

-
点击「确认」,完成字段选择组件配置。
-
-
拖拽「表输出」组件到画布,创建「固化字段类型」(字段选择)到「表输出」的主输出连接线;


-
双击「表输出」组件,配置如下:
-
数据库连接:团队私有数据库;
-
目标表:raw_student_info(刚刚创建的原始_学生信息表);
-
点击「数据库字段」,获取字段后,按以下对应关系调整(原文明确要求,必须对齐): 表字段(数据库)流字段(CSV文件)native_placebf_NativePlaceresidence_typeBf_ResidenceTypepolicybf_policycla_idcla_idcla_termcla_termlive_on_campusbf_zhusuleave_schoolbf_leaveSchooldormitory_nobf_qinshihao
-
点击「确认」,完成配置;

-
运行转换流,查看日志,确保无报错,数据导入成功。
-
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='学生考勤主题标签表';
-
点击「确认」,运行转换流,确保表创建成功(日志无报错);

-
创建成功后,后续所有ETL操作的最终结果,都会写入这张表。
⚙️ 第三步:核心ETL转换流(最关键!全流程无删减)
这一步是整个实验的核心,,我们将严格按照“数据接入—清洗整合—维度拆解—标签标记—指标计算—结果落地”逻辑,一步步操作。
3.1 转换流逻辑总览(先看懂逻辑,再操作)
整体逻辑和原文完全一致,用通俗的话讲就是:
1. 数据接入:把刚刚导入数据库的3张原始表(考勤记录、考勤类型、学生信息)读取出来;
2. 数据整合:将考勤记录和考勤类型表关联,给每条考勤记录补充“迟到”“早退”等具体行为名称;
3. 标签标记:用JS脚本识别每条考勤记录的行为,生成“是/否”标记(1=是,0=否);
4. 指标计算:按学生分组,统计每个学生的迟到、早退、请假等次数;
5. 维度补齐:关联学生信息表,补充学生性别、是否住校等属性;
6. 清洗标准化:移除冗余字段、处理空值、映射住校状态、提取年级和校区类型;
7. 结果落地:将最终的标签数据写入「student_attendance_stats」表中。
考勤记录表→排序→记录集连接(关联考勤类型表)→JS脚本(标记行为)→分组(统计次数)→排序→记录集连接(关联学生信息表)→字段选择(删冗余)→替换空值→值映射(住校状态)→表输出(写入目标表)。
3.2 数据接入:读取3张原始表数据
第一步是“把数据库中的3张原始表读出来”,需要拖拽3个「表输入」组件,分别读取3张表的数据:
-
点击左侧「资源库」,右键根目录,选择「新建转换流」,输入转换流名称「学生考勤主题标签」,点击「确定」;

-
进入转换流设计页面,页面默认是锁定状态,点击页面上方的「锁定」图标(🔒),解锁后才能编辑;
-
点击右侧「组件库」,搜索「表输入」组件,拖拽3个「表输入」组件到画布中(分别对应3张原始表);

-
配置第一个「表输入」组件(读取考勤记录表):
-
双击组件,步骤名称修改为「考勤记录」;
-
数据库连接:选择「团队私有数据库」;
-
点击「获取SQL查询语句」,在弹出的窗口中,选择数据库「labs」→表「raw_attendance」,点击「确认」;


-
系统会自动生成包含「raw_attendance」所有字段的SQL语句,点击「确认」,完成配置(无需修改SQL)。
-
-
配置第二个「表输入」组件(读取考勤类型表):
-
双击组件,步骤名称修改为「考勤类型」;

-
数据库连接:选择「团队私有数据库」;
-
点击「获取SQL查询语句」,选择数据库「labs」→表「raw_attendance_type」,点击「确认」;
-
系统自动生成SQL语句,点击「确认」,完成配置。
-
-
配置第三个「表输入」组件(读取学生信息表):
-
双击组件,步骤名称修改为「学生信息」;

-
数据库连接:选择「团队私有数据库」;
-
点击「获取SQL查询语句」,选择数据库「labs」→表「raw_student_info」,点击「确认」;
-
系统自动生成SQL语句,点击「确认」,完成配置。
-
补充:3个表输入组件配置完成后,可分别点击「预览」,查看数据是否读取成功,确保无报错。
3.3 数据关联:关联考勤记录+考勤类型表
考勤记录表只有「考勤类型ID」,没有具体的行为名称(比如“迟到”),需要和考勤类型表关联,补充行为名称,步骤如下(原文完整步骤,不删减):
-
在组件库搜索「记录集连接」组件,拖拽1个到画布中;

-
创建「考勤记录」(表输入)到「记录集连接」的连接线,此时会弹出「排序需要」的提示(原文提示),意思是“连接前必须排序,否则数据会乱”;

-
拖拽1个「排序记录」组件到画布,放在「考勤记录」和「记录集连接」之间,创建「考勤记录」到「排序记录」、「排序记录」到「记录集连接」的主输出连接线;

-
配置「排序记录」组件(按考勤类型和考勤任务类型排序):
-
双击组件,步骤名称修改为「按照考勤类型和考勤任务类型排序」;
-
点击「获取字段」,读取所有字段后,删除多余字段,只保留「attendance_type_id」和「attendance_task_order_id」两个字段(这两个是关联字段);
-
排序设置:两个字段均选择「升序」,其他参数保持默认;
-
点击「确认」,完成排序组件配置。
-
-
创建「考勤类型」(表输入)到「记录集连接」的连接线(考勤类型表默认已按关联字段排序,无需额外排序);
-
配置「记录集连接」组件(关联两张表):
-
双击组件,步骤名称保持默认「记录集连接」;
-
第一个Transform:选择「按照考勤类型和考勤任务类型排序」;
-
第二个Transform:选择「考勤类型」;
-
连接类型:选择「LEFT OUTER」(左外连接,确保所有考勤记录都能保留);

-
点击「第一个Transform的连接字段」中的「获得连接字段」,读取字段后,只保留「attendance_type_id」和「attendance_task_order_id」;

-
点击「第二个Transform的连接字段」中的「获得连接字段」,读取字段后,同样只保留「attendance_type_id」和「attendance_task_order_id」;

-
点击「确认」,完成连接配置(此时每条考勤记录都关联上了具体的行为名称)。
-
3.4 行为标签衍生:用JS脚本标记异常考勤行为
这一步是“识别每条考勤记录的行为”,用JS脚本生成二进制标记(1=有该行为,0=没有),为后续统计次数做准备,步骤和原文完全一致:
-
在组件库搜索「JavaScript代码」组件,拖拽1个到画布中,创建「记录集连接」到「JavaScript代码」的主输出连接线;


-
双击「JavaScript代码」组件,进行配置:
-
步骤名称修改为「提取异常考勤记录」;
-
在「Script 1」输入框中,复制粘贴以下JS脚本(原文完整脚本,不修改任何内容):
-
// 核心判断逻辑
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;
}
}
-
点击「获取变量」按钮,系统会自动解析脚本中的变量(isLate、isEarly、isLeave、isNoUniform),生成输出字段;
-
点击「测试脚本」按钮,预览数据,确认输出字段只有0和1两个值(1表示有该行为,0表示没有),无异常;

-
点击「确认」,完成JS脚本组件配置。

补充:测试脚本时,若出现报错,检查脚本是否复制完整,字段名是否和数据库字段一致(比如attendance_type_name是否正确)。
3.5 多维度分组聚合:统计每个学生的异常考勤次数
这一步是“把明细的考勤记录,按学生分组,统计每个学生的迟到、早退等总次数”,步骤和原文完全一致:
-
在组件库搜索「分组」组件,拖拽1个到画布中,创建「提取异常考勤记录」(JS脚本)到「分组」的主输出连接线;

-
双击「分组」组件,进行配置:
-
步骤名称保持默认「分组」;
-
构成分组的字段:点击空白处,输入4个字段,分别是「stu_id」(学生ID)、「stu_name」(学生姓名)、「cla_id」(班级ID)、「cla_name」(班级名称)(按学生分组,确保每个学生对应一条统计记录);

-
聚合设置:点击「聚合」区域的空白处,按以下规则设置(原文聚合规则,不修改): 聚合字段名称对应JS脚本变量聚合函数说明late_countisLateSum(求和)统计迟到总次数early_countisEarlySum(求和)统计早退总次数leave_countisLeaveSum(求和)统计请假总次数no_uniform_countisNoUniformSum(求和)统计没穿校服总次数

-
其他参数保持默认,点击「确认」,完成分组组件配置。
-
补充:分组完成后,数据会变成“每个学生一条记录”,包含学生ID、姓名、班级,以及4种异常行为的总次数。
3.6 关联学生信息表:补充学生基础属性
目前的分组结果,只有学生ID、班级和考勤次数,缺少性别、出生日期、是否住校等基础属性,需要关联学生信息表补充,步骤和原文完全一致:
-
拖拽1个「排序记录」组件到画布,创建「学生信息」(表输入)到「排序记录」的主输出连接线;
-
配置「排序记录」组件(按学生ID排序):

-
步骤名称修改为「按照学生编号进行排序」;

-
点击「获取字段」,读取所有字段后,删除多余字段,只保留「stu_id」(学生ID,关联字段);
-
排序设置:「stu_id」选择「升序」,其他参数默认;
-
点击「确认」,完成配置。
-
-
拖拽1个「记录集连接」组件到画布(用于关联分组结果和学生信息),创建「分组」组件到该「记录集连接」的主输出连接线;
-
创建「按照学生编号进行排序」(排序记录)到该「记录集连接」的连接线,确保两个输入流都接入记录集连接组件;

-
双击该「记录集连接」组件,进行配置(关联分组结果和学生信息): 步骤名称修改为「关联学生基础信息」;
-
第一个Transform:选择「分组」(即学生考勤次数统计结果);
-
第二个Transform:选择「按照学生编号进行排序」(即排序后的学生信息);

-
连接类型:选择「LEFT OUTER」(左外连接,确保所有学生的考勤统计记录都能保留,即使个别学生无基础信息也不会丢失);点击「第一个Transform的连接字段」中的「获得连接字段」,读取字段后,只保留「stu_id」(学生ID,唯一关联字段);
-
点击「第二个Transform的连接字段」中的「获得连接字段」,读取字段后,同样只保留「stu_id」(学生ID);

-
点击「确认」,完成关联配置(此时每条学生考勤统计记录,都补充了对应的学生基础信息,如性别、出生日期等)。
3.7 数据清洗:移除冗余字段,避免数据杂乱
关联完成后,数据中会存在大量冗余字段(比如重复的学生ID、班级ID,以及不需要的中间字段),需要通过「字段选择」组件删除冗余,只保留核心字段:
-
在组件库搜索「字段选择」组件,拖拽1个到画布中,创建「关联学生基础信息」(记录集连接)到「字段选择」的主输出连接线;

-
双击「字段选择」组件,进行配置:步骤名称修改为「删除冗余字段」;
-
点击「获取字段」,系统会自动读取所有关联后的字段;
-
删除冗余字段,只保留以下核心字段(原文明确要求,缺一不可): 学生相关:stu_id(学生ID)、stu_name(学生姓名)、cla_id(班级ID)、cla_name(班级名称)、stu_sex(性别)、born_date(出生日期)、policy(政治面貌)、live_on_campus(是否住校); 考勤统计相关:late_count(迟到次数)、early_count(早退次数)、leave_count(请假次数)、no_uniform_count(没穿校服次数);
-
字段顺序可按需调整(建议按“学生基础信息→考勤统计信息”的顺序排列,方便后续操作);

-
点击「确认」,完成冗余字段删除配置。

3.8 空值处理:统一字段格式,避免统计异常
学生基础信息中可能存在空值(比如部分学生的政治面貌、出生日期未填写),需要统一处理为空值占位符,确保数据规范,步骤和原文完全一致:
-
在组件库搜索「替换空值」组件,拖拽1个到画布中,创建「删除冗余字段」(字段选择)到「替换空值」的主输出连接线;

-
双击「替换空值」组件,进行配置: 步骤名称修改为「处理空值字段」;
-
点击「获取字段」,读取所有需要处理的字段;

-
按以下规则设置空值替换(原文统一要求,不修改):stu_sex(性别):空值替换为「未知」;
-
born_date(出生日期):空值替换为「未知」;
-
policy(政治面貌):空值替换为「未知」;
-
live_on_campus(是否住校):空值替换为「未知」;

-
其他字段(学生ID、姓名、班级等)不会出现空值,无需设置替换规则;
-
点击「确认」,完成空值处理配置。
3.9 数据标准化:映射住校状态、提取年级和校区类型
这一步是“让数据更规范、更易读”,主要完成3个标准化操作:住校状态映射、年级提取、校区类型判定,步骤和原文完全一致,每一步都不跳过:
3.9.1 住校状态映射(0→否,1→是)
-
在组件库搜索「值映射」组件,拖拽1个到画布中,创建「处理空值字段」(替换空值)到「值映射」的主输出连接线;

-
双击「值映射」组件,进行配置:步骤名称修改为「映射住校状态」;
-
要映射的字段:选择「live_on_campus」(是否住校);

-
目标字段名称:保持默认「live_on_campus」,也可修改为「is_boarder」(和最终标签表字段对应,建议修改);
-
映射规则(原文固定规则,不修改): 映射值1:源值「0」→ 目标值「否」;

-
映射值2:源值「1」→ 目标值「是」;
-
默认值:「否」(若字段值既不是0也不是1,默认按“否”处理);
-
点击「确认」,完成住校状态映射配置。
3.9.2 提取年级(从班级名中提取)
-
在组件库搜索「计算器」组件,拖拽1个到画布中,创建「映射住校状态」(值映射)到「计算器」的主输出连接线;

-
双击「计算器」组件,进行配置:步骤名称修改为「提取年级信息」;
-
点击「新建」,新增一个计算字段,字段名称输入「grade」(年级);
-
计算表达式:
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='未知' } -
表达式说明:判断班级名称中是否包含“高一”“高二”“高三”,包含则对应提取年级,否则标记为“未知”;
-
点击「确认」,完成年级提取配置。

3.9.3 校区类型判定(按班级名开头字符判断)
-
在组件库搜索「计算器」组件,拖拽1个到画布中,创建「提取年级信息」(计算器)到该「计算器」的主输出连接线;
-
双击该「计算器」组件,进行配置: 步骤名称修改为「判定校区类型」;
-
点击「新建」,新增一个计算字段,字段名称输入「campus_type」(校区类型);
-
计算表达式
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个字符是否为“白-”或“东-”,是则判定为“新校区”,否则为“老校区”;
-
点击「确认」,完成校区类型判定配置。
3.10 结果落地:将标签数据写入目标表
这是核心ETL转换流的最后一步,将标准化后的所有数据,写入我们之前创建的「student_attendance_stats」(学生考勤主题标签表),步骤和原文完全一致,确保数据落地成功:
-
在组件库搜索「表输出」组件,拖拽1个到画布中,创建「判定校区类型」(计算器)到「表输出」的主输出连接线;

-
双击「表输出」组件,进行配置(重点!字段映射必须和目标表完全对齐): 步骤名称修改为「写入学生考勤主题标签表」;
-
数据库连接:选择「团队私有数据库」;
-
目标表:输入「student_attendance_stats」(最终输出表,必须完全一致,不能输错);
-
提交记录数量:保持默认1000;
-
勾选「裁剪表」(重点!避免重复写入数据,每次运行转换流前,自动清空目标表原有数据);

-
点击「数据库字段」标签,右键空白处,点击「获取字段」,系统会自动读取转换流中的所有字段和目标表的所有字段;

-
按以下对应关系,手动调整字段映射(原文明确要求,必须一一对应,不能出错): 目标表字段(student_attendance_stats)转换流字段(当前数据)student_idstu_id(学生ID)student_namestu_name(学生姓名)class_idcla_id(班级ID)class_namecla_name(班级名称)gradegrade(提取的年级)genderstu_sex(性别)birth_dateborn_date(出生日期)political_statuspolicy(政治面貌)is_boarderlive_on_campus(映射后的住校状态)campus_typecampus_type(判定的校区类型)late_countlate_count(迟到次数)early_leave_countearly_count(早退次数)leave_countleave_count(请假次数)uniform_violate_countno_uniform_count(没穿校服次数)
-
字段映射完成后,仔细核对一遍,确保没有遗漏、没有错配;
-
点击「确认」,完成表输出组件配置。
-
点击转换流页面上方的「运行」按钮,运行整个核心ETL转换流;

-
运行过程中,查看画布下方的执行日志,若日志显示「完成处理」且无任何报错(E=0),说明转换流运行成功;若有报错,根据日志提示排查问题(常见问题:字段映射错误、数据库连接失败、脚本错误);
-
运行成功后,可通过数据库工具查看「student_attendance_stats」表,确认数据已成功写入,且每条记录都包含所有核心字段,无空值、无重复。
✅ 第四步:验收标准
所有步骤完成后,按以下标准验收,确保实验成功,符合官方要求:
-
转换流全绿无报错:所有创建表、导入数据、核心ETL的转换流,运行后均显示“成功”,日志无报错(E=0);
-
目标表数据完整:「student_attendance_stats」表中,每条学生记录都包含以下所有字段,无缺失: 基础信息(student_id、student_name、class_id、class_name、gender、birth_date、political_status); 画像维度(grade、is_boarder、campus_type); 考勤行为(late_count、early_leave_count、leave_count、uniform_violate_count);
-
数据规范无异常:空值已处理(均替换为「未知」),住校状态映射正确(0→否,1→是),年级提取准确,校区类型判定无误;
-
统计口径统一:迟到、早退次数已排除请假记录,考勤次数统计无失真,数据无重复、无冗余。
⚠️ 避坑小Tips
整理了4个高频踩坑点,提前规避,少走弯路:
-
记录集连接必须先排序:无论关联哪两张表,连接前一定要对关联字段进行排序(比如考勤类型ID、学生ID),否则会出现数据乱套、关联失败的问题;
-
考勤类型表CSV编码别选错:4_kaoqintype.csv必须选择「GB2312」编码,其他两张CSV表(3_kaoqin.csv、2_student_info.csv)选择「UTF-8」,选错编码会导致中文乱码;
-
迟到早退必须排除请假:JS脚本中已包含“排除请假”的逻辑,不要随意修改脚本,否则会把“请假期间的迟到早退”也算入统计,导致数据失真;
-
字段选择别手软:冗余字段(比如重复的ID、中间过程字段)一定要删除,避免字段过多导致后续映射出错,同时提升数据处理效率;
-
表输出必勾选「裁剪表」:每次运行核心ETL转换流前,确保「表输出」组件勾选了「裁剪表」,避免重复写入数据,导致目标表数据冗余;
-
字段映射要反复核对:核心ETL最后一步的表输出字段映射,一定要和目标表字段一一对应,尤其是字段名称、数据类型,错配会导致运行报错。
🎊 实验总结
本次助睿ETL学生考勤画像构建实验,核心是围绕3张原始数据表,完成“数据接入—清洗整合—标签衍生—指标统计—结果落地”的全流程,重点掌握3个核心技能:
-
数据导入:掌握CSV文件导入数据库的方法,重点区分不同CSV文件的编码和列分隔符;
-
数据关联:学会用「记录集连接」组件关联多张表,记住“连接前先排序”的核心原则;
-
标签衍生与标准化:用JS脚本标记异常行为,用计算器提取维度信息,用值映射统一字段格式,最终生成规范的学生考勤标签表。
只要严格按照本教程的每一步操作,不跳过、不修改关键配置,小白也能一次跑通实验,完美输出符合官方要求的学生考勤主题标签表,轻松完成实验任务✅
平台介绍
助睿平台 = 零代码版 Kettle + 可视化 BI + AutoML + 数据治理,是小白快速上手数据工程、数据分析、AI 建模的神器,尤其适合高校实验、教学实训、企业轻量数据治理场景。
更多推荐



所有评论(0)