Как запросить неактивных сотрудников с помощью BI Publisher в 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, включая PRIMARY_WORK_RELATION_FLAG, PRIMARY_ASSIGNMENT_FLAG и ASSIGNMENT_TYPE, учитывая, что сведения о назначении сотрудника могут как-то помочь. Однако мне не удалось.

Я хотел знать, есть ли какой-либо другой правильный способ запроса неактивных сотрудников. Есть ли какой-либо конкретный атрибут в какой-либо таблице, который бы точно сказал мне, что сотрудник активен или уволен? Когда сотрудник прекращает работу в Oracle Fusion, на какие все атрибуты таблицы влияют?

Спасибо за помощь.

2 ответа

Решение

Я нашел то, что искал. ASSIGNMENT_STATUS_TYPE= "НЕАКТИВНО" - это то, что мне было нужно (как уже упоминалось в этом вопросе, это решение без учета "EFFECTIVE_END_DATE"). Мне нужно было найти "последний" статус назначения сотрудника. Следующий запрос работает, если сотруднику назначено только одно Назначение.

 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, чтобы получить ответ. Ссылка: https://community.oracle.com/message/14000136

Однако в случае, когда сотруднику было дано назначение, скажем, начиная с 2000 года и заканчивая в 20015 году, а затем другое назначение, начиная с 2016 года по настоящее время, приведенный выше запрос вернет одну запись указанного сотрудника как "Неактивную", если условие Max Effective_start_date соответствует условию Max Effective_start_date. не проверяется. (С тех пор как один стал неактивным в 2015 году), хотя ее текущий статус Назначения "Активен", и в настоящее время она не прекращена.

В таком случае целесообразно извлечь запись с наибольшим значением 'EFFECTIVE_START_DATE' из таблицы PER_ALL_ASSIGNMENTS_M, т. Е. Проверить, является ли EFFECTIVE_START_DATE = MAX(EFFECTIVE_START_DATE)

Самый простой способ сделать это просто:

SELECT * FROM YourTable t
WHERE TRUNC(t.END_DATE) <= trunc(sysdate)

Иногда есть также столбец с указанием типа IS_ACTIVE или что-то. Вы также можете добавить его и просто обновить его до 1 для всех записей, возвращенных из вышеприведенного запроса.

Кроме того, мы не можем вам помочь. Мы не знаем структуры ваших таблиц, мы не знаем, какие данные вы в них храните и в каком столбце указано, что.