##学生用户画像-考勤主题标签构建

1 实验说明

1.1 实验目的

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

1.2 实验环境

  • 工具: 助容零代码在线实验平台:https://lab.guilian.cn/
    • 本次实验使用助睿数智(Uniplore)是AI驱动的一站式数据科学平台。该平台覆盖从数据接入、ETL处理、机器学习建模到可视化展示的全链路零代码功能,适用于数据分析教学与企业数据加工场景。产品官网为https://www.uniplore.com/
  • 数据源:“数智教育”大赛数据集(共包含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 非请假) 考勤事件名称(controler_name /control_task_name)包含 “迟到”“晚到” 关键词,且排除请假的记录条数
早退次数 COUNT(早退 AND 非请假) 考勤事件名称(controler_name /control_task_name)包含 “早退” 关键词,且排除请假的记录条数
请假次数 COUNT(包含请假) 考勤事件名称(control_task_name)包含“请假”关键词的所有记录总条数(含事假、病假等各类请假)
没穿校服次数 COUNT(包含校服) 考勤事件名称(controler_name)包含“校服”的异常情况记录条数

统计口径设计理由:

  • 排除请假记录:请假属于正常缺勤,不应计入迟到或早退的违规统计,避免重复计数和误判。
  • 请假全覆盖:只要考勤事件名称中包含“请假”关键词,无论事假、病假或其他类型,均计入请假次数。
  • 校服违规唯一识别:根据数据说明中的描述,考勤类型中的“校服[移动考勤]”明确指未穿校服,因此包含“校服”关键词的记录即为违规。

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页,关系数据库右键打开菜单,选择“新建数据源”

img

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

img

完整参数参考如下:
在这里插入图片描述

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

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

img

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='原始_学生考勤表';

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

[img

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

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(2)导入原始考勤数据

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

在这里插入图片描述

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

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

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

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

[img

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

img1920×945 84.3 KB

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

[img

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

[img

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

将表字段修改为建表语句中对应的字段,点击“确认”
在这里插入图片描述

在这里插入图片描述在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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 原始考勤记录表数据导入”小节的一样

[img

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

在这里插入图片描述

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='原始_学生信息表';

执行创建原始_学生信息表转换流:

[img

使用“CSV文件输出”组件输入“2_student_info.csv”数据

在这里插入图片描述

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

在这里插入图片描述

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

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

在这里插入图片描述

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

[img

[img

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

[imgimg

执行转换流:
在这里插入图片描述

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

新建转换工作流,并命名为“创建学生考勤主题标签表”,在该工作流中拖拽“执行一个SQL脚本”组件,通过执行SQL脚本来创建一个标签表。整个转换流如下所示:

[img

配置说明:在组件中填写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='学生考勤主题标签表';

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

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

[img

4.3 学生考勤主题标签构建

4.3.1 数据转换流逻辑说明

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

  • 数据接入:接入考勤原始打卡表、考勤类型码表、学生信息基础表
  • 数据整合:多表关联,给原始打卡记录绑定学生班级、住校属性、考勤事件名称
  • 标签标记:通过考勤事件名称自动识别迟到、早退、请假、未穿校服等行为
  • 指标计算:按日核算在校时长,按多维度聚合统计各类异常次数
  • 结果落地:统一写入考勤统计结果表,供报表、查询、分析直接使用

整体逻辑:

imageimage1111×416 47 KB

各组件作用:

组件 作用
表输入 读取数据库中的原始数据表
排序记录 按照指定字段对数据进行排序,为记录集连接做准备
记录集连接 按关联字段连接两表,补充考勤行为名称或学生属性
字段选择 移除冗余字段,保留核心必要字段
JavaScript脚本 执行脚本,通过关键词匹配提取异常考勤记录,生成二进制标记
分组 按指定维度分组,使用SUM函数聚合统计各类异常次数
替换NULL值 将空值字段替换为“未知”
值映射 将住校状态编码(0/1)映射为“否”/“是”
表输出 输出最终结果到数据库目标表

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

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

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

[img

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

[img

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

[img

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

[img

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

在这里插入图片描述

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

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

[![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=C%3A%5CUsers%5CMSF%5CAppData%5CLocal%5CTemp%5C1778919722291.png&pos_id=img-gMN1NjGS-1779017789239
系统提示弹窗中点击“确认”,获取“raw_attendance”考勤记录表的所有字段

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

[img

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

[img
[img

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

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

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

  1. 在组件库搜索“记录集连接”组件,并将组件拖拽至画布中
    在这里插入图片描述

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

在这里插入图片描述

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

[img

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

[img

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

[img

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

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

[img

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

[img

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

[img

  1. 2个Transform字段中仅保留“attendance_type_id”、“attendance_task_order_id”字段,这样做表示使用这2个字段进行记录连接。可以使用“删除选中的行”批量删除多个字段。
    在这里插入图片描述

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

在这里插入图片描述

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

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

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

[img

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

[img

脚本代码如下:

// 初始化变量
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;
    }
}
  1. 使用“获取变量”获取输出字段,系统将自动解析脚本中变量定义代码,生成字段数据

    ![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

    [img

    预览数据如下:

    [img

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”

    [img

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

    [img

4.3.6 关联学生信息

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

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

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

    [img

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

在这里插入图片描述

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

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

    [img

  3. 创建“考勤数据按学号排序”记录排序组件到记录集连接 1组件的连线,关联学生信息和考勤记录信息
    在这里插入图片描述

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

    [img

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

    [img

  6. 点击“确认”,若删除错误,可重新获取连接字段再进行删除
    在这里插入图片描述

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)

    [img

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

    [img
    在这里插入图片描述

4.3.8 空值处理

3个数据表关联后,字段“stu_sex”、“born_date”、“policy”、“live_on_campus”存在空值,需要对这么空值进行处理。
拖拽“替换NULL值”组件至画布,创建“移除冗余字段”字段选择组件到“替换NULL值”组件的连线,连线类型选择“主输出步骤”
在这里插入图片描述

[img

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

[img

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

[img

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

[img

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

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

4.3.9.1 住校状态映射

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

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

[img

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

[img

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

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

[img

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

[img

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_name='未知'
}

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

[img

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

[img

4.3.9.3 校区类型判定

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

参考“4.3.9.2 从班级名提取年级”步骤,添加“JavaScript代码”组件,“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='未知'
}

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

[img

4.3.10 结果入库

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

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

在这里插入图片描述

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

[img

  1. 勾选“裁剪表”,这样表输出组件在插入数据前会清空原始表数据,避免重复插入
  2. 勾选“指定数据库字段”,建立工作流字段与数据库表字段的映射关系。勾选后会激活“数据库字段”tab页,在数据库字段tab页,右键选择“获取字段”

[img

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

[img

4.3.11 执行工作流

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

img

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

[img

  1. 查看日志,工作流执行后会打开日志页面,定期刷新工作流日志数据。
    在这里插入图片描述

  2. 查看数据库结果

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

[img

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

[img

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

在这里插入图片描述

查看数据库表数据是否符合预期
在这里插入图片描述

Logo

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

更多推荐