Linemanager — Produktivierungsreport_Master

Last modified by Dimitri Rupp on 2026/06/11 09:30

Linemanager — Produktivierungsreport_Master

Information

Antragssteller: Bereichsuebergreifend (Linemanager + Mitarbeiter)
Quellsystem: Rimo (splworkentry, sdmperson)
Spezialfunktion: Row-Level Security (RLS) — Linemanager sehen nur ihr Team

Zweck

Der Produktivierungsreport_Master ist der bereichsuebergreifende Master-Report fuer Linemanager und Mitarbeiter zur Auswertung der produktivierten Zeit. Er zeigt, wie sich die Zeit auf Leistungszeit (LZ) und Nicht-Leistungszeit (NLZ) sowie Billable vs. Non-Billable aufteilt.

Frontend

LZ/NLZ Screen

Ueber diesen Screen passiert der Einstieg in den Produktivierungsreport. Er gibt Aufschluss darueber, wie sich die produktivierte Zeit der angezeigten Personen auf LZ (Leistungszeit) und NLZ (Nicht-Leistungszeit) aufteilt.

Von hier aus kann man mittels Drill Through auf die Time Entries (Zeiteintraege) drillen. Diese zeigen die Zeitproduktivierungen auf Basis des Drills die entsprechenden Projekt/CC auf Monat- und weitergehend Tagesbasis.

Seitenuebergreifende Selektoren (beeinflussen einander):

  • Datum — Zeitraums-Einschraenkung
  • Projektname/CC — Auswahl Projekt oder Kostenstellen
  • Person — Auswahl Person
  • isabsenttype — Auswahl Abwesenheitsstatus
  • Billable Flag — Auswahl auf Rimo Billable Flag
  • Geschaeftsjahr — Auswahl Geschaeftsjahr (Eingeschraenkt durch Datumsbereichsauswahl)

Ansichts-Modi:

  • Ansicht Linemanager — Informationen schraenken sich auf den Linemanager und sein unterstelltes Team ein.
  • Ansicht Mitarbeiter — Informationen schraenken sich auf den Mitarbeiter selbst ein.

Drill Through Ziel: Time Entries.

Productive / Non Productive Time Screen

Der Screen gibt Aufschluss darueber, wie sich die auf Projekte, Kostenstellen oder von Personen produktivierten Zeiten auf Productive Time (Billable) und Non Productive Time (Non Billable) aufteilen.

Je nachdem, ob man auf den Productive-Time-Balken drillt, steht ein Drill Through auf eine Aufschluesselung der Billable Time auf Projekte/CC zur Verfuegung — oder beim Drill auf Non Productive Time ein Drill Through auf Non Billable Times.

Billable / Non Billable Percent Screen

Der Screen zeigt die prozentuelle Verteilung der produktivierten Zeiten von den selektierten Personen auf das selektierte Projekt/CC — oder allgemein.

flowchart LR
    L[LZ/NLZ Screen
Einstieg] -->|Drill| PNP[Productive/
Non Productive Time] PNP -->|Drill Productive| TE1[Time Entries
Billable] PNP -->|Drill Non Productive| TE2[Time Entries
Non Billable] L -->|Wechsel| BNB[Billable/Non Billable
Percent Screen] classDef screen fill:#e3f2fd,stroke:#1976d2,stroke-width:1px classDef drill fill:#fff3cd,stroke:#b85c00,stroke-width:1px class L,PNP,BNB screen class TE1,TE2 drill

Backend

Datenmodell

Last Refresh Date Tabelle (Ausgabe der letzten Aktualisierung der Datenmodelle):

Script: DateTime.LocalNow()

Measure Table

Productive Time =
  CALCULATE(
    SUM(splworkentry[durationasfloat]),
    FILTER('sdmsalesorder_sdmwtrproject_union_active',
           'sdmsalesorder_sdmwtrproject_union_active'[Billable Flag]="Billable")
  )

Non Productive Time =
  CALCULATE(
    SUM(splworkentry[durationasfloat]),
    FILTER('sdmsalesorder_sdmwtrproject_union_active',
           'sdmsalesorder_sdmwtrproject_union_active'[Billable Flag]="Non-Billable")
  )

Selection =
  IF(
    ISFILTERED(sdmperson[Person]),
    CONCATENATEX(sdmperson, sdmperson[Person], ", ", sdmperson[Person], ASC),
    "No selection made"
  )

LZ =
  CALCULATE(
    SUM(splworkentry[durationasfloat]),
    FILTER('splworkentry', 'splworkentry'[isabsenttype]="FALSE")
  )

NLZ =
  CALCULATE(
    SUM(splworkentry[durationasfloat]),
    FILTER('splworkentry', 'splworkentry'[isabsenttype]="TRUE")
  )

Total Time = [Productive Time] + [Non Productive Time]

Billable Time Percent = [Productive Time] / [Total Time]

Non Billable Time Percent = 1 - [Billable Time Percent]

DurationTime = SUM(splworkentry[durationasfloat])

Row-Level Security (RLS) Script

VAR currentuser =
  LOOKUPVALUE(
    sdmperson[externalid],
    sdmperson[email], USERPRINCIPALNAME(),
    sdmperson[active], TRUE
  )
RETURN
  IF(
    OR(currentuser = BLANK(), currentuser = " "),
    FALSE,
    CONTAINSSTRING([getlinemanager_cleaned], currentuser)
      || sdmperson[externalid] = currentuser
      // zusaetzliche Bedingung damit Linemanager sich selbst auch sieht
      // und nicht nur sein Team
  )
Information

Hinweis zur RLS-Logik: Der zweite Teil der ODER-Bedingung (sdmperson[externalid] = currentuser) sorgt dafuer, dass der Linemanager sich selbst im Report sieht — nicht nur die ihm unterstellten Teammitglieder.

Zentrale Begriffe

BegriffBedeutung
LZ — LeistungszeitZeit, die als Leistung gebucht wurde (isabsenttype = FALSE)
NLZ — Nicht-LeistungszeitAbwesenheit / Urlaub / Krank (isabsenttype = TRUE)
Productive Time / BillableLZ, die auf ein billable Projekt/CC gebucht wurde
Non Productive Time / Non BillableLZ, die auf ein non-billable Projekt/CC gebucht wurde
LinemanagerVorgesetzter mit Sicht auf eigenes Team (via RLS)

Related pages


Verwandte Themen

Automatisch vorgeschlagen über gemeinsame Tags (powerbi, reporting, architektur): 


Status: Migriert — Team-Review ausstehend · Owner: (festlegen) · Letzter Review: 2026-06-11