// ============================================================
// DAX MEASURES: Fluktuation gemaess formeln.docx
// ============================================================
// Voraussetzung:
// - Query/Tabelle: HR_KPI_DATEN_SAP mit aktiven Mitarbeitenden
// - Query/Tabelle: Rexx_Ausgeschieden aus rexx_ausgeschieden.txt
// - Rexx_Ausgeschieden[Ist_Fluktuationsrelevant] filtert:
//   nur Arbeitnehmerkuendigungen, keine Aushilfen/Praktikanten/
//   Werkstudenten/Lehrlinge, keine Pensionierungen, keine befristeten
//   Vertraege, keine Kuendigungen durch Trafag.
//
// Hinweis:
// HR_KPI_DATEN_SAP ist aktuell eine Stichtags-/Monatstabelle. Falls spaeter
// echte Monats-Snapshots geladen werden, funktionieren die Durchschnitts-
// Headcount-Measures ueber Monat/Quartal/Jahr genauer.
// ============================================================

Headcount Festangestellt =
COALESCE(
    CALCULATE(
        DISTINCTCOUNT(HR_KPI_DATEN_SAP[Personalnummer]),
        HR_KPI_DATEN_SAP[Ist_Aktiv] = TRUE(),
        HR_KPI_DATEN_SAP[Mitarbeitertyp] = "Festangestellt"
    ),
    0
)

Headcount Aktiv Total =
COALESCE(
    CALCULATE(
        DISTINCTCOUNT(HR_KPI_DATEN_SAP[Personalnummer]),
        HR_KPI_DATEN_SAP[Ist_Aktiv] = TRUE()
    ),
    0
)

Austritte Total Rexx =
COALESCE(DISTINCTCOUNT(Rexx_Ausgeschieden[Personalnummer]), 0)

Austritte Arbeitnehmerkuendigung =
COALESCE(
    CALCULATE(
        DISTINCTCOUNT(Rexx_Ausgeschieden[Personalnummer]),
        Rexx_Ausgeschieden[Ist_Arbeitnehmerkuendigung] = TRUE()
    ),
    0
)

Austritte Fluktuationsrelevant =
VAR Perioden = VALUES(HR_KPI_DATEN_SAP[Periode])
VAR Basis =
    CALCULATE(
        DISTINCTCOUNT(Rexx_Ausgeschieden[Personalnummer]),
        Rexx_Ausgeschieden[Ist_Fluktuationsrelevant] = TRUE()
    )
VAR NachPeriode =
    CALCULATE(
        DISTINCTCOUNT(Rexx_Ausgeschieden[Personalnummer]),
        Rexx_Ausgeschieden[Ist_Fluktuationsrelevant] = TRUE(),
        TREATAS(Perioden, Rexx_Ausgeschieden[Austrittsmonat])
    )
RETURN
    COALESCE(
        IF(
        ISFILTERED(HR_KPI_DATEN_SAP[Periode]) || ISINSCOPE(HR_KPI_DATEN_SAP[Periode]),
        NachPeriode,
        Basis
        ),
        0
    )

Austritte Nicht Fluktuationsrelevant =
COALESCE(
    CALCULATE(
        DISTINCTCOUNT(Rexx_Ausgeschieden[Personalnummer]),
        Rexx_Ausgeschieden[Ist_Fluktuationsrelevant] = FALSE()
    ),
    0
)

Fluktuation Monat % =
COALESCE(
    DIVIDE(
        [Austritte Fluktuationsrelevant],
        [Headcount Festangestellt]
    ),
    0
)

Avg Headcount Quartal =
COALESCE(
    AVERAGEX(
        VALUES(HR_KPI_DATEN_SAP[Periode]),
        [Headcount Festangestellt]
    ),
    [Headcount Festangestellt],
    0
)

Austritte Quartal =
VAR HatPeriodenfilter =
    ISFILTERED(HR_KPI_DATEN_SAP[Periode]) ||
    ISFILTERED(HR_KPI_DATEN_SAP[Jahr]) ||
    ISFILTERED(HR_KPI_DATEN_SAP[Monat])
VAR Auswertungsdatum =
    IF(
        HatPeriodenfilter,
        MAX(HR_KPI_DATEN_SAP[Periode]),
        MAX(Rexx_Ausgeschieden[Austrittsmonat])
    )
VAR QuartalsStart =
    DATE(
        YEAR(Auswertungsdatum),
        1 + 3 * QUOTIENT(MONTH(Auswertungsdatum) - 1, 3),
        1
    )
VAR QuartalsEnde = EOMONTH(QuartalsStart, 2)
RETURN
COALESCE(
    CALCULATE(
        DISTINCTCOUNT(Rexx_Ausgeschieden[Personalnummer]),
        Rexx_Ausgeschieden[Ist_Fluktuationsrelevant] = TRUE(),
        FILTER(
            ALL(Rexx_Ausgeschieden[Austrittsmonat]),
            Rexx_Ausgeschieden[Austrittsmonat] >= QuartalsStart &&
            Rexx_Ausgeschieden[Austrittsmonat] <= QuartalsEnde
        )
    ),
    0
)

Fluktuation Quartal % =
COALESCE(
    DIVIDE(
        [Austritte Quartal],
        [Avg Headcount Quartal]
    ),
    0
)

Fluktuation Hochrechnung Jahr % =
COALESCE([Fluktuation Quartal %] * 4, 0)

Avg Headcount Jahr =
COALESCE(
    AVERAGEX(
        VALUES(HR_KPI_DATEN_SAP[Periode]),
        [Headcount Festangestellt]
    ),
    [Headcount Festangestellt],
    0
)

Austritte Jahr =
VAR HatPeriodenfilter =
    ISFILTERED(HR_KPI_DATEN_SAP[Periode]) ||
    ISFILTERED(HR_KPI_DATEN_SAP[Jahr]) ||
    ISFILTERED(HR_KPI_DATEN_SAP[Monat])
VAR Auswertungsdatum =
    IF(
        HatPeriodenfilter,
        MAX(HR_KPI_DATEN_SAP[Periode]),
        MAX(Rexx_Ausgeschieden[Austrittsmonat])
    )
VAR Auswertungsjahr = YEAR(Auswertungsdatum)
RETURN
COALESCE(
    CALCULATE(
        DISTINCTCOUNT(Rexx_Ausgeschieden[Personalnummer]),
        Rexx_Ausgeschieden[Ist_Fluktuationsrelevant] = TRUE(),
        FILTER(
            ALL(Rexx_Ausgeschieden[Austrittsmonat]),
            YEAR(Rexx_Ausgeschieden[Austrittsmonat]) = Auswertungsjahr
        )
    ),
    0
)

Fluktuation Jahr Effektiv % =
COALESCE(
    DIVIDE(
        [Austritte Jahr],
        [Avg Headcount Jahr]
    ),
    0
)

BU_Tage_Total =
COALESCE(SUM(HR_KPI_DATEN_SAP[BU_Tage]), 0)

NBU_Tage_Total =
COALESCE(SUM(HR_KPI_DATEN_SAP[NBU_Tage]), 0)

Unfalltage Total =
[BU_Tage_Total] + [NBU_Tage_Total]

Fluktuation Ausschlussgrund Anzahl =
COUNTROWS(Rexx_Ausgeschieden)
