Il Suo Template Dati Hire to Retire - Gestione Posizioni
Il Suo Template Dati Hire to Retire - Gestione Posizioni
- `Attributi` consigliati da raccogliere per un'analisi approfondita
- Attività di processo chiave da tracciare per una scoperta accurata
- Linee guida per l'estrazione specificamente per Microsoft Dynamics 365 Human Resources
Attributi della Gestione delle Posizioni – Dall'Assunzione al Pensionamento
| Nome | Descrizione | ||
|---|---|---|---|
| ID Posizione PositionId | L'identificatore unico per una specifica posizione lavorativa all'interno dell'organizzazione. | ||
| Descrizione L'ID Posizione funge da identificatore di caso primario, collegando tutte le attività e i Nell'analisi di processo, questo ID è essenziale per ricostruire il percorso di ogni posizione. Abilita Perché è importante Questo è l'identificatore principale che collega tutti gli eventi correlati in un unico caso di processo, rendendo possibile analizzare il ciclo di vita end-to-end della posizione. Dove trovare Questo è tipicamente il campo HcmPosition.PositionId in Microsoft Dynamics 365 Human Resources. Può essere trovato in entità di Esempi POS001234MKT-0056FIN-SR-ANALYST-02HRBP-EAST-01IT-DEV-9876 | |||
| Nome attività ActivityName | Il nome dello specifico evento o compito che si è verificato nel processo di gestione delle posizioni. | ||
| Descrizione Questo L'analisi del Nome Attività consente la visualizzazione dei flussi di processo, l'identificazione delle deviazioni dal processo standard e il calcolo dei tempi di transizione tra i diversi passaggi. È fondamentale per capire cosa è successo e in quale ordine. Perché è importante Definisce i passi del processo, consentendo la visualizzazione delle mappe di processo e l'analisi del flusso e delle variazioni del processo. Dove trovare Questo Esempi Richiesta Posizione AvviataRichiesta Posizione Approvata dal ManagerPosizione Creata nel Sistema HRAttributi della Posizione ModificatiPosizione Chiusa | |||
| Timestamp Evento EventTime | Il timestamp che indica quando l'attività si è verificata. | ||
| Descrizione L' Questo Perché è importante Questo Dove trovare Questa informazione si trova tipicamente nelle tabelle di Esempi 2023-04-15T09:00:00Z2023-04-15T14:35:10Z2023-04-18T11:21:05Z2023-05-02T16:45:00Z2024-01-10T10:00:00Z | |||
| Centro di Costo CostCenter | Il centro di costo finanziario a cui sono allocate le spese della posizione. | ||
| Descrizione Il Centro di Costo è una dimensione finanziaria chiave che collega una posizione a un budget specifico o a un'area di responsabilità finanziaria. Le modifiche a questo Questo Perché è importante Collega la posizione ai dati finanziari, consentendo l'analisi dei processi relativi ai costi e il monitoraggio della coerenza dei dati. Dove trovare Questo è tipicamente configurato come una dimensione finanziaria sul record di posizione. Consulti la configurazione della dimensione finanziaria in Dynamics 365. Esempi CC-1001-FINCC-2500-ITCC-4510-SALESCC-7000-OPSCC-9002-HR | |||
| Dipartimento DepartmentName | Il dipartimento a cui appartiene la posizione. | ||
| Descrizione Questo L'analisi per dipartimento è essenziale per la Perché è importante Consente di segmentare l'analisi del processo per unità di business, aiutando a identificare problemi specifici di dipartimento e a confrontare le prestazioni. Dove trovare Questa informazione fa parte dei dettagli della posizione, tipicamente memorizzata sull'entità HcmPositionDetail e collegata alla dimensione dell'unità operativa. Esempi FinanzaTecnologia dell'InformazioneVendite e MarketingRisorse UmaneOperazioni | |||
| Nome Utente UserName | Il nome o l'`ID` dell'utente che ha eseguito l'`attività`. | ||
| Descrizione Questo L'analisi per utente aiuta a identificare le esigenze di formazione, confrontare le prestazioni tra i membri del Perché è importante Fornisce responsabilità e consente l'analisi delle prestazioni per individuo o team, il che è cruciale per la gestione delle risorse e la formazione. Dove trovare Associato alla cronologia dei workflow o ai record di audit trail in Dynamics 365 HR. Può essere collegato tramite un ID Utente dall'entità HcmWorker. Esempi John SmithJane DoeSYSTEMHRAdmin01MGR-FINANCE | |||
| Ora di Fine EndTime | Il `timestamp` che indica quando l'`attività` è stata completata. | ||
| Descrizione EndTime segna la conclusione di un'attività. Il tempo trascorso tra StartTime ed EndTime è il tempo di elaborazione per quella specifica attività. Questo attributo è essenziale per calcolare le durate a livello di attività e capire dove viene impiegato il tempo all'interno del processo. Ad esempio, aiuta a determinare quanto tempo impiega un manager per approvare una richiesta di posizione dopo che gli è stata assegnata. Perché è importante Consente il calcolo dei tempi di elaborazione delle attività, il che è fondamentale per l'analisi dettagliata delle prestazioni e dei colli di bottiglia. Dove trovare Questo può essere derivato da Esempi 2023-04-15T09:05:12Z2023-04-15T15:00:00Z2023-04-19T09:00:00Z2023-05-03T10:00:00Z2024-01-10T10:05:00Z | |||
| Stato Posizione PositionStatus | Lo stato attuale o storico della posizione. | ||
| Descrizione Questo Il tracciamento dello stato è cruciale per comprendere il percorso della posizione e per Perché è importante Fornisce uno stato chiaro per ogni posizione, essenziale per filtrare i casi e comprendere i risultati. Dove trovare Consultate la documentazione di Microsoft Dynamics 365 Human Resources. Questo è probabilmente derivato dai campi di stato nel record della Posizione principale. Esempi PropostoIn RevisioneAttivoCongelataChiuso | |||
| Titolo di Lavoro JobTitle | Il titolo della mansione associata alla posizione, come 'Commercialista Senior'. | ||
| Descrizione Il Titolo di Lavoro fornisce un contesto importante sul ruolo e le responsabilità della posizione. È diverso dall'ID Posizione, poiché più posizioni possono condividere lo stesso titolo di lavoro. Nell'analisi, questo Perché è importante Aggiunge un contesto aziendale cruciale, consentendo analisi basate sul ruolo professionale, sul livello o sulla funzione. Dove trovare Questa informazione è collegata dal record 'Mansione' associato alla Posizione. La cerchi in entità come HcmPositionV2Entity o unendosi a HcmJobEntity. Esempi Analista Finanziario SeniorIngegnere del Software IIHR Business PartnerCoordinatore MarketingResponsabile della Logistica | |||
| Budget Approvato IsBudgetApproved | Un flag che indica se il budget per la posizione è stato approvato. | ||
| Descrizione Questo Questo Perché è importante Semplifica l'analisi fornendo un flag chiaro per una pietra miliare critica, aiutando a isolare e misurare la fase di approvazione del budget. Dove trovare Questo è derivato durante la trasformazione dei Esempi truefalse | |||
| È una Rilavorazione IsRework | Un flag che indica se un'attività fa parte di un ciclo di rilavorazione. | ||
| Descrizione Questo Questo Perché è importante Identifica e quantifica esplicitamente la rilavorazione del processo, che è un obiettivo primario per le iniziative di miglioramento del processo. Dove trovare Questo viene calcolato in base alla sequenza di attività per un caso. Ad esempio, se 'Richiesta Posizione Approvata dal Manager' si verifica dopo 'Attributi della Posizione Modificati', può essere contrassegnato come rilavorazione. Esempi truefalse | |||
| Famiglia Professionale JobFamily | Un raggruppamento di ruoli con funzioni simili, come 'Ingegneria' o 'Finanza'. | ||
| Descrizione La Famiglia Professionale è una classificazione che raggruppa titoli di lavoro correlati. Ad esempio, 'Ingegnere del Software' e 'Ingegnere QA' potrebbero entrambi rientrare nella famiglia professionale 'Ingegneria'. Questo attributo è essenziale per il dashboard 'Tendenze di Riclassificazione delle Posizioni', poiché consente un'analisi di livello superiore di quali categorie di lavoro stanno cambiando più frequentemente. Fornisce una visione più ampia rispetto all'analisi dei singoli titoli di lavoro. Perché è importante Consente un'analisi più ampia e basata su categorie delle posizioni, utile per la pianificazione strategica della forza lavoro e l'analisi delle tendenze. Dove trovare Questo fa parte della configurazione della mansione in Dynamics 365 HR. Cerchi campi correlati a 'Job family' o 'Job function' sull'entità HcmJobEntity. Esempi IngegneriaFinanza e ContabilitàVenditeRisorse UmaneGestione Prodotto | |||
| Località Location | La posizione fisica o geografica della posizione. | ||
| Descrizione Questo La Località è utilizzata direttamente nella Perché è importante Fornisce un contesto geografico, consentendo l'analisi delle prestazioni del processo e delle tendenze in diverse località. Dove trovare Consultate la documentazione di Microsoft Dynamics 365 Human Resources. Questo potrebbe far parte dei dettagli della posizione o essere collegato tramite il dipartimento o l'entità legale. Esempi New York, USALondon, UKBerlino, GermaniaSingaporeRemoto | |||
| Manager Richiedente RequestingManager | Il manager che ha avviato la richiesta per la posizione. | ||
| Descrizione Questo L'analisi per Manager Richiedente può aiutare a identificare modelli nel volume delle richieste, nei tassi di approvazione e nella qualità delle richieste. Fornisce un ulteriore livello di dettaglio per comprendere il carico di lavoro e l'aderenza al processo. Perché è importante Aiuta a tracciare l'origine della domanda di posizioni e ad analizzare le metriche di processo dalla prospettiva del responsabile delle assunzioni. Dove trovare Consultate la documentazione di Microsoft Dynamics 365 Human Resources. Questa informazione sarebbe probabilmente acquisita nei dati di avvio del workflow. Esempi Robert JonesSusan MillerDavid ChenMaria GarciaPaul Williams | |||
| Motivo del Rigetto RejectionReason | Il motivo fornito quando una richiesta di posizione viene rifiutata. | ||
| Descrizione Quando una richiesta di posizione viene rifiutata da un manager o dalle Risorse Umane, spesso viene registrato un motivo. Ciò potrebbe essere dovuto a vincoli di budget, informazioni errate o un cambiamento di strategia. Questo Perché è importante Fornisce insight diretti sul perché le richieste falliscono, consentendo miglioramenti mirati del processo per ridurre i tassi di rilavorazione e di rifiuto. Dove trovare Consultate la documentazione di Microsoft Dynamics 365 Human Resources. Questo è spesso catturato nei commenti del workflow o in un campo dedicato al codice motivo al momento del rifiuto. Esempi Budget Non DisponibileRichiesta DuplicataProfilo Lavoro ErratoBlocco delle AssunzioniRiallineamento Strategico | |||
| Sistema di Origine SourceSystem | Il sistema da cui i dati sono stati estratti. | ||
| Descrizione Questo In ambienti con più sistemi, questo campo è cruciale per la Perché è importante Fornisce contesto sull'origine dei dati, che è importante per la governance dei dati e per le analisi che coinvolgono più sistemi aziendali. Dove trovare Questo è un valore statico aggiunto durante il processo di estrazione e trasformazione dei Esempi Microsoft Dynamics 365 Human ResourcesD365 HRDynamicsHR | |||
| Tempo del Ciclo di Approvazione ApprovalCycleTime | Il tempo totale da quando una richiesta di posizione viene avviata fino alla sua approvazione finale. | ||
| Descrizione Questa metrica calcolata misura la durata dall'attività 'Richiesta Posizione Avviata' all'attività di approvazione finale, che potrebbe essere 'Richiesta Posizione Approvata da HR'. È un indicatore chiave di performance per la fase iniziale del processo di gestione delle posizioni. Questo Perché è importante È un KPI critico che misura l'efficienza dell'intero processo di approvazione, evidenziando direttamente i ritardi nel rendere le posizioni pronte per la creazione. Dove trovare Questo viene calcolato a livello di caso individuando i Esempi P3DT2H15M`P10D`P1DT12HP5DT6HP2W | |||
| Tempo di Elaborazione ProcessingTime | La durata del tempo trascorso lavorando attivamente su un'attività. | ||
| Descrizione Il Tempo di Elaborazione è la durata calcolata tra l'StartTime e l'EndTime di un'attività. Rappresenta il tempo effettivo impiegato per un'attività, escludendo il tempo di attesa. Questa metrica è fondamentale per l'analisi delle performance ed è utilizzata in Perché è importante Misura la durata effettiva del lavoro delle attività, aiutando a distinguere il tempo di lavoro attivo dal tempo di attesa inattivo nell'analisi dei colli di bottiglia. Dove trovare Questo viene calcolato durante la trasformazione dei Esempi PT5M12SPT1H30MP2DT4H15MP0DPT8H | |||
| Tipo di Posizione PositionType | Classifica la posizione come a tempo pieno, part-time, temporanea, ecc. | ||
| Descrizione Questo Nell'analisi di processo, il filtro per tipo di posizione può rivelare se determinati tipi di posizioni hanno percorsi di processo diversi o tempi di ciclo più lunghi. Ad esempio, le posizioni temporanee potrebbero avere un processo di approvazione più veloce e snello rispetto alle posizioni permanenti a tempo pieno. Perché è importante Consente l'analisi di come il processo differisce per vari tipi di impiego, aiutando nella pianificazione della forza lavoro e nell'ottimizzazione dei processi. Dove trovare Questa informazione è tipicamente disponibile sul record di posizione in Dynamics 365 HR. Verifichi entità come HcmPositionV2Entity per un campo rilevante. Esempi Tempo pienoPart-time`Contractor`StagistaTemporaneo | |||
| Ultimo `Data Update` LastDataUpdate | Il timestamp dell'ultimo aggiornamento dei dati dal sistema sorgente. | ||
| Descrizione Questo La visualizzazione di queste informazioni nelle Perché è importante Informa gli utenti sulla tempestività dei dati, il che è cruciale per prendere decisioni basate sull'analisi. Dove trovare Questo Esempi 2024-05-21T02:00:00Z2024-05-20T02:00:00Z2024-05-19T02:00:00Z | |||
Attività di Gestione delle Posizioni – Dall'Assunzione al Pensionamento
| Activity | Descrizione | ||
|---|---|---|---|
| Posizione Attivata | Segna il punto in cui una posizione diventa ufficialmente aperta e il reclutamento può iniziare. Questo evento è inferito da un campo di stato nel record della posizione che cambia a 'Attivo' o uno stato simile. | ||
| Perché è importante Questo è un traguardo critico per misurare la prontezza del personale e l'efficienza delle fasi di configurazione finali. È essenziale per il KPI 'Tempo Medio di Attivazione della Posizione'. Dove trovare Inferito tracciando il timestamp quando il campo di stato, come 'PositionStatus', nel record della posizione viene aggiornato a 'Attivo' o 'Aperto'. Acquisisci Basato sulla data in cui il campo ActivationDate della posizione viene popolato o un campo di stato cambia in 'Attivo'. Tipo di evento inferred | |||
| Posizione Chiusa | Rappresenta l'archiviazione finale del record di posizione, a significare la fine assoluta del suo ciclo di vita. Questo evento è inferito da un cambio di stato a 'Chiuso' o a uno stato terminale simile. | ||
| Perché è importante Questo è l'evento terminale per il processo, consentendo un'analisi completa del ciclo di vita end-to-end e aiutando a identificare le posizioni obsolete che dovrebbero essere chiuse. Dove trovare Inferito da un cambiamento in un campo di stato a 'Chiuso' nel record della posizione. Questo è meno comune della disattivazione, poiché i record sono spesso conservati per la cronologia. Acquisisci Inferito dal timestamp quando un campo di stato viene aggiornato a 'Chiuso'. Tipo di evento inferred | |||
| Posizione Creata nel Sistema HR | Questo evento segna la creazione ufficiale del record di posizione all'interno di Dynamics 365 HR. Viene catturato dal `timestamp` di creazione del record di posizione primario stesso. | ||
| Perché è importante Una pietra miliare fondamentale che segna il passaggio da una richiesta a un'entità organizzativa effettiva. È il punto finale per il KPI Tempo di Ciclo di Creazione della Posizione. Dove trovare Dal campo di sistema 'CreatedDateTime' nella tabella principale delle posizioni, come HcmPosition. Acquisisci Estratto dal campo di sistema CreatedDateTime nella tabella HcmPosition. Tipo di evento explicit | |||
| Posizione Disattivata | La posizione non è più attiva e viene rimossa dalla struttura organizzativa attiva, spesso dopo essere stata coperta. Questo è inferito da un cambio di stato a 'Inattivo' o uno stato simile. | ||
| Perché è importante Segna un passo chiave alla fine della vita attiva della posizione. È cruciale per analizzare il Tempo Medio alla Disattivazione della Posizione e per gestire con precisione la forza lavoro. Dove trovare Inferito dal timestamp quando il campo 'RetirementDate' viene popolato o un campo di stato nel record della posizione cambia in 'Inattivo'. Acquisisci Basato sulla data in cui RetirementDate della posizione viene impostato o un campo di stato cambia in 'Inattivo'. Tipo di evento inferred | |||
| Richiesta Posizione Approvata da HR | Indica l'approvazione finale del dipartimento Risorse Umane prima che la posizione possa essere formalmente creata. Questo è un evento esplicito registrato al completamento dell'attività di approvazione HR nel sistema di `workflow`. | ||
| Perché è importante Questo segna la fine della fase di approvazione ed è un traguardo critico per misurare il 'Tempo Medio Complessivo di Ciclo di Approvazione Posizione'. Dove trovare Registrato nelle tabelle della cronologia dei workflow, come WorkflowTrackingTable, quando il rappresentante HR completa il proprio task di approvazione. Acquisisci L'evento viene registrato nella cronologia del workflow con un timestamp al completamento del passo di approvazione HR. Tipo di evento explicit | |||
| Richiesta Posizione Avviata | Segna l'inizio formale del ciclo di vita della gestione delle posizioni. Questo evento è tipicamente catturato quando un utente invia una nuova richiesta di posizione tramite un modulo dedicato o un workflow in Dynamics 365 HR. | ||
| Perché è importante Questo è il punto di partenza per misurare l'intero ciclo di vita della posizione, inclusi KPI cruciali come 'Tempo di Ciclo di Approvazione Posizione' e 'Tempo di Dove trovare Catturato dal timestamp di creazione di un record di richiesta di posizione o dal record di avvio nella tabella della cronologia dei workflow, come WorkflowTrackingStatusTable. Acquisisci L'evento viene registrato al momento dell'invio di un nuovo workflow di richiesta di posizione. Tipo di evento explicit | |||
| Attributi della Posizione Modificati | Rappresenta qualsiasi modifica apportata agli `attributi` chiave di una posizione, come titolo o dipartimento, dopo la sua creazione iniziale. Questa attività è tipicamente inferita tracciando i cambiamenti nel `log` del `database` del sistema. | ||
| Perché è importante L'alta frequenza di questa attività può indicare una scarsa qualità dei dati o una rilavorazione del processo. È essenziale per i KPI Frequenza di Modifica degli Attributi delle Posizioni e Tasso di Rilavorazione. Dove trovare Inferito dalla tabella SysDatabaseLog se il tracciamento delle modifiche è abilitato per la tabella delle posizioni. In alternativa, richiede il confronto di snapshot storici dei dati delle posizioni. Acquisisci Inferito rilevando operazioni di aggiornamento sui campi chiave della tabella HcmPosition tramite il log del database. Tipo di evento inferred | |||
| Budget Posizione Approvato | Una tappa chiave di approvazione che conferma l'allocazione dei fondi necessari per la nuova posizione. Questo è tipicamente acquisito come un passo di approvazione distinto all'interno del workflow di creazione della posizione. | ||
| Perché è importante Isola la fase di approvazione finanziaria, consentendo l'analisi dei ritardi relativi all'allocazione del budget e supportando il KPI Tempo di Ciclo di Approvazione del Budget della Posizione. Dove trovare Registrato nelle tabelle della cronologia del Acquisisci Catturato dal timestamp di completamento del task di approvazione del budget nel log del workflow. Tipo di evento explicit | |||
| Posizione Bloccata | Indica che una posizione è stata temporaneamente messa in attesa, impedendo qualsiasi attività di assunzione. Questo è catturato inferendo un cambiamento di stato nel record della posizione a uno stato 'Congelato' o 'In Sospeso'. | ||
| Perché è importante Traccia le interruzioni nel ciclo di vita della posizione, che possono influenzare i piani di personale e i budget. Aiuta a identificare le ragioni dei ritardi nelle assunzioni. Dove trovare Inferito tracciando il timestamp quando un campo di stato nel record della posizione viene aggiornato a 'Congelato' o a un valore simile. Acquisisci Inferito dal timestamp di un cambiamento di stato a 'Congelato' o 'In Sospeso'. Tipo di evento inferred | |||
| Posizione Revisionata per la Conformità | Indica che una posizione ha subito un controllo formale di conformità. Questo può essere catturato da un cambiamento di stato, un task di checklist completato o un campo personalizzato che viene aggiornato. | ||
| Perché è importante Cruciale per monitorare l'aderenza alle politiche normative e interne. Questa attività supporta direttamente il KPI Tasso di Aderenza alla Conformità delle Posizioni. Dove trovare Probabilmente inferito da un campo di stato con timestamp come 'ComplianceReviewStatus' o un campo booleano 'IsComplianceReviewed' nel record della posizione. Acquisisci Inferito dal timestamp quando un campo di stato di conformità viene aggiornato a 'Completato' o 'Revisionato'. Tipo di evento inferred | |||
| Posizione Riclassificata | Un aggiornamento significativo in cui viene modificata la classificazione fondamentale della posizione, come la sua famiglia professionale o il suo livello. Questo è tipicamente inferito da una modifica al campo 'Ruolo' nel record della posizione. | ||
| Perché è importante Aiuta ad analizzare i cambiamenti della struttura organizzativa e la stabilità delle definizioni dei ruoli. È l'attività chiave per il KPI Tasso di Riclassificazione delle Posizioni. Dove trovare Inferito da un cambiamento nel campo 'JobId' nella tabella HcmPosition, catturato tramite il log del database o confrontando le versioni dei record nel tempo. Acquisisci Inferito da un cambiamento registrato nel campo di classificazione del ruolo nel record della posizione. Tipo di evento inferred | |||
| Processo di Assunzione Avviato | Indica il passaggio dalla gestione delle posizioni al reclutamento. Questo evento è inferito quando una nuova posizione vacante o un progetto di reclutamento viene creato e collegato a questo specifico ID posizione. | ||
| Perché è importante Collega il processo di gestione delle posizioni al suo risultato, consentendo l'analisi del tempo tra l'attivazione della posizione e l'inizio delle attività di assunzione effettive. Dove trovare Inferito identificando la data di creazione di un record nelle tabelle di reclutamento o di posti vacanti, come HcmRecruitingRequest, che fa riferimento all'ID Posizione. Acquisisci Inferito collegando l'ID della Posizione alla creazione di un record corrispondente nel modulo di reclutamento. Tipo di evento inferred | |||
| Richiesta Posizione Approvata dal Manager | Rappresenta il completamento della prima linea di approvazione da parte del responsabile delle assunzioni. Questo evento è registrato esplicitamente nella cronologia del `workflow` quando il manager completa la propria attività di approvazione assegnata. | ||
| Perché è importante Individua la durata del passaggio di approvazione iniziale, aiutando a identificare i Dove trovare Registrato come passo completato nelle tabelle della cronologia dei workflow, come WorkflowTrackingTable, associato alla richiesta di posizione. Acquisisci Catturato dal timestamp di completamento del passo di approvazione del manager nel log del workflow. Tipo di evento explicit | |||
| Richiesta Posizione Rifiutata | Indica che una richiesta di posizione è stata negata in una delle fasi di approvazione. Questo evento è esplicitamente catturato nella cronologia del workflow quando un approvatore seleziona l'azione 'Rifiuta'. | ||
| Perché è importante Evidenzia i fallimenti del processo e i cicli di rilavorazione. L'analisi dei motivi di rifiuto aiuta a migliorare la qualità delle richieste iniziali e supporta il KPI Tasso di Rifiuto delle Richieste di Posizione. Dove trovare Registrato come stato di 'Rifiuto' nelle tabelle della cronologia del Acquisisci Catturato dal log del workflow quando un approvatore esegue l'azione di rifiuto. Tipo di evento explicit | |||
Guide all'Estrazione
Fasi
- Accedere all'Area di Lavoro Gestione Dati: Effettuate l'accesso a Microsoft Dynamics 365 Human Resources. Utilizzate la barra di ricerca principale per accedere all'area di lavoro 'Gestione dati'.
- Creare un Nuovo Progetto di Esportazione: All'interno dell'area di lavoro, selezionate il riquadro 'Esporta'. Nella pagina del progetto 'Esporta', fate clic su 'Nuovo' per creare un nuovo progetto. Fornite un nome descrittivo, come 'PositionManagement_EventLog_Export', e selezionate un formato dati. Per scopi di trasformazione, si raccomanda il formato 'CSV'.
- Aggiungere Entità di Dati al Progetto: Nel vostro nuovo progetto, fate clic su 'Aggiungi entità'. Dovrete aggiungere diverse entità per catturare l'intero ciclo di vita della posizione. Aggiungete le seguenti entità chiave una per una: 'HcmPositionV2', 'WorkflowTrackingStatusTable' e 'HcmRecruitingRequest'. Se il logging del database è abilitato per le modifiche alle posizioni, aggiungete anche 'SysDatabaseLog'.
- Configurare i Filtri dell'Entità: Per ogni entità, è cruciale applicare filtri per limitare l'ambito dei dati. Selezionate un'entità, quindi fate clic su 'Filtra'. Per 'HcmPositionV2', filtrate per un intervallo di date specifico utilizzando i campi 'CreatedDateTime' o 'ModifiedDateTime'. Per 'WorkflowTrackingStatusTable', filtrate 'CONTEXTTABLENAME' per includere solo i workflow relativi alle posizioni.
- Selezionare i Campi per Ogni Entità: Assicuratevi di esportare tutti i campi necessari per la successiva trasformazione. Per 'HcmPositionV2', includete 'PositionId', 'CreatedDateTime', 'ActivationDate', 'RetirementDate', 'ModifiedDateTime', 'JobId' e 'DepartmentNumber'. Per 'WorkflowTrackingStatusTable', includete 'ContextRecId', 'WorkflowTrackingStatus', 'CreatedDateTime' e 'UserId'.
- Eseguire il Processo di Esportazione: Una volta configurati tutte le entità, i campi e i filtri, fate clic su 'Esporta' nella pagina principale del progetto. Il sistema creerà un pacchetto di dati contenente file separati per ogni entità.
- Monitorare e Scaricare il Pacchetto di Dati: Potete monitorare l'avanzamento del processo nella sezione 'Cronologia processi'. Una volta che il processo è stato completato con successo, scaricate il pacchetto di dati, che sarà un file compresso.
- Estrarre e Trasformare i Dati: Decomprimete il pacchetto scaricato. Troverete file CSV separati per ogni entità. Questi file rappresentano dati grezzi, non il log di eventi finale. Dovrete utilizzare uno script esterno (ad esempio, usando Python con pandas o PowerShell) per elaborare questi file.
- Implementare la Logica di Trasformazione: Il vostro script deve eseguire le seguenti azioni:
- Caricare il file 'HcmPositionV2.csv'. Da questo file, generate l'evento 'Posizione Creata nel Sistema HR' utilizzando 'PositionId' e 'CreatedDateTime'.
- Generate eventi di cambio di stato ('Posizione Attivata', 'Posizione Congelata', 'Posizione Disattivata', 'Posizione Chiusa') interpretando i campi di stato o i campi di data come 'ActivationDate' e 'RetirementDate' da 'HcmPositionV2.csv'.
- Caricare il file 'WorkflowTrackingStatusTable.csv'. Unite questi dati con i dati della posizione utilizzando l'ID del record. Da qui, generate gli eventi del workflow: 'Richiesta di Posizione Avviata', 'Richiesta di Posizione Approvata dal Manager', 'Budget della Posizione Approvato', 'Richiesta di Posizione Approvata da HR' e 'Richiesta di Posizione Rifiutata'. Dovrete mappare lo stato del workflow e il contesto del passo al Nome Attività corretto.
- Se avete esportato 'SysDatabaseLog.csv', analizzate questo file per generare gli eventi 'Attributi Posizione Modificati' e 'Posizione Riclassificata' basati sulle modifiche a campi specifici nella tabella HcmPosition.
- Caricare 'HcmRecruitingRequest.csv' per generare l'evento 'Processo di Assunzione Avviato' individuando quando è stata creata una richiesta di reclutamento per una data posizione.
- Assemblare il Log di Eventi Finale: Lo script dovrebbe combinare tutti gli eventi generati dalle diverse fonti in un singolo file CSV. Questo file deve contenere le colonne richieste: 'PositionId', 'ActivityName' e 'EventTime', insieme a qualsiasi attributo consigliato che siete riusciti a mappare.
- Formattare per il Caricamento: Assicuratevi che il file CSV finale abbia intestazioni corrispondenti ai nomi degli attributi richiesti e che la colonna 'EventTime' sia in un formato timestamp coerente. Il file è ora pronto per il caricamento nello strumento di Process Mining.
Configurazione
- Entità di Dati Chiave: Le entità primarie richieste per questa estrazione sono:
HcmPositionV2: Contiene i dettagli principali di ogni posizione, incluse le date di creazione, le date di attivazione e attributi come ruolo e dipartimento.WorkflowTrackingStatusTable: Fornisce la cronologia delle istanze di workflow, inclusi gli invii, le approvazioni e i rifiuti. Questo è essenziale per tracciare il processo di approvazione.HcmRecruitingRequest: Utilizzata per inferire l'attività 'Processo di Assunzione Avviato' quando una richiesta di reclutamento è collegata a una posizione.SysDatabaseLog: Un'entità opzionale ma potente per catturare modifiche dettagliate come 'Attributi Posizione Modificati' e 'Posizione Riclassificata'. Il suo utilizzo dipende dalla pre-configurazione del logging del database per la tabella HcmPosition.
- Filtro per Intervallo di Date: Si raccomanda vivamente di applicare un filtro per intervallo di date all'entità 'HcmPositionV2' basato sul campo 'CreatedDateTime'. Un intervallo da 6 a 12 mesi è spesso un buon punto di partenza per garantire un volume di dati gestibile.
- Esportazioni Incrementali: Per un'analisi continua, considerate di configurare il progetto di esportazione per esportazioni incrementali. Questo estrarrà solo i record che sono cambiati dall'ultima esecuzione, riducendo significativamente il tempo di elaborazione.
- Prerequisiti: L'utente che esegue l'esportazione deve avere un ruolo di sicurezza con permessi sufficienti per accedere all'area di lavoro 'Gestione dati' e accesso in lettura a tutte le entità di dati specificate. Ruoli come 'Amministratore della gestione dati' o un ruolo personalizzato con privilegi specifici per le entità sono tipicamente richiesti.
a Query di Esempio config
/*
This extraction uses the Dynamics 365 Data Management Framework. The 'query' is defined by configuring an export project via the user interface, not by running a script directly against the database.
A post-processing script is required to transform the output of this configuration into a final event log.
*/
-- Data Export Project Configuration --
Project Name: PositionManagement_EventLog_Export
Data Format: CSV
-- Entity 1: Positions --
Source Entity: HcmPositionV2
Fields to Export:
- PositionId
- CreatedDateTime (Used for 'Position Created In HR System' event)
- ActivationDate (Used for 'Position Activated' event)
- RetirementDate (Used for 'Position Deactivated' / 'Position Closed' event)
- ModifiedDateTime (Can be used for 'Position Attributes Modified' if SysDatabaseLog is not available)
- JobId (Used for 'Position Reclassified' event and 'JobTitle' attribute)
- DepartmentNumber (Used for 'DepartmentName' attribute)
- [Other fields for attributes like CostCenter, PositionStatus]
-- Entity 2: Workflow History --
Source Entity: WorkflowTrackingStatusTable
Fields to Export:
- ContextRecId (The record ID, used to link back to the HcmPosition record)
- ContextTableName (Filter this for 'HcmPosition')
- WorkflowTrackingStatus (Values like 'Submitted', 'Approved', 'Rejected')
- CreatedDateTime (Timestamp for the workflow event)
- UserId (The user who performed the action)
- [Workflow step name or ID field if available, to differentiate approval types]
-- Entity 3: Recruitment Requests --
Source Entity: HcmRecruitingRequest
Fields to Export:
- PositionId
- CreatedDateTime (Used for 'Hiring Process Started' event)
- RecruitingId
-- Entity 4: Database Change Log (Optional) --
Source Entity: SysDatabaseLog
Fields to Export:
- RefRecId (The record ID of the changed record)
- RefTableId (The table ID, filter for HcmPosition)
- CreatedDateTime (Timestamp of the change)
- [Fields indicating the old and new values, if available] Fasi
- Conferma dei Prerequisiti: Prima di iniziare, verificate che la funzionalità 'Bring Your Own Database' (BYOD) sia configurata per la vostra istanza di Microsoft Dynamics 365 Human Resources. Assicuratevi che le entità di dati richieste vengano esportate nel vostro Database SQL di Azure. Le entità chiave includono:
HcmPositionV2,HcmPositionDetail,WorkflowTrackingStatusTable,HcmJob,OMOperatingUniteHcmRecruitingRequest. - Connettersi al Database SQL di Azure: Utilizzate uno strumento client SQL, come SQL Server Management Studio (SSMS) o Azure Data Studio, per stabilire una connessione al Database SQL di Azure che funge da destinazione BYOD.
- Identificare lo Schema del Database: Una volta connessi, familiarizzate con lo schema del database. Le entità di dati di D365 HR sono replicate come tabelle. Notate che i nomi delle tabelle nel database BYOD potrebbero non corrispondere esattamente ai nomi delle entità, ma sono tipicamente molto simili.
- Caricare la Query SQL: Aprite una nuova finestra di query nel vostro client SQL e incollate lo script SQL completo fornito nella sezione 'query' di questo documento.
- Personalizzare i Parametri: Modificate le variabili placeholder nella query. Impostate
@[YourCompanyId]sull'entità legale specifica (es. 'USMF') che desiderate analizzare. Regolate l'intervallo di date nelle clausoleWHERE(es.CREATEDDATETIME >= '2023-01-01') per limitare l'estrazione al periodo di tempo desiderato. - Eseguire la Query: Eseguite la query SQL completa sul database BYOD. Il tempo di esecuzione varierà a seconda del volume di dati e dell'intervallo di date selezionato.
- Rivedere i Risultati: Dopo che la query è terminata, ispezionate l'output nel riquadro dei risultati del vostro client SQL. Verificate che le colonne
PositionId,ActivityName,EventTimee altre siano popolate come previsto. - Esportare in CSV: Esportate l'intero set di risultati in un file CSV. La maggior parte dei client SQL ha una funzionalità integrata per salvare i risultati direttamente in un file CSV. Ad esempio, in SSMS, potete fare clic con il tasto destro sulla griglia dei risultati e selezionare 'Salva risultati con nome...'.
- Preparare per il Caricamento: Assicuratevi che il file CSV esportato abbia la codifica UTF-8. Confermate che le intestazioni delle colonne corrispondano esattamente agli attributi richiesti (
PositionId,ActivityName,EventTime, ecc.) per un caricamento senza intoppi nello strumento di Process Mining.
Configurazione
- Entità di Dati BYOD: Assicuratevi che tutte le entità di dati necessarie siano pubblicate da Dynamics 365 HR nella vostra istanza BYOD. Le entità critiche per questo processo includono quelle per posizioni, dettagli delle posizioni, cronologia dei workflow, ruoli, dipartimenti e richieste di assunzione.
- Latenza dei Dati: Siate consapevoli che BYOD è una replicazione quasi in tempo reale, non istantanea. Potrebbe esserci un leggero ritardo, da minuti a un'ora, tra una transazione che si verifica in D365 HR e i dati che appaiono nel Database SQL di Azure.
- Filtro per Intervallo di Date: È fondamentale applicare filtri di data alla vostra query per gestire le prestazioni e il volume dei dati. Un punto di partenza tipico è un intervallo di 3-6 mesi. Applicate filtri sui timestamp di creazione o evento all'interno di ogni blocco
UNION ALL. - Filtro Azienda: Filtrate sempre per
DATAREAID(entità legale o ID azienda) per assicurarvi di analizzare i dati dall'unità organizzativa corretta. La query fornita include un placeholder@[YourCompanyId]a questo scopo. - Prerequisiti: Questo metodo richiede una sottoscrizione Azure attiva, un'istanza BYOD configurata, permessi di lettura sul Database SQL di Azure di destinazione e uno strumento client SQL adatto per l'esecuzione della query.
- Passi del Workflow Personalizzati: La query utilizza nomi comuni per i passi del workflow per le approvazioni, come 'Approvazione richiesta posizione'. Se la vostra organizzazione utilizza nomi personalizzati per questi passi del workflow, dovrete aggiornare i valori
CONTEXTnelle clausoleWHEREcorrispondenti.
a Query di Esempio sql
SELECT
p.POSITIONID AS PositionId,
'Position Request Initiated' AS ActivityName,
w.CREATEDDATETIME AS EventTime,
w.CREATEDDATETIME AS EndTime,
w.USERID AS UserName,
dept.NAME AS DepartmentName,
pd.DESCRIPTION AS JobTitle,
'Initiated' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM WorkflowTrackingStatusTable w
JOIN HcmPositionV2 p ON w.REFRECID = p.RECID
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE w.TRACKINGSTATUS = 1 -- Submitted
AND w.CONTEXT LIKE '%Create position request%'
AND p.DATAREAID = '[YourCompanyId]'
AND w.CREATEDDATETIME >= '[StartDate]'
UNION ALL
SELECT
p.POSITIONID AS PositionId,
'Position Request Approved By Manager' AS ActivityName,
w.CREATEDDATETIME AS EventTime,
w.CREATEDDATETIME AS EndTime,
w.USERID AS UserName,
dept.NAME AS DepartmentName,
pd.DESCRIPTION AS JobTitle,
'Pending Budget' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM WorkflowTrackingStatusTable w
JOIN HcmPositionV2 p ON w.REFRECID = p.RECID
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE w.TRACKINGSTATUS = 5 -- Approval
AND w.CONTEXT LIKE '%Manager approval%'
AND p.DATAREAID = '[YourCompanyId]'
AND w.CREATEDDATETIME >= '[StartDate]'
UNION ALL
SELECT
p.POSITIONID AS PositionId,
'Position Budget Approved' AS ActivityName,
w.CREATEDDATETIME AS EventTime,
w.CREATEDDATETIME AS EndTime,
w.USERID AS UserName,
dept.NAME AS DepartmentName,
pd.DESCRIPTION AS JobTitle,
'Pending HR' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM WorkflowTrackingStatusTable w
JOIN HcmPositionV2 p ON w.REFRECID = p.RECID
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE w.TRACKINGSTATUS = 5 -- Approval
AND w.CONTEXT LIKE '%Budget approval%'
AND p.DATAREAID = '[YourCompanyId]'
AND w.CREATEDDATETIME >= '[StartDate]'
UNION ALL
SELECT
p.POSITIONID AS PositionId,
'Position Request Approved By HR' AS ActivityName,
w.CREATEDDATETIME AS EventTime,
w.CREATEDDATETIME AS EndTime,
w.USERID AS UserName,
dept.NAME AS DepartmentName,
pd.DESCRIPTION AS JobTitle,
'Approved' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM WorkflowTrackingStatusTable w
JOIN HcmPositionV2 p ON w.REFRECID = p.RECID
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE w.TRACKINGSTATUS = 5 -- Approval
AND w.CONTEXT LIKE '%HR approval%'
AND p.DATAREAID = '[YourCompanyId]'
AND w.CREATEDDATETIME >= '[StartDate]'
UNION ALL
SELECT
p.POSITIONID AS PositionId,
'Position Request Rejected' AS ActivityName,
w.CREATEDDATETIME AS EventTime,
w.CREATEDDATETIME AS EndTime,
w.USERID AS UserName,
dept.NAME AS DepartmentName,
pd.DESCRIPTION AS JobTitle,
'Rejected' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM WorkflowTrackingStatusTable w
JOIN HcmPositionV2 p ON w.REFRECID = p.RECID
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE w.TRACKINGSTATUS = 3 -- Rejection
AND p.DATAREAID = '[YourCompanyId]'
AND w.CREATEDDATETIME >= '[StartDate]'
UNION ALL
SELECT
p.POSITIONID AS PositionId,
'Position Created In HR System' AS ActivityName,
p.CREATEDDATETIME AS EventTime,
p.CREATEDDATETIME AS EndTime,
p.CREATEDBY AS UserName,
dept.NAME AS DepartmentName,
j.DESCRIPTION AS JobTitle,
'Created' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM HcmPositionV2 p
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN HcmJob j ON p.JOBID = j.JOBID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE p.DATAREAID = '[YourCompanyId]'
AND p.CREATEDDATETIME >= '[StartDate]'
UNION ALL
SELECT
p.POSITIONID AS PositionId,
'Position Attributes Modified' AS ActivityName,
p.MODIFIEDDATETIME AS EventTime,
p.MODIFIEDDATETIME AS EndTime,
p.MODIFIEDBY AS UserName,
dept.NAME AS DepartmentName,
j.DESCRIPTION AS JobTitle,
'Modified' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM HcmPositionV2 p
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN HcmJob j ON p.JOBID = j.JOBID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE p.MODIFIEDDATETIME > p.CREATEDDATETIME
AND p.DATAREAID = '[YourCompanyId]'
AND p.MODIFIEDDATETIME >= '[StartDate]'
UNION ALL
SELECT
p.POSITIONID AS PositionId,
'Position Reviewed For Compliance' AS ActivityName,
pd.MODIFIEDDATETIME AS EventTime,
pd.MODIFIEDDATETIME AS EndTime,
pd.MODIFIEDBY AS UserName,
dept.NAME AS DepartmentName,
j.DESCRIPTION AS JobTitle,
'Compliance Reviewed' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM HcmPositionV2 p
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN HcmJob j ON p.JOBID = j.JOBID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE pd.[YourComplianceStatusField] = 'Reviewed' -- This requires a custom field indicating compliance review
AND p.DATAREAID = '[YourCompanyId]'
AND pd.MODIFIEDDATETIME >= '[StartDate]'
UNION ALL
SELECT
p.POSITIONID AS PositionId,
'Position Reclassified' AS ActivityName,
p.MODIFIEDDATETIME AS EventTime,
p.MODIFIEDDATETIME AS EndTime,
p.MODIFIEDBY AS UserName,
dept.NAME AS DepartmentName,
j.DESCRIPTION AS JobTitle,
'Reclassified' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM HcmPositionV2 p
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN HcmJob j ON p.JOBID = j.JOBID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE p.MODIFIEDDATETIME > p.CREATEDDATETIME -- This is an inference. See known limitations.
AND p.DATAREAID = '[YourCompanyId]'
AND p.MODIFIEDDATETIME >= '[StartDate]'
UNION ALL
SELECT
p.POSITIONID AS PositionId,
'Position Activated' AS ActivityName,
pd.VALIDFROM AS EventTime,
pd.VALIDFROM AS EndTime,
pd.MODIFIEDBY AS UserName,
dept.NAME AS DepartmentName,
j.DESCRIPTION AS JobTitle,
'Active' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM HcmPositionV2 p
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN HcmJob j ON p.JOBID = j.JOBID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE pd.VALIDFROM >= '[StartDate]'
AND p.DATAREAID = '[YourCompanyId]'
UNION ALL
SELECT
hr.POSITIONID AS PositionId,
'Hiring Process Started' AS ActivityName,
hr.CREATEDDATETIME AS EventTime,
hr.CREATEDDATETIME AS EndTime,
hr.CREATEDBY AS UserName,
dept.NAME AS DepartmentName,
j.DESCRIPTION AS JobTitle,
'Recruiting' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM HcmRecruitingRequest hr
JOIN HcmPositionV2 p ON hr.POSITIONID = p.POSITIONID
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN HcmJob j ON p.JOBID = j.JOBID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE hr.DATAREAID = '[YourCompanyId]'
AND hr.CREATEDDATETIME >= '[StartDate]'
UNION ALL
SELECT
p.POSITIONID AS PositionId,
'Position Frozen' AS ActivityName,
pd.MODIFIEDDATETIME AS EventTime, -- Assuming a status change triggers modification time
pd.MODIFIEDDATETIME AS EndTime,
pd.MODIFIEDBY AS UserName,
dept.NAME AS DepartmentName,
j.DESCRIPTION AS JobTitle,
'Frozen' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM HcmPositionV2 p
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN HcmJob j ON p.JOBID = j.JOBID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE p.[YourPositionStatusField] = 'Frozen' -- Requires a dedicated status field on the position
AND p.DATAREAID = '[YourCompanyId]'
AND pd.MODIFIEDDATETIME >= '[StartDate]'
UNION ALL
SELECT
p.POSITIONID AS PositionId,
'Position Deactivated' AS ActivityName,
pd.VALIDTO AS EventTime,
pd.VALIDTO AS EndTime,
pd.MODIFIEDBY AS UserName,
dept.NAME AS DepartmentName,
j.DESCRIPTION AS JobTitle,
'Inactive' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM HcmPositionV2 p
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN HcmJob j ON p.JOBID = j.JOBID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE pd.VALIDTO < '2154-12-31' -- D365 often uses this far-future date for 'never expires'
AND pd.VALIDTO >= '[StartDate]'
AND p.DATAREAID = '[YourCompanyId]'
UNION ALL
SELECT
p.POSITIONID AS PositionId,
'Position Closed' AS ActivityName,
pd.MODIFIEDDATETIME AS EventTime, -- Assuming a status change triggers modification time
pd.MODIFIEDDATETIME AS EndTime,
pd.MODIFIEDBY AS UserName,
dept.NAME AS DepartmentName,
j.DESCRIPTION AS JobTitle,
'Closed' AS PositionStatus,
pd.DEFAULTDIMENSIONDISPLAYVALUE AS CostCenter
FROM HcmPositionV2 p
JOIN HcmPositionDetail pd ON p.POSITIONID = pd.POSITIONID
LEFT JOIN HcmJob j ON p.JOBID = j.JOBID
LEFT JOIN OMOperatingUnit dept ON pd.DEPARTMENT = dept.OMOPERATINGUNITNUMBER
WHERE p.[YourPositionStatusField] = 'Closed' -- Requires a dedicated status field on the position
AND p.DATAREAID = '[YourCompanyId]'
AND pd.MODIFIEDDATETIME >= '[StartDate]'