新手友好!基于零代码平台学生用户画像-考勤主题标签构建全流程演示
一、实验背景
1.1实验目的
基于数智教育大赛数据集,设计并搭建学生多维度考勤统计助睿 ETL 转换流程,完整覆盖数据接入、关联匹配、字段衍生、指标聚合、数据落地全 ETL 处理链路。针对校园考勤人工统计效率低下、统计口径不统一等痛点开展专项解决;同时结合实验真实数据特征,优化空值及异常数据处理逻辑,保障 ETL 转换流稳定可靠运行,输出高精度、多维度的考勤统计结果,为校园考勤精细化管理提供坚实的数据支撑与决策依据。
1.2实验环境
- 零代码在线实验平台:助睿数智平台
- “数智教育”大赛数据集(共包含7张核心业务表)
- 计算机(支持助睿ETL平台运行,具备数据库连接权限)
1.3实验流程
转换流核心逻辑:依次接入三大业务数据源,经多表关联融合后完成考勤行为类型标记、考勤核心指标计算,再关联学生基础属性信息,最终落地生成多维度考勤统计结果,实现考勤数据处理全流程自动化;整体流程依托助睿 ETL 平台可视化界面即可完成全链路配置与调度。
二、实验步骤
2.1创建项目
点击新建项目并命名为“学生用户画像标签构建”,最后点击“确定”即可完成项目创建。
2.2 数据获取
2.2.1 实验数据集获取
点击项目右上角“…”打开项目
点击文件库,在根目录右键选择新建目录,输入目录名称为“数智教育数据集”,点击“确定”
点击“公告空间”
点击“数据资源”
点击“3_kaoqin.csv”右上角的“更多”,并点击“导出”,在弹出的窗口中选择刚刚创建的“数智教育数据集”,并点击“确定”
接下来重复导出3_kaoqin.csv的操作将本次实验要用到的 4_kaoqintype.csv 和 2_student_info.csv 都导出到“数智教育数据集”
2.2.2 建立数据源连接
选择元数据,关系数据库右键打开菜单,选择“新建数据源”
在弹出的新窗口中,连接类型选择“MySQL”,用户名和密码使用课程提供的账号和密码。服务器主机名使用“rm-2vc3qok06bag39a5n.mysql.cn-chengdu.rds.aliyuncs.com”,端口号为3306,数据库名为用户名,驱动类型选择“MySQL 8+”,连接名称为“团队私有数据库”;配置完成后先点“击测试“,若测试通过,点击”添加“。
2.2.3 数据导入数据库
2.2.3.1导入原始考勤记录数据
选择资源库并右键根目录,选择新建转换流,并命名为“创建原始_学生考勤表”
所以转换流每次打开都是锁定状态,想要编辑需要先解除锁定
在组件库中搜索“执行一个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='原始_学生考勤表';完成后运行转换流,运行过程中会定时刷新组件状态,可通过画布下方显示的执行日志查看情况
新建转换流,命名为“导入原始考勤数据”,在组件库中搜索拖拽一个“CSV文件输入”组件到该转换流画布
双击CSV文件输入组件,进入组件配置界面后按照图中步骤进行配置
在下方空白处右键即可打开菜单,选择获取字段,字段获取成功后点击“确认”
接下来再搜索并拖拽一个“表输出”组件到画布
建立CSV文件输入组件到表输出组件的连接,连线类型选择“主输出步骤“
双击“表输出”组件,在组件配置界面,数据库连接选择“团队私有数据库”,目标表选择我们使用SQL组件创建的“raw_attendance”,具体匹配如图:
点击“数据库字段”,在空白处右键“获取字段”
将表字段修改为建表语句中对应的字段,点击“确认”
完成后运行转换流,运行过程中会定时刷新组件状态,可通过画布下方显示的执行日志查看运行情况
2.2.3.2导入原始考勤类型数据
操作同“导入原始考勤记录数据”实验操作,先创建“创建原始_考勤类型表“转换流完成表的创建,再创建“导入原始考勤类型数据”转换流将4_kaoqintype.csv的数据导入到团队私有数据库,详细配置如下:
“执行一个SQL脚本”组件配置:
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”
“表输出”组件配置:
2.2.3.3导入原始学生基本信息数据
操作同“导入原始考勤记录数据”实验操作,先创建“创建原始_学生信息表“转换流完成表的创建,再创建“导入原始学生基本信息数据”转换流将2_student_info.csv的数据导入到团队私有数据库。在导入原始学生基本信息数据转换流中,因为原始表中bf_zhusu、bf_qinshihao 这2个字段是Integer,为避免出现小数,需要使用“字段选择”组件来固化并规范,所以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文件输入组件配置:
注意封闭符改为了“-”
建立CSV文件输入组件与字段选择组件的连接,选择主输出步骤
字段选择组件配置:
表输出组件配置:
2.2.3.4创建学生考勤主题标签表
新建转换流,并命名为“创建学生考勤主题标签表”,在该工作流中拖拽“执行一个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='学生考勤主题标签表';2.3 考勤标签构建
数据流转严格遵循数据接入、清洗整合、维度拆解、标签标注、指标核算、成果落地全流程核心逻辑:
- 数据接入:汇聚考勤原始打卡数据、考勤类型对照表、学生基础信息表等源头数据;
- 清洗整合:完成多表数据关联匹配,为打卡记录精准绑定学生班级、住宿属性、考勤事件等基础信息;
- 维度拆解:拆分统计维度,划分不同统计口径与分析层级;
- 标签标注:依托考勤事件自动归类识别迟到、早退、请假、仪容不规范等异常行为;
- 指标核算:按日精准测算学生在校时长,多维度汇总统计各类考勤异常频次;
- 成果落地:将最终统计数据统一归档至考勤结果数据表,支撑数据查询、报表生成与深度分析应用。
2.3.1 数据接入
首先,我们需要获取考勤记录、考勤类型数据、学生信息数据。有了这三份数据接入并后续关联起来,才能完整判断学生的每次考勤是正常还是违纪,同时支撑相关维度的统计。
创建“学生考勤主题标签”转换流,拖拽三个表输入组件到画布
双击第一个表输入组件进入配置界面进行如下配置
获得完整SQL查询语句后点击确定,另外两个表输入组件同上操作,分别命名为“考勤类型”和“学生信息”,分别获取“raw_attendance_type”考原始_考勤类型表和“raw_student_info”原始_学生信息表所有字段数据
2.3.2 数据处理与转换流建立
首先关联考勤记录与考勤类型:
在组件库搜索“记录集连接”组件,并将组件拖拽至画布中,由于记录集连接组件是按接收数据的顺序进行记录关联的,如果接收的数据是无序的,可能会造成记录连接结果出错,为避免因为排序问题造成连接结果出错我们,还需要添加一个排序记录组件到转换流的“考勤记录”与“记录集连接”之间
建立连接如下
双击“排序记录”组件,设置步骤名称为“按照考勤类型和考勤任务类型排序”,然后在下方空白右键获取字段,接着删除多余字段,只保留“attendance_type_id”、“attendance_task_order_id”字段
创建“考勤类型”到记录集连接组件的连接线。因为“考勤类型”的数据默认是按“attendance_type_id”、“attendance_task_order_id”这两个字段升序记录的,所以无需再次排序
双击记录集连接组件,第一个Transform选择“按照考勤类型和考勤任务类型排序”,第二个Transform选择“考勤类型”,连接类型选择LEFT OUTER,获取字段后仅保留“attendance_type_id”、“attendance_task_order_id”字段,其余字段删除后点击确定
接下来通过Javascript脚本生成考勤行为二进制标记,为后续聚合统计提供支撑,确保标签判断精准:
添加“JavaScript 代码”组件并命名为“提取异常考勤记录”,建立 “记录集连接”组件到JavaScript 代码”组件的连接,通过关键词匹配,生成二进制判断标签(1=是,0=否)。
双击“JavaScript代码”组件,输入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; } }获取到如下变量后点击测试脚本,在预览数据中确认是否只有0或1两个值并且对应正常
确认正常后点击确认,然后我们来聚合数据,将明细数据转化为统计指标,满足多层级考勤管理需求。具体操作如下:
添加“分组”组件,并建立连接线,连线选择“主输出步骤”
双击“分组”组件,设置分组字段为“stu_id”、“stu_name”、“cla_id”、“cla_name”,聚合字段为“late_early_count”、“leave_count”、“no_uniform_count”、“compliant_count”、“total_attendance”后点击确认
我们接下来再关联“学生信息”数据,因为原始学生信息数据中的学号不是升序记录的,所以在进行记录关联前,也需要对数据进行排序。再次添加“排序记录”,并建立“学生信息”表输入组件到“排序记录”组件的连接线
双击“排序记录”组件,设置步骤名称为“按照学生编号进行排序”,通过“获取字段”功能获取字段列表,然后删除多余字段,只保留“stu_id”字段。
拖拽“记录集连接”组件至画布中,创建连接
由于考勤记录数据不是按“学号”升序记录的,所以在进行记录关联前,也需要对数据进行排序,添加排序记录组件并建立与分组的连接,排序记录组件设置如下:
创建“考勤数据按学号排序”记录排序组件到记录集连接 1组件的连线,关联学生信息和考勤记录信息
双击记录集连接组件,配置如下:
经过多表关联和前期接入,数据中会包含大量与考勤统计无关的字段,需要对关联后的数据进行冗余字段移除,保留核心有用字段。搜索添加“字段选择”,创建“记录集连接 1”组件到字段选择组件的连接线
双击字段选择组件,步骤名称设置为“移除冗余字段”,点击“移除”,右键空白处并点击“获取字段”,在获取的字段中,删除以下核心字段:
- 学生 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个数据表关联后,字段“stu_sex”、“born_date”、“policy”、“live_on_campus”存在空值,需要对这些空值进行处理。
拖拽“替换NULL值”组件至画布,创建“移除冗余字段”字段选择组件到“替换NULL值”组件的连线,连线类型选择“主输出步骤”
双击“替换NULL值”组件,勾选“选择字段”,在下方空白中右键,点击“插入”
插入四行 “stu_sex”、“born_date”、“policy”、“live_on_campus”并将它们的空值均替换为“未知”
经过多表关联与字段筛选后,缺少年级、校区类型等画像分析必需字段,无法直接用于学生考勤标签输出与后续用户画像分析。因此需要对学生基础属性进行标准化映射、缺失字段衍生,统一数据格式、补齐分析维度,保证标签表规范可用。
首先是住校状态映射:添加“值映射”组件,创建替换NULL值组件到值映射组件的连线,并选择“主输出步骤”
双击“值映射”组件,配置如下:
接着从班级名提取年级:拖拽“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='未知' }再来是校区类型判定,步骤参考“从班级名提取年级”,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='未知' }2.2.3 结果入库
添加表输出组件,并创建“校区类型判定”到表输出组件的连线
双击表输出组件,配置如下
点击数据库字段,右键选择“获取字段”,双击表字段中的字段名称,在下拉框中选择建表时的对应字段
转换流执行完成后,打开“元数据”,在“团队私有数据库”连接上右键选择“加载元数据”
然后进入数据探查页面,展开“团队私有数据库”双击目标表“student_attendance_stats”,在右侧页面选择“查询”,检查数据库表数据是否符合预期
三、实验结果
本次实验针对考勤行为设置了迟到、早退、请假、未穿校服四类标签,依托考勤事件名称完成自动识别与标签标记。实验结束后,对输出数据进行了全面校验,经逐一核查确认,所有考勤行为对应的标签添加准确无误,标签判断逻辑贴合实验预设规则,无漏标、错标情况。最终输出的多维度考勤统计结果,精准呈现了学生每日在校时长、各维度考勤异常次数等核心指标,数据格式规范、数值准确,可直接为校园考勤管理工作提供可靠的数据支撑。
四、问题与解决
4.1 问题
问题:移除冗余字段步骤中,在删除核心字段时未发现统计聚合的四个违规次数字段
4.2 原因
原因:在分组组件设置聚合字段时忘记设置聚合类型为“Sum”
4.3 解决
解决:重新设置分组组件聚合字段,将四个字段聚合类型全部设置为“Sum”
五、实验总结
本次实验以掌握ETL数据处理全流程、解决校园考勤管理痛点为核心目标,通过理论结合实践的方式,完成了学生多维度考勤统计ETL转换流的设计与实现,整体达成实验预期目标,收获了扎实的ETL实操经验与数据处理能力。通过本次实验,不仅熟练掌握了ETL数据接入、关联、衍生、聚合、落地的全流程操作,更深刻理解了数据处理过程中异常处理、逻辑优化的重要性。同时,实验过程中也积累了数据校验、逻辑调试的实操技巧,为后续开展更复杂的ETL数据处理项目提供了有力支撑。
