PeopleSoft ELM 9.2首次通过率自定义查询构建需求
嘿,针对你在PeopleSoft ELM 9.2里要构建首次通过率查询的需求,我整理了实操性的思路和代码片段,帮你搞定自定义查询的问题:
核心需求拆解
先把你的需求拆成两个可落地的方向:
- 首次通过率:统计学员首次尝试就通过课程的占比(公式:首次通过人数/总首次尝试人数)
- 全量尝试轨迹:跟踪每个学员每门课程的所有尝试记录,包括尝试次数、得分、结果,用来分析“通过前尝试了几次”这类细节
关键数据表参考(ELM 9.2)
自定义查询得依赖ELM的核心业务表,我列几个必用的:
PS_ELM_ENROLLMENT:学员-课程的报名关联表,是连接学员和尝试记录的基础PS_ELM_ATTEMPT:每一次课程尝试的核心记录,包含尝试状态(通过/未通过)、时间,是统计尝试次数的核心表PS_ELM_ATTEMPT_SCOR:SCORM 1.2传递的分数存储表,和尝试表通过ATTEMPT_ID关联,能拿到每次尝试的具体得分PS_ELM_COMPLETION:课程最终完成状态表,用来区分“最终通过”和“单次尝试通过”
构建查询的实操步骤
1. 计算首次通过率
要先筛选出每个学员每门课程的第一次尝试,再统计其中通过的占比。用窗口函数就能轻松实现:
WITH FirstAttempts AS ( SELECT e.EMPLID, e.CRSE_ID, a.ATTEMPT_STATUS, -- 给每个学员的每门课程按尝试时间排序,标记首次尝试 ROW_NUMBER() OVER (PARTITION BY e.EMPLID, e.CRSE_ID ORDER BY a.ATTEMPT_DTTM ASC) AS AttemptSeq FROM PS_ELM_ENROLLMENT e JOIN PS_ELM_ATTEMPT a ON e.ENROLLMENT_ID = a.ENROLLMENT_ID ) SELECT COUNT(CASE WHEN ATTEMPT_STATUS = 'P' THEN 1 END) AS 首次通过人数, COUNT(*) AS 总首次尝试人数, ROUND(COUNT(CASE WHEN ATTEMPT_STATUS = 'P' THEN 1 END)/COUNT(*)*100,2) AS 首次通过率(%) FROM FirstAttempts WHERE AttemptSeq = 1;
2. 获取全量尝试轨迹(含尝试次数)
如果要跟踪每个学员每门课程的所有尝试,包括“第几次尝试才通过”,可以给每一次尝试标记序号:
SELECT e.EMPLID AS 学员ID, e.CRSE_ID AS 课程ID, a.ATTEMPT_ID AS 尝试ID, a.ATTEMPT_STATUS AS 尝试状态, s.SCORE_VALUE AS 尝试得分, a.ATTEMPT_DTTM AS 尝试时间, -- 标记该学员该课程的第N次尝试 ROW_NUMBER() OVER (PARTITION BY e.EMPLID, e.CRSE_ID ORDER BY a.ATTEMPT_DTTM ASC) AS 尝试次数 FROM PS_ELM_ENROLLMENT e JOIN PS_ELM_ATTEMPT a ON e.ENROLLMENT_ID = a.ENROLLMENT_ID -- 关联SCORM分数,左连接避免丢失无分数的尝试记录 LEFT JOIN PS_ELM_ATTEMPT_SCOR s ON a.ATTEMPT_ID = s.ATTEMPT_ID ORDER BY e.EMPLID, e.CRSE_ID, 尝试次数;
这个查询会输出完整的尝试轨迹,你可以筛选特定学员或课程,分析他们的尝试次数分布。
SCORM分数关联注意事项
因为你的系统用SCORM 1.2,要注意PS_ELM_ATTEMPT_SCOR里的SCORE_TYPE字段值为SCORM,这才是SCORM模块传递的有效分数。如果需要验证原始交互数据,可以关联PS_ELM_SCORM_DATA表,但一般ATTEMPT_SCOR已经足够满足统计需求。
额外小提示
- 如果要按课程、部门或时间段统计,只要在查询里添加对应的过滤条件即可(比如
WHERE CRSE_ID = 'XXX'或ATTEMPT_DTTM BETWEEN '2024-01-01' AND '2024-06-30') - 注意不同环境的PeopleSoft表前缀可能略有差异,确认你的环境表名和上述一致
内容的提问来源于stack exchange,提问作者Josh White
相关产品推荐
相关产品推荐

