数智教育:ETL助力校园考勤智能化
本文摘要: 本研究基于"数智教育"大赛数据集,利用助睿零代码ETL平台构建学生考勤主题标签系统。实验通过完整ETL流程实现了考勤数据的多维度统计分析,解决了传统人工统计效率低、口径不统一等问题。研究重点包括:1)建立星型数据模型,关联考勤记录、类型和学生信息三张核心表;2)通过JavaScript脚本实现异常考勤行为识别;3)采用分组聚合统计迟到、早退等关键指标;4)对空值和编
一、实验背景
实验目的
基于“数智教育”大赛数据集,我们将通过助睿(Uniplore)零代码ETL平台设计并实现学生多维度考勤统计转换流,达成以下核心目标:
- 系统掌握ETL数据处理全流程(数据接入、多表关联、字段衍生、聚合统计、结果落地)的核心逻辑与实操方法;
- 解决校园考勤人工统计效率低、口径不统一、数据追溯难的痛点,固化标准化统计规则;
- 优化空值处理、数据映射等关键环节,确保转换流稳定运行,输出精准的学生考勤标签(基础属性、画像维度、考勤指标);
- 理解星型数据模型在主题标签构建中的应用,为校园考勤精细化管理提供数据支撑,培养规范化数据处理思维。
实验环境
|
配置项 |
具体说明 |
|
核心工具 |
助睿数智(Uniplore)数据集成平台(零代码ETL工具)访问地址:https://lab.guilian.cn/ |
|
数据库 |
MySQL 8.0 |
|
数据源 |
“数智教育”大赛数据集(3_kaoqin.csv、4_kaoqintype.csv、2_student_info.csv) |
业务场景
校园日常考勤管理中,传统依赖Excel人工统计的方式存在诸多弊端:统计效率低(需手动合并多表数据)、口径不统一(不同统计人员规则差异)、数据易出错(人工计算失误)、追溯困难(历史统计记录零散)。本次实验我们聚焦学生考勤主题,通过ETL流程自动化处理学生打卡明细数据,关联考勤类型定义与学生基础信息,生成迟到、早退、请假、未穿校服等多维度统计指标,同时补充年级、校区类型、住校状态等画像维度,形成标准化考勤标签台账,支撑学校按班级、年级、校区、住校状态等多维度分析考勤情况,辅助制定针对性管理措施。
数据加工流程
本次实验我们将遵循“数据建模→数据接入→数据转换→数据加载”的核心流程,具体如下:
- 数据建模:基于业务需求梳理3张核心表(考勤主表、考勤类型码表、学生信息表),构建“事实表+维度表”的星型模型;
- 数据接入:将本地CSV文件导入团队私有数据库,创建原始数据表存储源数据;
- 数据转换:多表关联补充字段→字段筛选去冗余→空值处理→行为标签衍生(JS脚本)→多维度聚合统计→基础属性标准化(值映射、维度提取);
- 数据加载:将加工后的标准化考勤标签数据写入目标表,形成可直接使用的业务台账。
二、实验步骤
登录实验平台
- 打开浏览器,输入助睿数智平台地址,输入账号密码完成登录;
- 登录后点击左侧导航栏【数据集成】模块,进入实验核心操作界面,我们将在这里熟悉资源库、文件库、元数据管理三大核心功能区,为后续操作做好准备。
基本概念了解
在开始实操前,我们先明确以下核心概念,帮助大家理解平台操作逻辑:
|
专业概念 |
释义与实验应用 |
|
转换流 |
平台中数据处理的核心单元,由多个功能组件按逻辑顺序连接而成,本次我们将用它串联考勤数据从接入到输出的全流程 |
|
资源库 |
用于管理转换流、工作流的模块,本次实验的“学生考勤主题标签”转换流将存储于此 |
|
文件库 |
用于存储实验所需的CSV数据源文件、转换流导出文件等,本次我们将在此创建“数智教育数据集”目录存放源文件 |
|
元数据管理 |
用于配置数据库连接、集群信息等基础资源,本次我们将在此创建MySQL数据源连接 |
|
表输入组件 |
读取数据库中原始数据表数据的组件,本次我们将用它读取raw_attendance、raw_attendance_type、raw_student_info三张表 |
|
记录集连接组件 |
实现多表关联的核心组件,类似SQL的JOIN操作,需基于有序数据进行关联,本次我们将用它关联考勤主表与类型表、聚合结果与学生信息表 |
|
排序记录组件 |
对数据按指定字段排序,为记录集连接提供有序数据,避免关联结果出错,是多表关联的前置关键步骤 |
|
JavaScript脚本组件 |
通过自定义脚本实现复杂逻辑处理,本次我们将用它识别异常考勤行为、提取年级、判定校区类型 |
|
分组组件 |
按指定维度聚合统计数据,支持SUM、COUNT等函数,本次我们将用它按学生维度统计各类考勤次数 |
|
替换NULL值组件 |
处理数据中的空值,避免后续逻辑出错,本次我们将用它将性别、出生日期等字段空值替换为“未知” |
|
值映射组件 |
将编码值转换为可读文本,本次我们将用它将住校状态(0/1)映射为“否/是” |
|
表输出组件 |
将处理后的数据写入目标数据库表,本次我们将用它将考勤标签结果写入student_attendance_stats表 |
团队管理
- 进入平台【团队管理】界面,确认我们已加入指定实验团队;
- 检查团队私有数据库的访问权限,确保我们具备数据表创建、数据插入、查询等操作权限,为后续数据导入与处理奠定基础。
创建实验项目
- 在数据集成平台首页点击【新建项目】按钮,弹出项目创建窗口;

- 输入项目名称“学生用户画像标签构建”,点击【确定】完成创建;

- 项目创建成功后,在数据集成页面的项目列表中可查看该项目,点击项目进入详情页,我们将在这里开展后续所有操作。

同步数据源
(1)创建数据目录
- 进入项目详情页,点击左侧【文件库】模块;

- 在文件库根目录空白处右键点击,选择【新建目录】,输入目录名称“数智教育数据集”,点击【确定】,我们将用这个目录专门存放本次实验的3张CSV源文件。

(2)导入CSV数据集
- 点击文件库顶部【公共空间】,进入平台公共数据资源区;

- 找到“数据资源”文件夹下的3_kaoqin.csv、4_kaoqintype.csv、2_student_info.csv三张表;

- 我们依次对每张表进行操作:点击表右上角【更多】→【导出】,在弹出的窗口中选择目标目录为“数智教育数据集”,点击【确定】,完成源文件导入;


- 导入完成后,返回“数智教育数据集”目录右键目录点击刷新,确认3张CSV文件均已成功导出,确保后续数据接入无遗漏。


(3)建立数据库连接
- 进入项目详情页左侧【元数据管理】模块,展开【关系数据库】节点;
- 右键点击【关系数据库】,选择【新建数据源】,弹出数据库连接配置窗口;

- 我们按以下参数配置MySQL连接:
- 连接类型:MySQL
- 服务器主机名:rm-2vc3qok06bag39a5n.mysql.cn-chengdu.rds.aliyuncs.com
- 端口号:3306
- 数据库名:助教提供的团队私有数据库名
- 用户名:助教提供的账号
- 密码:助教提供的密码
- 驱动类型:MySQL 8+
- 连接名称:团队私有数据库

- 点击【测试】按钮,验证连接是否成功,若提示“数据库连接成功”,则点击【添加】完成配置,此时关系数据库节点下会新增“团队私有数据库”子节点,我们后续的所有数据库操作都将基于这个连接。

(4)导入数据至私有数据库
① 分三个转换流分别创建原始数据表
为了结构清晰、方便管理和单独调试,我们分别新建三个独立的转换流,逐一创建三张原始数据表,每一个转换流的创建步骤如下:
- 进入【资源库】模块,右键根目录,选择【新建转换流】,命名为“创建原始_学生考勤表”,点击【确定】;


- 解锁转换流编辑状态,从组件库搜索并拖拽一个【执行一个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='原始_学生考勤表';

另外两个转换流的创建方法同上,分别命名为“创建原始_考勤类型表”和“创建原始_学生信息表”,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='原始_考勤类型表';
原始学生信息表:
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数据至原始表
- 新建转换流“导入原始考勤数据”,拖拽【CSV文件输入】和【表输出】组件至画布,建立连线并选择“主输出步骤”;




- 配置【CSV文件输入】组件:选择“数智教育数据集”目录下的3_kaoqin.csv,编码设为UTF-8,列分隔符默认,右键【获取字段】加载文件字段;




- 配置【表输出】组件:数据库连接选择“团队私有数据库”,目标表选择raw_attendance,右键【获取字段】建立文件字段与表字段的映射关系,运行转换流导入数据;




- 我们重复上述步骤,创建“导入原始_考勤类型数据”导入4_kaoqintype.csv至raw_attendance_type表(注意:该文件列分隔符为“制表符(TAB)”,编码为GB2312,需手动修改配置);



- 导入2_student_info.csv至raw_student_info表(注意:该文件中bf_zhusu等字段为整数类型,需通过【字段选择】组件规范类型,避免出现小数问题);




拖拽【字段选择】组件至画布并建立与【学生信息】的连接

编辑【字段选择】组件,将“bf_zhusu”和“bf_qinshihao”字段设置如下:


添加一个【表输入】组件并连接表输出组件写入 raw_student_info,执行转换流完成导入。


- 每步导入完成后,我们可以通过数据库查询工具校验表中数据是否完整,确保数据导入无误后再进行下一步操作。
(5)创建目标结果表
- 新建转换流“创建学生考勤主题标签表”,拖拽【执行一个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='学生考勤主题标签表';
- 运行转换流,通过日志确认目标表创建成功,这张表将存储我们最终的考勤标签结果。

学生考勤主题标签构建
- 进入【资源库】模块,右键根目录,选择【新建转换流】,输入名称“学生考勤主题标签”,点击【确定】;
(1)数据接入:获取考勤记录、考勤类型数据、学生信息数据
首先,我们需要获取考勤记录、考勤类型数据、学生信息数据。考勤记录表记录了每位学生每天的考勤行为,考勤类型表定义了每种考勤行为对应的类型名称(如正常考勤、没穿校服等),学生信息表提供了学生是否住校的核心属性。只有将这三份数据分别接入并后续关联起来,才能完整判断学生的每次考勤是正常还是违纪,同时支撑住校相关维度的统计。
- 切换到资源库,同样右键根目录,点击 “新建转换流”

- 输入转换流名字 “学生考勤主题标签”,点击 “确定”

- 创建成功后进入转换流设计页面转换流设计页面每次打开都是锁定状态,需要解锁后才可编辑转换流,点击🔒图标进行解锁,点击 “组件库”,搜索 “表输入”,拖拽 3 个表输入组件至画布中

双击第一个表输入组件,在配置窗口中,步骤名称修改为 “考勤记录”,数据库连接选择 “团队私有数据库”,并点击 “获取 SQL 查询语句”在数据库中选择 “raw_attendance” 原始_学生考勤表
系统提示弹窗中点击 “确认”,获取 “raw_attendance” 考勤记录表的所有字段
获取 SQL 查询语句后,点击 “确认”


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




(2) 数据关联:关联考勤记录 + 考勤类型
使用表输入组件读取考勤记录、考勤类型数据后,需通过记录集连接组件完成数据关联,补充关键业务信息,为后续指标计算奠定基础。使用记录集连接组件,将考勤主表与考勤类型码表关联 —— 因为考勤记录表只有考勤类型 ID 和考勤任务顺序 ID,缺少具体的考勤行为名称,而通过记录集连接组件进行连接,即可为每条考勤记录补充 “正常考勤”“没穿校服”“迟到”“请假” 等具体行为信息,确保后续能准确识别各类考勤行为。具体操作如下:
- 在组件库搜索 “记录集连接” 组件,并将组件拖拽至画布中

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


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



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

- 需要通过记录集连接组件来配置 “考勤记录” 和 “考勤类型” 两个表的关联关系。双击记录集连接组件,在下拉列表中选择需要连接的数据来源,第一个 Transform 选择 “按照考勤类型和考勤任务类型排序”,第二个 Transform 选择 “考勤类型”,连接类型选择 LEFT OUTER

- 分别点击两个 Transform 的连接字段中的 “获得连接字段” 按钮,即可获取两个 Transform的连接字段,两 个 Transform 字段中仅保留 “attendance_type_id”、“attendance_task_order_id” 字段,这样做表示使用这 2 个字段进行记录连接。可以使用 “删除选中的行” 批量删除多个字段。


- 删除完多余字段后,点击 “确认”。

(3)行为标签衍生:统计学生异常考勤次数
通过 Javascript 脚本生成考勤行为二进制标记,为后续聚合统计提供支撑,确保标签判断精准。具体操作如下:
- 添加 “JavaScript 代码” 组件,对接 “记录集连接” 组件的输出,通过关键词匹配,生成二进制判断标签(1 = 是,0 = 否),用于后续指标聚合。

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

// 初始化标记变量(1=是,0=否)
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;
}
- 使用 “获取变量” 获取输出字段,系统将自动解析脚本中变量定义代码,生成字段数据。
- 点击 “JavaScript 脚本” 组件的 “测试脚本” 按钮,确认标记字段仅存在 1 和 0 两个值,标签判断准确,无异常。

(4) 多维度分组聚合统计
实验核心:按两大统计维度聚合数据,将明细数据转化为统计指标,满足多层级考勤管理需求。具体操作如下:在助睿 ETL 平台拖拽 2 个 “分组” 组件,分别对接 “JavaScript 代码” 组件的输出,按统计维度进行聚合,统一聚合指标。聚合规则
- 聚合函数:SUM(迟到标记)→ 迟到次数;
- 聚合函数:SUM(早退标记)→ 早退次数;
- 聚合函数:SUM(请假标记)→ 请假次数;
- 聚合函数:SUM(没穿校服标记)→ 没穿校服次数。
操作如下:
- 添加 “分组” 组件,并建立连接线,连线选择 “主输出步骤”


- 双击 “分组” 组件,设置分组字段为 “stu_id”、“stu_name”、“cla_id”、“cla_name”并设置聚合字段为对应考勤标记字段,汇总得到各类考勤次数。

(5)关联学生信息
基于上述结果,使用记录集连接组件,关联学生信息表 —— 因为考勤记录表仅包含学生 ID 和班级 ID,缺少学生是否住校的核心属性,通过按学生 ID 关联学生信息表,可补全该属性,支撑住校相关维度的统计。具体操作如下:
- 由于 “学生信息” 数据表中的学号不是升序记录的,所以在进行记录关联前,也需要对数据进行排序。再次添加 “排序记录”,并建立 “学生信息” 表输入组件到 “排序记录” 组件的连接线。


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

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

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

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

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

- 记录集连接 1 组件的第一个 Transform 选择 “考勤数据按学号排序”,第二个 Transform 选择 “按照学生编号进行排序”,连接类型选择 LEFT OUTER。分别获取两个 Transform 的连接字段,第一个 Transform 字段保留 “stu_id”,第二个 Transform 字段保留 “stu_id”。


- 点击 “确认” 完成配置。
(6)字段选择:移除冗余字段
经过多表关联和前期接入,数据中会包含大量与考勤统计无关的字段,需要对关联后的数据进行冗余字段移除,因为这些冗余字段不仅会增加数据处理的负担,还可能导致后续聚合、计算出现干扰,只有移除冗余字段,保留核心有用字段,才能提升处理效率,确保统计逻辑清晰。具体操作如下:
- 搜索 “字段选择”,拖拽至画布中,创建 “记录集连接 1” 组件到字段选择组件的连接线。

- 双击字段选择组件,在配置弹窗中,步骤名称输入 “移除冗余字段”,点击 “移除” Tab 标签,右键空白处并点击 “获取字段”在获取的字段中,保留学生 ID、学生姓名、班级 ID、班级名称、各类考勤次数、性别、出生日期、政治面貌、是否住校等核心字段,其余全部删除。。

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

(7) 空值处理
3 个数据表关联后,字段 “stu_sex”、“born_date”、“policy”、“live_on_campus” 存在空值,需要对这些空值进行处理。拖拽 “替换 NULL 值” 组件至画布,创建 “移除冗余字段” 字段选择组件到 “替换 NULL 值” 组件的连线,连线类型选择 “主输出步骤”。双击 “替换 NULL 值” 组件,勾选 “选择字段”,在字段空白表格中右键点击 “插入”,依次添加 stu_sex、born_date、policy、live_on_campus,将空值统一替换为 “未知”。



(8) 学生基础属性标准化处理
1. 住校状态映射
原始住校状态以数字形式存储,可读性差且存在空值,通过映射转换为规范文本并处理空值,使标签表更直观。添加 “值映射” 组件到画布中,并创建替换 NULL 值组件到值映射组件的连线,并选择 “主输出步骤”。双击 “值映射” 组件,步骤名称改为 “住校状态映射”,使用的字段名为 “live_on_campus”,不匹配时的默认值为 “未知”。在下方字段值表格空白处右键插入行,源值 0 映射为否、源值 1 映射为是,完成配置确认。



2 从班级名提取年级
原始数据无独立年级字段,无法按年级做考勤统计与画像分群,通过从班级名称中提取年级信息,补齐年级维度。拖拽 “JavaScript 代码” 组件至画布中,创建住校状态映射组件到 JavaScript 代码组件的连线。双击 “JavaScript 代码” 组件,步骤名称改为 “从班级提取年级”,输入对应脚本代码,定义 grade 字段并设置为 String 类型。


var grade;
if (cla_name == null || cla_name === "") {
grade = "未知";
} else if (cla_name.includes("高一")) {
grade = "高一";
} else if (cla_name.includes("高二")) {
grade = "高二";
} else if (cla_name.includes("高三")) {
grade = "高三";
} else {
grade = "未知";
}
3.校区类型判定
参考从班级名提取年级步骤,添加 “JavaScript 代码” 组件,命名为 “校区类型判定”,输入对应脚本代码,根据班级名称前缀判断新校区、老校区,输出 campus_type 字段。


var campus_type;
if (cla_name == null || cla_name === "") {
campus_type = "未知";
} else if (cla_name.startsWith("白-") || cla_name.startsWith("东-")) {
campus_type = "新校区";
} else {
campus_type = "老校区";
}
4.结果入库
实验核心:将统计结果写入目标表,形成标准化台账,便于后续查询、分析和追溯。具体操作如下:
- 添加表输出组件,并创建 “校区类型判定” JavaScript 代码组件到表输出组件的连线。

- 双击表输出组件,选择 “团队私有数据库” 连接。勾选 “裁剪表”,避免重复插入数据。勾选 “指定数据库字段”

3.右键获取字段,逐一匹配工作流字段与目标表字段映射关系。

5.执行工作流
- 执行转换流,点击工具栏中的 “执行” 按钮。

- 在弹出执行配置窗口中,选择默认配置,然后点击 “启动” 按钮,启动工作流。

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

- 查看数据库结果:
打开 “元数据” tab 页,在 “团队私有数据库” 连接上右键选择 “加载元数据”,展开数据库,双击目标表 student_attendance_stats,切换查询标签,执行查询,核验数据是否符合预期。




三、实验结果
结果文件对照表
|
输出表名称 |
核心字段 |
内容说明 |
应用场景 |
|
student_attendance_stats(学生考勤主题标签表) |
student_id(学生ID)、student_name(姓名)、class_id(班级ID)、class_name(班级名称)、grade(年级)、gender(性别)、birth_date(出生日期)、political_status(政治面貌)、is_boarder(是否住校)、campus_type(校区类型)、late_count(迟到次数)、early_leave_count(早退次数)、leave_count(请假次数)、uniform_violate_count(未穿校服次数) |
包含学生基础属性、画像维度、多维度考勤统计指标的标准化标签表,数据经过我们清洗、关联、衍生、聚合处理,无空值、口径统一 |
1. 按班级/年级/校区统计考勤情况;2. 分析住校生与走读生考勤差异;3. 识别考勤异常学生(如迟到次数过多);4. 生成校园考勤管理报表 |
实验整体达成效果
通过本次实验,我们成功完成了学生考勤主题标签的全流程构建,达成以下效果:
- 数据处理闭环:我们实现了从CSV源数据接入、多表关联、数据清洗、标签衍生、聚合统计到结果落地的完整ETL流程,无数据丢失或异常;
- 统计口径统一:我们固化了迟到、早退、请假、未穿校服的统计规则(如排除请假情况下的迟到/早退统计),解决了人工统计口径不统一的问题;
- 数据质量达标:所有空值字段均已被我们替换为“未知”,编码值已标准化映射,年级与校区类型提取准确,考勤次数统计无误差;
- 业务需求满足:我们输出的标签表包含多维度分析字段,可支撑校园按班级、年级、校区、住校状态等分层管理,为考勤决策提供数据支撑;
- 转换流稳定运行:整个转换流无报错,执行效率高,可重复调度使用,真正实现了自动化考勤统计。
四、核心组件说明
在本次实验中,我们使用了多个核心组件,它们的作用、配置要点和注意事项如下,帮助大家加深理解:
|
组件名称 |
核心作用 |
实验配置要点 |
注意事项 |
|
表输入 |
读取数据库中原始数据表数据,为后续处理提供数据源 |
1. 正确选择数据库连接;2. 通过“获取SQL查询语句”加载字段,避免手动输入错误 |
确保原始表已创建且有数据,否则会读取失败 |
|
排序记录 |
对数据按指定字段排序,为记录集连接提供有序数据 |
1. 选择与关联字段一致的排序字段;2. 排序方式统一为升序 |
必须在记录集连接前使用,否则关联结果可能出错 |
|
记录集连接 |
实现多表关联,补充缺失的业务字段或属性 |
1. 正确选择两个数据源(Transform);2. 选择合适的连接类型(如LEFT OUTER确保主表数据不丢失);3. 仅保留关联字段,删除其他冗余字段 |
两个数据源必须按关联字段排序,否则关联结果混乱 |
|
JavaScript脚本 |
实现复杂逻辑处理(如条件判断、字段衍生) |
1. 处理字段空值,避免空指针异常;2. 变量命名规范,逻辑清晰;3. 正确定义输出字段及类型 |
脚本编写完成后,通过“测试脚本”验证逻辑正确性 |
|
分组 |
按指定维度聚合统计数据,将明细数据转化为指标 |
1. 明确分组维度(如学生ID、班级ID);2. 选择正确的聚合函数(如SUM用于计数);3. 为聚合结果字段命名规范 |
分组字段需选择唯一标识维度的字段,避免统计重复 |
|
替换NULL值 |
处理数据空值,确保数据完整性 |
1. 识别所有可能为空的关键字段;2. 设置合理的默认值(如“未知”“0”) |
避免默认值与业务数据冲突(如用“未知”而非空字符串) |
|
值映射 |
将编码值转换为可读文本,提升数据可读性 |
1. 明确源值与目标值的映射关系;2. 设置不匹配默认值,避免遗漏 |
需提前梳理编码规则(如0=否、1=是),确保映射准确 |
|
表输出 |
将处理后的数据写入目标数据库表 |
1. 正确选择目标表;2. 勾选“裁剪表”避免重复数据;3. 确保字段映射一一对应 |
目标表字段类型需与工作流字段类型匹配,否则写入失败 |
五、问题与解决
在实验过程中,我们可能会遇到以下常见问题,这里为大家提供详细的解决方法,帮助大家快速排查:
问题1:导入4_kaoqintype.csv时字段错乱,无法正确映射
- 问题描述:使用CSV文件输入组件读取4_kaoqintype.csv时,字段显示混乱,部分字段合并或拆分,无法与目标表字段匹配;
- 原因分析:该CSV文件的列分隔符为制表符(TAB),而非默认的逗号,编码为GB2312,与平台默认配置(逗号分隔、UTF-8编码)不一致;
- 解决方法:在CSV文件输入组件配置中,我们将列分隔符改为“插入制表符(TAB)”,编码改为GB2312,重新点击“获取字段”,字段显示正常,成功完成映射。
问题2:记录集连接组件执行失败,提示“数据无序”
- 问题描述:配置考勤记录与考勤类型表的关联后,执行转换流时,记录集连接组件报错,提示“输入数据无序,无法完成关联”;
- 原因分析:记录集连接组件依赖有序数据进行匹配,若输入的两个数据源未按关联字段排序,会导致关联逻辑出错;
- 解决方法:我们在考勤记录组件与记录集连接组件之间、考勤类型组件与记录集连接组件之间,分别添加排序记录组件,按关联字段(attendance_type_id、attendance_task_order_id)升序排序,重新执行后关联成功。
问题3:JavaScript脚本生成的考勤标记全为0,统计结果为0
- 问题描述:转换流执行成功,但目标表中所有学生的考勤次数(late_count、early_leave_count等)均为0,查看脚本输出日志发现标记变量全为0;
- 原因分析:脚本中未处理字段空值情况,当attendance_type_name或attendance_task_name为null时,直接跳过判断逻辑,导致标记变量始终为0;
- 解决方法:我们在脚本开头添加空值判断(如
if(attendance_type_name != null && attendance_task_name != null)),确保字段为空时不执行匹配逻辑;同时修正请假判断的独立逻辑,避免被其他条件覆盖,修改后重新执行,标记变量可正确取值,统计结果正常。
问题4:表输出组件执行失败,提示“字段类型不匹配”
- 问题描述:执行转换流时,表输出组件报错,提示“stu_id字段类型为VARCHAR,目标表字段为INT,无法插入”;
- 原因分析:原始表中stu_id字段类型为VARCHAR,而目标表student_attendance_stats中student_id字段类型为INT,字段类型不兼容;
- 解决方法:我们修改目标表创建SQL,将student_id字段类型改为VARCHAR(与原始表一致),重新创建目标表后,字段映射正常,数据成功写入。
六、实验总结
实操技能掌握情况
通过本次实验,我们系统掌握了助睿零代码ETL平台的全流程操作,具体包括:项目创建、文件库目录管理、MySQL数据源连接配置、CSV数据导入数据库、原始表与目标表创建、转换流搭建、核心组件(表输入、排序记录、记录集连接、JS脚本、分组、空值替换、值映射、表输出)的精准配置、转换流执行与调试、日志分析与问题排查、结果表数据校验等实操技能。我们能够独立应对数据接入、多表关联、字段衍生、聚合统计等核心业务场景,具备了从零搭建主题标签类ETL转换流的实战能力,同时提升了数据库操作(表创建、数据查询、字段类型调整)的辅助技能。
ETL流程理解收获
本次实验让我们对ETL“抽取(Extract)—转换(Transform)—加载(Load)”的核心逻辑有了更深刻的认知:
- 抽取阶段:核心是“数据接入”,我们需要确保源数据完整、准确导入数据库,为后续处理奠定基础,关键在于适配不同数据源的格式(如CSV的分隔符、编码);
- 转换阶段:是ETL的核心环节,我们需要结合业务需求进行多步骤处理,包括多表关联(补充字段)、数据清洗(去冗余、处理空值)、字段衍生(JS脚本生成标签)、聚合统计(按维度汇总指标)、标准化处理(值映射、维度提取),每一步都需围绕“数据质量”和“业务口径”展开;
- 加载阶段:核心是“数据落地”,我们需要确保字段映射准确、数据类型兼容,避免重复数据,形成可直接使用的业务台账。
同时,我们深刻理解了星型数据模型在主题标签构建中的应用:以考勤主表(事实表)为核心,关联考勤类型表、学生信息表(维度表),通过维度表补充业务含义与基础属性,再按业务规则聚合统计,真正体会到“先建模、再关联、后计算”的规范化数据处理思想,为后续复杂主题标签构建提供了思路。
零代码平台对比传统方式的优势与体会
对比传统的Excel人工统计或手动编写SQL处理数据的方式,我们切实感受到助睿零代码ETL平台的显著优势:
- 开发效率高:无需编写大量复杂SQL或代码,通过拖拽组件、可视化配置即可完成流程搭建,大幅缩短开发周期(本次实验若手动编写SQL关联多表、统计指标,需数十行代码,而零代码平台仅需我们配置组件);
- 流程可视化:整个数据处理逻辑以图形化方式呈现,组件之间的连线清晰,便于我们理解、检查和修改,后续维护成本低;
- 口径统一固化:将统计规则、空值处理、映射逻辑等全部固化在转换流中,避免我们人工统计时的规则遗忘、口径混乱问题,确保数据一致性;
- 可复用可扩展:搭建好的转换流可重复调度(如每日自动统计考勤),后续新增考勤类型(如“旷课”)或新增分析维度(如“民族”),我们只需微调组件配置(如修改JS脚本、增加分组字段),无需重构流程,适配性强;
- 自动化程度高:一次配置完成后,可自动执行从数据接入到结果落地的全流程,省去我们人工合并数据、计算指标、校验结果的重复工作量,减少人为失误。
不足与改进方向
本次实验也让我们发现了一些不足:我们对组件配置的细节关注不够,如字段类型匹配、排序字段选择等,导致部分组件执行失败。后续我们的改进方向:
- 配置组件时,仔细核对字段类型、映射关系、排序规则等细节,减少因配置失误导致的返工;
- 尝试更复杂的业务场景,如增加时间维度统计(按周/月统计考勤)、新增多条件筛选逻辑,进一步提升ETL应用能力。
总体而言,本次助睿零代码ETL实验让我们切实掌握了数据处理的核心技能,建立了规范化的ETL思维,深刻体会到零代码平台在数据分析、业务台账构建中的实用价值,为后续从事大数据处理、校园信息化管理等相关工作打下了坚实基础
更多推荐




所有评论(0)