1 实验说明​

1.1 实验目的​

基于“数智教育”大赛数据集,设计并实现学生多维度考勤统计助睿ETL转换流,掌握ETL数据处理全流程(数据接入、关联、衍生、聚合、落地),解决校园考勤人工统计效率低、口径不统一的问题;同时结合实验实际数据情况,优化空值处理逻辑,确保转换流可正常运行,输出精准的多维度考勤统计结果,为校园考勤管理提供数据支撑。​

1.2 实验环境​

•工具:助睿数智(Uniplore)的数据集成平台(ETL)、MySQL数据库​

•数据源:“数智教育”大赛数据集(共包含7张核心业务表)​

•实验设备:计算机(支持助睿ETL平台运行,具备数据库连接权限)​

1.3 实验范围​

本次实验覆盖助睿ETL转换流全流程配置,包括多表数据接入、多表关联、考勤行为标签衍生、多维度聚合统计及结果落地入库;重点验证数据关联的精准性及统计指标的准确性,结合实验数据实际情况优化配置,确保实验顺利完成。​

2 转换流整体设计​

2.1 功能用途与业务价值​

本转换流替代人工Excel统计,实现考勤数据从原始打卡到标准化结果的闭环处理,批量输出多维度指标;同时固化口径、提升效率、沉淀台账,提供数据支撑,且可灵活扩展新考勤类型,无需修改转换流,适配校园考勤管理的核心需求。​

2.2 核心处理逻辑​

转换流核心逻辑:接入三大数据源→多表关联→标记考勤行为→计算核心指标→基础属性关联→落地统计结果,实现全流程自动化,通过助睿ETL平台可视化界面完成配置。​

3 数据与标签梳理​

根据转换流的逻辑,需要对数据与标签进行梳理,确定数据源、标签维度、标签计算口径​

3.1 源数据说明​

本次转换流处理的数据来源于“数智教育”大赛数据集,原始数据集共包含7张表:​

•1_teacher.csv:教师信息​

•2_student_info.csv:学生信息​

•3_kaoqin.csv:考勤主表​

•4_kaoqintype.csv:考勤类型码表​

•5_chengji.csv:成绩信息​

•6_exam_type.csv:考试类型​

•7_consumption.csv:消费信息​

本次实验聚焦“考勤主题”,分析以上7张数据表,可以发现与考勤行为直接相关且能支撑多维度分析的表为以下3张表:​

•3_kaoqin.csv:考勤主表,核心事实表,记录每次考勤行为​

•4_kaoqintype.csv:考勤类型码表,提供考勤行为的标准化名称,是行为标签生成的关键​

•2_student_info.csv:学生信息,提供学生基础属性(住校、性别等),支撑维度拆分​

这三张表形成了“事实表 + 维度表 + 属性表”的完整星型模型结构,各表核心作用及关键字段如下:​

数据源表

核心作用

关键字段

考勤主表(3_kaoqin)

存储学生每日原始打卡记录、考勤行为明细

学生 ID、班级 ID、学期(qj_term)、打卡时间(DataDateTime)、考勤类型 ID(ControllerID)、考勤描述(controler_name)

考勤类型码表(4_kaoqintype)

标准化考勤事件名称,区分正常与异常考勤类型

考勤类型 ID(controller_id)、考勤事件名称(control_task_name)

学生信息表(2_student_info)

提供学生基础属性,支撑多维度学生画像

学生 ID(bf_StudentID)、班级 ID(cla_id)、学生姓名(bf_Name)、性别(bf_sex)、出生日期(bf_BornDate)、政治面貌(bf_policy)、是否住校(bf_zhusu)

3.2 标签字段说明​

学生考勤主题标签可分为三类:学生基础属性标签、学生画像维度标签和考勤行为指标标签​

3.2.1 学生基础属性标签​

标签字段

数据来源

选择依据

学生 ID

考勤主表 / 学生信息表

学生唯一标识,用于关联和去重

学生姓名

考勤主表 / 学生信息表

便于结果查阅和人工核对

班级 ID

考勤主表 / 学生信息表

班级唯一标识,用于班级维度统计

班级名称

考勤主表 / 学生信息表

班级名称,用于提取年级和校区类型

性别

学生信息表

学生性别,可按性别维度分析考勤行为差异

出生日期

学生信息表

学生出生年份,可用于年龄维度分析,识别不同年龄段的考勤特点

政治面貌

学生信息表

学生政治面貌,可按政治面貌维度分析不同群体的考勤行为

选表依据:这些字段是学生的基础身份信息,主要从学生信息表(2_student_info)获取。考勤主表中也包含部分学生信息,可作为交叉验证。这些基础属性是后续分维度统计的核心依据。​

示例用途:可按性别分析男生与女生的迟到考勤差异异,可按政治面貌分析不同群体的考勤行为特点。​

3.2.2 学生画像维度标签​

标签字段

衍生逻辑

选择依据

年级

从班级名称(cla_name)中提取

学校管理常按年级做考勤统计,方便分层管理

是否住校

映射学生信息表 bf_zhusu 字段

住校生和走读生考勤行为模式不一样,方便针对性管理;规则:1 代表是、0 代表否、空值代表未知

校区类型

从班级名称(cla_name)中判断

2017 年启用新校区,新校区班级名统一为 “白 - 高二(01)”“东 - 高二(01)” 这类格式

选表依据:这三个标签字段属于衍生维度,原始数据中没有直接提供,需要根据班级名称和住校字段进行二次加工。年级维度有助于学校按年级进行考勤管理和对比分析;住校维度用于区分住校生和走读生,两者的考勤行为模式存在差异;校区类型维度源于数据说明中提到的2017-2018年新校区启用情况,不同校区的管理规则可能不同。​

示例用途:可按住校状态分析走读生是否更容易迟到,可按校区类型对比新旧校区的校服穿戴规范执行情况。​

3.2.3 考勤行为统计标签​

标签字段

选择依据

迟到次数

学生行为规范的核心指标之一

早退次数

学生行为规范的核心指标之一

请假次数

区分正常缺勤与异常缺勤

没穿校服次数

学校日常行为规范的重要维度

选表依据:这四类异常考勤行为是学校日常学生管理的核心关注点。迟到和早退反映学生的时间管理能力和纪律意识,请假次数可用于区分正常缺勤与异常缺勤,校服穿戴是学校行为规范的重要考核项。根据数据说明中的描述,“校服[移动考勤]”特指未穿校服的情况。​

示例用途:可分析学生不同异常考勤次数,判断考勤风险等级。​

3.3  标签处理口径​

所有标签口径统一固化,确保统计结果准确可比,具体如下:​

3.3.1 基础属性字段处理口径​

字段

处理方式

口径说明

学生 ID

直接读取

从考勤主表获取

学生姓名

直接读取

从考勤主表获取

班级 ID

直接读取

从考勤主表获取

班级名称

直接读取

从考勤主表获取

性别

空值替换

从学生信息表获取,空值统一替换为 “未知”

出生日期

空值替换

从学生信息表获取,空值统一替换为 “未知”

政治面貌

空值替换

从学生信息表获取,空值统一替换为 “未知”

3.3.2 衍生维度字段处理口径​

字段

处理方式

口径说明

年级

从 class_name 提取

班级名含 “高一” 归为高一、含 “高二” 归为高二、含 “高三” 归为高三,其余统一为 “未知”

是否住校

映射 + 空值替换

bf_zhusu=1 记为 “是”,bf_zhusu=0 记为 “否”,空值记为 “未知”

校区类型

从 class_name 判断

班级名以 “白 -”“东 -” 开头归为新校区,其余归为老校区

3.3.3 考勤行为指标统计口径​

指标

统计逻辑

口径说明

迟到次数

COUNT(迟到 / 晚到 AND 非请假)

考勤事件名称含 “迟到”“晚到” 关键词,同时排除请假记录,统计条数

早退次数

COUNT(早退 AND 非请假)

考勤事件名称含 “早退” 关键词,同时排除请假记录,统计条数

请假次数

COUNT(包含请假)

考勤事件名称含 “请假” 关键词的所有记录,事假、病假全部计入

没穿校服次数

COUNT(包含校服)

考勤事件名称含 “校服” 的异常违规记录条数

统计口径设计理由:​

•排除请假记录:请假属于正常缺勤,不应计入迟到或早退的违规统计,避免重复计数和误判。​

•请假全覆盖:只要考勤事件名称中包含“请假”关键词,无论事假、病假或其他类型,均计入请假次数。​

•校服违规唯一识别:根据数据说明中的描述,考勤类型中的“校服[移动考勤]”明确指未穿校服,因此包含“校服”关键词的记录即为违规。​

4 实验步骤​

4.1 创建实验项目​

点击“新建项目”​

输入项目名称“学生用户画像标签构建”,点击“确定”​

创建成功后即可在数据集成页面看到新创建的项目​

4.2 数据资源获取​

为方便后续的数据使用,我们可以将原始数据导入我们的团队私有数据库​

项目创建成功后点击该项目右上角“...”,点击“打开项目”​

在项目页面,可以看到左侧有3个菜单:资源库、文件、元数据​

资源库用于对工作流的管理,包括新建、删除、修改、查看工作流的信息;导出导入工作空间;调度管理等操作​

文件库用于保存工作流中需要用到的文件和工作流产生的文件​

元数据管理是助睿ETL的重要基石,可以为工作流定义“运行配置”、“数据库”、“flink集群”等配置​

4.2.1 获取实验数据集​

首先获取本次的实验数据集:点击“文件库”,右键根目录,点击“新建目录”​

输入目录名称为“数智教育数据集”,点击“确定”​

接下来我们将公共空间的数据资源导入到这个目录下​

点击公共空间​

点击“数据资源”​

点击“3_kaoqin.csv”卡片右上角的“更多”,并点击“导出”​

在弹出的窗口中选择导出到刚刚新创建的目录下​

点击“确定”​

可以看到在数智教育数据集的目录下,新增了3_kaoqin.csv​

接下来重复以上导出操作,将本次实验用到的数据表 4_kaoqintype.csv 和 2_student_info.csv 都导出到“数智教育数据集”​

4.2.2 建立数据源连接​

在元数据tab页,关系数据库右键打开菜单,选择“新建数据源”​

弹出新建数据库连接窗口,连接类型选择“MySQL”,用户名和密码使用助教提供的账号和密码。服务器主机名使用助教提供的数据库连接地址“rm-2vc3qok06bag39a5n.mysql.cn-chengdu.rds.aliyuncs.com”,端口号为3306,数据库名为助教提供的数据库名称,驱动类型选择“MySQL 8+”,连接名称为“团队私有数据库”​

完整参数参考如下:

填写完毕后,点击“测试”按钮验证填写信息是否正确,如果填写无误,会返回“数据库连接成功”​

最后,点击“添加”增加了一个数据库连接。添加成功后,关系数据库节点会增加一个子节点。

4.2.3 数据导入团队私有数据库​

4.2.3.1 原始考勤记录表数据导入​

(1)创建原始_学生考勤表​

新建转换工作流,并命名为“创建原始_学生考勤表”,在该工作流中拖拽“执行一个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='原始_学生考勤表';

其他参数使用默认选项,完成后组件配置如下:​

完成后运行转换流,运行过程会定时刷新组件状态,并画布下面显示执行日志。​

(2)导入原始考勤数据​

新建转换工作流,并命名为“导入原始考勤数据”,在该工作流中拖拽一个“CSV文件输入”组件到画布​

双击CSV文件输入组件,在步骤名称中输入“考勤记录”​

点击文件名后的“浏览文件”按钮,在弹出的窗口中选择“3_kaoqin.csv”,点击“确定”​

列分隔符和封闭符使用默认参数,编码选择“UTF-8”​

下滑在字段表格中空白处右键点击“获取字段”

字段获取成功后点击“确认”​

接下来拖拽一个“表输出”组件到画布,并创建“考勤记录”CSV文件输入组件到“表输出”组件的连线,连线类型选择“主输出步骤”​

双击“表输出”组件,基本配置中,数据库连接选择“团队私有数据库”,目标表输入我们使用SQL组件创建的“raw_attendance”,具体配置如下:​

​ ​

点击“数据库字段”,在空白处右键“获取字段”​

将表字段修改为建表语句中对应的字段,点击“确认”​

完成后运行转换流,运行过程会定时刷新组件状态,并画布下面显示执行日志。​

4.2.3.2 原始考勤类型表数据导入​

参照“4.2.3.1 原始考勤记录表数据导入”小节的实验操作,完成原始考勤类型表“4_kaoqintype.csv”数据导入到团队私有数据库​

其中的建表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”​

表输出组件的配置与“4.2.3.1 原始考勤记录表数据导入”小节的一样​

配置完成后执行转换流,运行过程会定时刷新组件状态,并画布下面显示执行日志​

4.2.3.2 原始学生基本信息表数据导入​

参照“4.2.3.1 原始考勤记录表数据导入”小节的实验操作,完成原始学习基本信息表“2_student_info.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文件输出”组件输入“2_student_info.csv”数据​

获取字段时,需要将“bf_leaveSchool”的字段类型修改为“String”​

特别说明:bf_zhusu、bf_qinshihao 这2个字段是Integer,为避免出现小数,需要使用“字段选择”组件来固化并规范​

拖拽“字段选择”组件到画布中,创建“CSV文件输入”组件到“字段选择”组件的连线,连接线类型选择“主输出步骤”​

​双击“字段选择”组件,在配置窗口中,点击“元数据”,并在空白处插入2行,将“bf_zhusu”、“bf_qinshihao”字段的元数据设置如下:​

使用“表输出”组件将“2_student_info.csv”数据输出到团队私有数据库的“raw_student_info”中​

执行转换流:​

4.2.4 创建学生考勤主题标签表​

新建转换工作流,并命名为“创建学生考勤主题标签表”,在该工作流中拖拽“执行一个SQL脚本”组件,通过执行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='学生考勤主题标签表';

其他参数使用默认选项,完成后组件配置如下:​

完成后运行转换流,运行过程会定时刷新组件状态,并画布下面显示执行日志。​

4.3 学生考勤主题标签构建​

4.3.1 数据转换流逻辑说明​

转换流遵循“数据接入—清洗整合—维度拆解—标签标记—指标计算—结果落地”的核心逻辑:​

数据接入:接入考勤原始打卡表、考勤类型码表、学生信息基础表​

数据整合:多表关联,给原始打卡记录绑定学生班级、住校属性、考勤事件名称​

标签标记:通过考勤事件名称自动识别迟到、早退、请假、未穿校服等行为​

指标计算:按日核算在校时长,按多维度聚合统计各类异常次数​

结果落地:统一写入考勤统计结果表,供报表、查询、分析直接使用​

整体逻辑:

各组件作用:

​4.3.2 数据接入:获取考勤记录、考勤类型数据、学生信息数据

首先,我们需要获取考勤记录、考勤类型数据、学生信息数据。考勤记录表记录了每位学生每天的考勤行为,考勤类型表定义了每种考勤行为对应的类型名称(如正常考勤、没穿校服等),学生信息表提供了学生是否住校的核心属性。只有将这三份数据分别接入并后续关联起来,才能完整判断学生的每次考勤是正常还是违纪,同时支撑住校相关维度的统计。​

1.切换到资源库,同样右键根目录,点击“新建转换流”​

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

3.创建成功后进入转换流设计页面​

4.转换流设计页面每次打开都是锁定状态,需要解锁后才可编辑转换流,点击🔒图标进行解锁​

5.点击“组件库”,搜索“表输入”,拖拽3个表输入组件至画布中​

双击第一个表输入组件,在配置窗口中,步骤名称修改为“考勤记录”,数据库连接选择“团队私有数据库”,并点击“获取SQL查询语句”​

在数据库中选择“raw_attendance”原始_学生考勤表​

系统提示弹窗中点击“确认”,获取“raw_attendance”考勤记录表的所有字段​

获取SQL查询语句后,点击“确认”​

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

4.3.3 数据关联:关联考勤记录+考勤类型​

使用表输入组件读取考勤记录、考勤类型数据后,需通过记录集连接组件完成数据关联,补充关键业务信息,为后续指标计算奠定基础。​

使用记录集连接组件,将考勤主表与考勤类型码表关联——因为考勤记录表只有考勤类型ID(attendance_type_id)和考勤任务顺序ID(control_task_order_id ),缺少具体的考勤行为名称,而通过记录集连接组件进行连接,即可为每条考勤记录补充“正常考勤”“没穿校服”“迟到”“请假”等具体行为信息,确保后续能准确识别各类考勤行为。具体操作如下:​

1.在组件库搜索“记录集连接”组件,并将组件拖拽至画布中​

2.创建“考勤记录”CSV文件输入组件到记录集连接组件的连接线​

3.在建立连接线时,会出现“排序需要”的提示。这是由于记录集连接组件是按接收数据的顺序进行记录关联的,如果接收的数据是无序的,可能会造成记录连接结果出错。​

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

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

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

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

8.点击第一个Transform的连接字段中的“获得连接字段”按钮,即可获取考勤记录的字段​

9.获取第二个Transform的连接字段​

10.2个Transform字段中仅保留“attendance_type_id”、“attendance_task_order_id”字段,这样做表示使用这2个字段进行记录连接。可以使用“删除选中的行”批量删除多个字段。​

11.删除完多余字段后,点击“确认”,若删除错误,可重新获取连接字段再进行删除​

4.3.4 行为标签衍生:统计学生异常考勤次数​

通过Javascript脚本生成考勤行为二进制标记,为后续聚合统计提供支撑,确保标签判断精准。具体操作如下:​

1.添加“JavaScript 代码”组件,对接“记录集连接”组件的输出,通过关键词匹配,生成二进制判断标签(1=是,0=否),用于后续指标聚合:​

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

脚本代码如下:​

// 初始化变量(迟到、早退分开)

var isLate = 0;

var isEarly = 0;

var isLeave = 0;

var isNoUniform = 0;

// 判断条件(替换后的正确字段)

if(attendance_type_name != null && attendance_task_name != null){

  // 1. 迟到判断(包含迟到、晚到,排除请假)

  if((attendance_type_name.includes("迟到") ||

      attendance_type_name.includes("晚到") ||

      attendance_task_name.includes("迟到") ||

      attendance_task_name.includes("晚到")) &&

      !attendance_task_name.includes("请假")){

    isLate = 1;

  }

  // 2. 早退判断(排除请假)

  if((attendance_type_name.includes("早退") ||

      attendance_task_name.includes("早退")) &&

      !attendance_task_name.includes("请假")){

    isEarly = 1;

  }

  // 3. 没穿校服标记

  if((attendance_type_name.includes("校服") ||

      attendance_task_name.includes("校服")){

    isNoUniform = 1;

  }

}

// 4. 请假标记

if(attendance_task_name != null){

  if(attendance_task_name.includes("请假")){

    isLeave = 1;

  }

}

3.使用“获取变量”获取输出字段,系统将自动解析脚本中变量定义代码,生成字段数据​

4.点击“JavaScript脚本”组件的“测试脚本”按钮,确认标记字段(is_late_early、is_leave等)仅存在1和0两个值,标签判断准确(如迟到记录对应is_late_early=1,正常出勤对应is_compliant=1),无异常。​

预览数据如下:​

4.3.5 多维度分组聚合统计​

实验核心:按两大统计维度聚合数据,将明细数据转化为统计指标,满足多层级考勤管理需求。具体操作如下:​

在助睿ETL平台拖拽2个“分组”组件,分别对接“用户自定义Java表达式”组件的输出,按两大统计维度进行聚合,统一聚合指标,确保数据全覆盖:​

聚合规则

聚合函数:SUM(迟到标记)→ 迟到次数(late_count);

聚合函数:SUM(早退标记)→ 早退次数(early_count);

聚合函数:SUM(请假标记)→ 请假次数(leave_count);

聚合函数:SUM(没穿校服标记)→ 没穿校服次数(no_uniform_count)

操作如下:

1.添加“分组”组件,并建立连接线,连线选择“主输出步骤”​

2.双击“分组”组件,设置分组字段为“stu_id”、“stu_name”、“cla_id”、“cla_name”​

3.设置聚合字段为“late_early_count”、“leave_count”、“no_uniform_count”、“compliant_count”、“total_attendance”​

4.3.6 关联学生信息​

基于上述结果,使用记录集连接组件,关联学生信息表——因为考勤记录表仅包含学生ID和班级ID,缺少学生是否住校的核心属性,通过按学生ID关联学生信息表,可补全该属性,支撑住校相关维度的统计。具体操作如下:​

1.由于“学生信息”数据表中的学号不是升序记录的,所以在进行记录关联前,也需要对数据进行排序。再次添加“排序记录”,并建立“学生信息”表输入组件到“排序记录”组件的连接线​

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

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

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

5.双击“排序记录”组件,按下图进行配置,步骤名称设置为“考勤数据按学号排序”,排序字段为“stu_id”​

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

7.记录集连接 1组件的第一个Transform选择“考勤数据按学号排序”,第二个Transform选择“按照学生编号进行排序”,连接类型选择LEFT OUTER​

8.点击第一个Transform的连接字段中的“获得连接字段”按钮,即可获取考勤记录和考勤类型关联后的字段。同样的,获取第二个Transform的连接字段。第一个Transform字段保留“stu_id”,第二个Transform字段保留“stu_id”。连接类型选择LEFT OUTER,表示使用考勤记录的字段 stu_id与学生信息的字段 stu_id进行左外连接。​

9.点击“确认”,若删除错误,可重新获取连接字段再进行删除​

4.3.7 字段选择:移除冗余字段​

经过多表关联和前期接入,数据中会包含大量与考勤统计无关的字段(如学生信息表中的非必要属性),需要对关联后的数据进行冗余字段移除,因为这些冗余字段不仅会增加数据处理的负担,还可能导致后续聚合、计算出现干扰,只有移除冗余字段,保留核心有用字段,才能提升处理效率,确保统计逻辑清晰。具体操作如下:​

1.搜索“字段选择”,拖拽至画布中,创建“记录集连接 1”组件到字段选择组件的连接线​

2.双击字段选择组件,在配置弹窗中,步骤名称输入“移除冗余字段”,点击“移除”Tab标签,右键空白处并点击“获取字段”​

在获取的字段中,删除以下核心字段外,其他字段保留,为后续时间维度拆解和行为标签衍生奠定基础:​

•学生 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.在字段选择组件鼠标右键弹出菜单,点击“显示输出字段”,查看输出字段是否正确​

​ ​

4.3.8空值处理​

3个数据表关联后,字段“stu_sex”、“born_date”、“policy”、“live_on_campus”存在空值,需要对这么空值进行处理。​

拖拽“替换NULL值”组件至画布,创建“移除冗余字段”字段选择组件到“替换NULL值”组件的连线,连线类型选择“主输出步骤”​

双击“替换NULL值”组件,勾选“选择字段”​

在字段空白表格中右键。点击“插入”​

双击插入的行,字段名称选择“stu_sex”​

继续插入行,将“born_date”、“policy”、“live_on_campus”的空值均替换为“未知”​

4.3.9 学生基础属性标准化处理​

经过多表关联与字段筛选后,原始数据中住校状态为编码值,且缺少年级、校区类型等画像分析必需字段,无法直接用于学生考勤标签输出与后续用户画像分析。因此需要对学生基础属性进行标准化映射、缺失字段衍生,统一数据格式、补齐分析维度,保证标签表规范可用。​

4.3.9.1 住校状态映射​

原始住校状态以数字形式存储,可读性差且存在空值,通过映射转换为规范文本并处理空值,使标签表更直观,同时满足住校/走读考勤对比分析的需求。​

添加“值映射”组件到画布中,并创建替换NULL值组件到值映射组件的连线,并选择“主输出步骤”

双击“值映射”组件,步骤名称改为“住校状态映射”,使用的字段名为“live_on_campus”,不匹配时的默认值为“否”​

在下方字段值表格空白处右键,点击“插入”​

双击插入的行,在源值中输入“0”,目标值输入“否”,代表将原数据中的“0”统一映射为“否”​

同样的,再插入一行,在源值中输入“1”,目标值输入“是”,并点击“确认”​

4.3.9.2 从班级名提取年级​

原始数据无独立年级字段,无法按年级做考勤统计与画像分群,通过从班级名称中提取年级信息,补齐年级维度,支撑年级层面的考勤分析。​

拖拽“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_n

接下需要设置“gra_name”字段类型,在配置窗口的下方空白表格处右键,点击“插入”​

字段名称输入“gra_name”,类型为“String”,替换“字段名”或“重命名”值选择“否”,设置完成后点击“确认”​

4.3.9.3 校区类型判定​

原始数据无校区类型字段,不同校区管理口径与考勤规则存在差异,通过班级名称规则判定老校区/新校区,增加校区分析维度,使考勤标签更贴合校园实际管理场景。​

参考“4.3.5.2 从班级名提取年级”步骤,添加“JavaScript代码”组件,“JavaScript代码”组件命名为“校区类型判定”,输入的代码如下:​

class_campus_type='新校区'

}else if (cla_name != null && !isEmpty(cla_name)){

  class_campus_type='老校区'

} else{

  class_campus_type='未知'

}

字段名称“class_campus_type”,类型为“String”,替换“字段名”或“重命名”值选择“否”​

4.3.10 结果入库​

实验核心:将统计结果写入目标表,形成标准化台账,便于后续查询、分析和追溯。具体操作如下:​

1.添加表输出组件,并创建“校区类型判定”“JavaScript代码组件到表输出组件的连线​

2.双击表输出组件,选择“团队私有数据库”连接;​

3.勾选“裁剪表”,这样表输出组件在插入数据前会清空原始表数据,避免重复插入​

4.勾选“指定数据库字段”,建立工作流字段与数据库表字段的映射关系。勾选后会激活“数据库字段”tab页,在数据库字段tab页,右键选择“获取字段”​

双击表字段中的字段名称,在下拉框中选择正确的对应字段​

4.3.11执行工作流​

1.执行转换流,点击工具栏中的“执行”按钮​

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

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

4.查看数据库结果​

打开“元数据”tab页,在“团队私有数据库”连接上右键选择“加载元数据”​

然后进入数据探查页面,展开“团队私有数据库”​

双击目标表“student_attendance_stats”,在右侧页面选择“查询”tab标签​

查看数据库表数据是否符合预期​

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐