如何在 Oracle Fusion 中使用 BI Publisher 查询不活跃的员工?
How to query for Inactive Employees using BI Publisher in Oracle Fusion?
我是 BI Publisher 的新手,我正在通过 Oracle Fusion Applications 使用它。
我正在尝试制作一份与组织中不活跃员工相关的报告。但是我无法弄清楚如何查询不活跃或被解雇的员工。
我最初使用这个查询:
SELECT PERSON_ID, PERSON_NUMBER, EFFECTIVE_START_DATE, EFFECTIVE_END_DATE
FROM PER_ALL_PEOPLE_F
WHERE TRUNC(SYSDATE) NOT BETWEEN TRUNC(EFFECTIVE_START_DATE) AND TRUNC(EFFECTIVE_END_DATE)
我的其他考虑因素是 PER_ALL_ASSIGNMENTS_M table 的属性,包括 PRIMARY_WORK_RELATION_FLAG、PRIMARY_ASSIGNMENT_FLAG 和 ASSIGNMENT_TYPE 考虑到员工的分配详细信息会有所帮助。然而我没有成功。
我想知道是否有任何其他正确的方法来查询不活跃的员工。任何 table 中是否有任何特定属性可以肯定地告诉我员工是在职还是已离职?当员工在 Oracle Fusion 中被解雇时,所有 table 属性都会受到影响?
感谢您的帮助。
最简单的方法就是:
SELECT * FROM YourTable t
WHERE TRUNC(t.END_DATE) <= trunc(sysdate)
有时还会有一个指示栏,例如IS_ACTIVE
之类的。您也可以考虑添加它,并且只需将上述查询返回的所有记录更新为 1。
除此之外,我们真的帮不了你。我们不知道你的 table结构,我们不知道你在其中存储了什么数据以及哪一列表示什么。
我找到了我要找的东西。 ASSIGNMENT_STATUS_TYPE='INACTIVE' 是我需要的(如问题中所述,此解决方案未考虑 'EFFECTIVE_END_DATE')获取员工的 'latest' 分配状态是我需要的寻找。如果员工只分配了一个分配,则以下查询有效。
SELECT PAPF.PERSON_ID, PAPF.PERSON_NUMBER
FROM PER_ALL_PEOPLE_F PAPF, PER_ALL_ASSIGNMENTS_M PAAM
WHERE 1=1
AND TRUNC(PAAM.EFFECTIVE_START_DATE) = (SELECT MAX(TRUNC(PAAM_INNER.EFFECTIVE_START_DATE))
FROM PER_ALL_ASSIGNMENTS_M PAAM_INNER
WHERE PAAM_INNER.PERSON_ID=PAAM.PERSON_ID
GROUP BY PAAM_INNER.PERSON_ID)
AND PAPF.PERSON_ID=PAAM.PERSON_ID
AND PAAM.PRIMARY_FLAG='Y'
AND PAAM.ASSIGNMENT_STATUS_TYPE='INACTIVE'
AND TRUNC(SYSDATE) BETWEEN PAAM.EFFECTIVE_START_DATE AND PAAM.EFFECTIVE_END_DATE
AND TRUNC(SYSDATE) BETWEEN PAPF.EFFECTIVE_START_DATE AND PAPF.EFFECTIVE_END_DATE
ORDER BY 1 ASC
我在 Oracle 支持社区的帮助下得到了答案。
Link: https://community.oracle.com/message/14000136#14000136
但是,如果给员工分配的任务是从 2000 年开始到 20015 年结束,然后是从 2016 年到现在的另一项分配,上述查询将 return 所述员工的一条记录如果未选中最大 Effective_start_date 条件,则为 'Inactive'。 (自从一个人在 2015 年变得不活跃),尽管她目前的分配状态是 'Active' 并且她目前没有被终止。
在这种情况下,明智的做法是从PER_ALL_ASSIGNMENTS_M table中检索具有最大'EFFECTIVE_START_DATE'的记录,即检查是否EFFECTIVE_START_DATE = MAX( EFFECTIVE_START_DATE)
我是 BI Publisher 的新手,我正在通过 Oracle Fusion Applications 使用它。
我正在尝试制作一份与组织中不活跃员工相关的报告。但是我无法弄清楚如何查询不活跃或被解雇的员工。
我最初使用这个查询:
SELECT PERSON_ID, PERSON_NUMBER, EFFECTIVE_START_DATE, EFFECTIVE_END_DATE
FROM PER_ALL_PEOPLE_F
WHERE TRUNC(SYSDATE) NOT BETWEEN TRUNC(EFFECTIVE_START_DATE) AND TRUNC(EFFECTIVE_END_DATE)
我的其他考虑因素是 PER_ALL_ASSIGNMENTS_M table 的属性,包括 PRIMARY_WORK_RELATION_FLAG、PRIMARY_ASSIGNMENT_FLAG 和 ASSIGNMENT_TYPE 考虑到员工的分配详细信息会有所帮助。然而我没有成功。
我想知道是否有任何其他正确的方法来查询不活跃的员工。任何 table 中是否有任何特定属性可以肯定地告诉我员工是在职还是已离职?当员工在 Oracle Fusion 中被解雇时,所有 table 属性都会受到影响?
感谢您的帮助。
最简单的方法就是:
SELECT * FROM YourTable t
WHERE TRUNC(t.END_DATE) <= trunc(sysdate)
有时还会有一个指示栏,例如IS_ACTIVE
之类的。您也可以考虑添加它,并且只需将上述查询返回的所有记录更新为 1。
除此之外,我们真的帮不了你。我们不知道你的 table结构,我们不知道你在其中存储了什么数据以及哪一列表示什么。
我找到了我要找的东西。 ASSIGNMENT_STATUS_TYPE='INACTIVE' 是我需要的(如问题中所述,此解决方案未考虑 'EFFECTIVE_END_DATE')获取员工的 'latest' 分配状态是我需要的寻找。如果员工只分配了一个分配,则以下查询有效。
SELECT PAPF.PERSON_ID, PAPF.PERSON_NUMBER
FROM PER_ALL_PEOPLE_F PAPF, PER_ALL_ASSIGNMENTS_M PAAM
WHERE 1=1
AND TRUNC(PAAM.EFFECTIVE_START_DATE) = (SELECT MAX(TRUNC(PAAM_INNER.EFFECTIVE_START_DATE))
FROM PER_ALL_ASSIGNMENTS_M PAAM_INNER
WHERE PAAM_INNER.PERSON_ID=PAAM.PERSON_ID
GROUP BY PAAM_INNER.PERSON_ID)
AND PAPF.PERSON_ID=PAAM.PERSON_ID
AND PAAM.PRIMARY_FLAG='Y'
AND PAAM.ASSIGNMENT_STATUS_TYPE='INACTIVE'
AND TRUNC(SYSDATE) BETWEEN PAAM.EFFECTIVE_START_DATE AND PAAM.EFFECTIVE_END_DATE
AND TRUNC(SYSDATE) BETWEEN PAPF.EFFECTIVE_START_DATE AND PAPF.EFFECTIVE_END_DATE
ORDER BY 1 ASC
我在 Oracle 支持社区的帮助下得到了答案。 Link: https://community.oracle.com/message/14000136#14000136
但是,如果给员工分配的任务是从 2000 年开始到 20015 年结束,然后是从 2016 年到现在的另一项分配,上述查询将 return 所述员工的一条记录如果未选中最大 Effective_start_date 条件,则为 'Inactive'。 (自从一个人在 2015 年变得不活跃),尽管她目前的分配状态是 'Active' 并且她目前没有被终止。
在这种情况下,明智的做法是从PER_ALL_ASSIGNMENTS_M table中检索具有最大'EFFECTIVE_START_DATE'的记录,即检查是否EFFECTIVE_START_DATE = MAX( EFFECTIVE_START_DATE)