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

Hide last authors
Dimitri Rupp 1.1 1 {{box cssClass="floatinginfobox" title="**On this page**"}}
2 {{toc/}}
3 {{/box}}
4
5 = Linemanager — Produktivierungsreport_Master =
6
7 {{info}}
8 **Antragssteller:** Bereichsuebergreifend (Linemanager + Mitarbeiter)
9 **Quellsystem:** Rimo (splworkentry, sdmperson)
10 **Spezialfunktion:** **Row-Level Security (RLS)** — Linemanager sehen nur ihr Team
11 {{/info}}
12
13 == Zweck ==
14
15 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.
16
17 == Frontend ==
18
19 === LZ/NLZ Screen ===
20
21 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.
22
23 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**.
24
25 **Seitenuebergreifende Selektoren** (beeinflussen einander):
26
27 * **Datum** — Zeitraums-Einschraenkung
28 * **Projektname/CC** — Auswahl Projekt oder Kostenstellen
29 * **Person** — Auswahl Person
30 * (% style="font-family:monospace" %)isabsenttype(%%) — Auswahl Abwesenheitsstatus
31 * **Billable Flag** — Auswahl auf Rimo Billable Flag
32 * **Geschaeftsjahr** — Auswahl Geschaeftsjahr (Eingeschraenkt durch Datumsbereichsauswahl)
33
34 **Ansichts-Modi:**
35
36 * **Ansicht Linemanager** — Informationen schraenken sich auf den Linemanager und sein unterstelltes Team ein.
37 * **Ansicht Mitarbeiter** — Informationen schraenken sich auf den Mitarbeiter selbst ein.
38
39 **Drill Through Ziel:** Time Entries.
40
41 === Productive / Non Productive Time Screen ===
42
43 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.
44
45 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**.
46
47 === Billable / Non Billable Percent Screen ===
48
49 Der Screen zeigt die **prozentuelle Verteilung** der produktivierten Zeiten von den selektierten Personen auf das selektierte Projekt/CC — oder allgemein.
50
51 {{mermaid}}
52 flowchart LR
53 L[LZ/NLZ Screen<br/>Einstieg] -->|Drill| PNP[Productive/<br/>Non Productive Time]
54 PNP -->|Drill Productive| TE1[Time Entries<br/>Billable]
55 PNP -->|Drill Non Productive| TE2[Time Entries<br/>Non Billable]
56 L -->|Wechsel| BNB[Billable/Non Billable<br/>Percent Screen]
57
58 classDef screen fill:#e3f2fd,stroke:#1976d2,stroke-width:1px
59 classDef drill fill:#fff3cd,stroke:#b85c00,stroke-width:1px
60 class L,PNP,BNB screen
61 class TE1,TE2 drill
62 {{/mermaid}}
63
64 == Backend ==
65
66 === Datenmodell ===
67
68 **Last Refresh Date Tabelle** (Ausgabe der letzten Aktualisierung der Datenmodelle):
69
70 {{code language="dax"}}
71 Script: DateTime.LocalNow()
72 {{/code}}
73
74 === Measure Table ===
75
76 {{code language="dax"}}
77 Productive Time =
78 CALCULATE(
79 SUM(splworkentry[durationasfloat]),
80 FILTER('sdmsalesorder_sdmwtrproject_union_active',
81 'sdmsalesorder_sdmwtrproject_union_active'[Billable Flag]="Billable")
82 )
83
84 Non Productive Time =
85 CALCULATE(
86 SUM(splworkentry[durationasfloat]),
87 FILTER('sdmsalesorder_sdmwtrproject_union_active',
88 'sdmsalesorder_sdmwtrproject_union_active'[Billable Flag]="Non-Billable")
89 )
90
91 Selection =
92 IF(
93 ISFILTERED(sdmperson[Person]),
94 CONCATENATEX(sdmperson, sdmperson[Person], ", ", sdmperson[Person], ASC),
95 "No selection made"
96 )
97
98 LZ =
99 CALCULATE(
100 SUM(splworkentry[durationasfloat]),
101 FILTER('splworkentry', 'splworkentry'[isabsenttype]="FALSE")
102 )
103
104 NLZ =
105 CALCULATE(
106 SUM(splworkentry[durationasfloat]),
107 FILTER('splworkentry', 'splworkentry'[isabsenttype]="TRUE")
108 )
109
110 Total Time = [Productive Time] + [Non Productive Time]
111
112 Billable Time Percent = [Productive Time] / [Total Time]
113
114 Non Billable Time Percent = 1 - [Billable Time Percent]
115
116 DurationTime = SUM(splworkentry[durationasfloat])
117 {{/code}}
118
119 === Row-Level Security (RLS) Script ===
120
121 {{code language="dax"}}
122 VAR currentuser =
123 LOOKUPVALUE(
124 sdmperson[externalid],
125 sdmperson[email], USERPRINCIPALNAME(),
126 sdmperson[active], TRUE
127 )
128 RETURN
129 IF(
130 OR(currentuser = BLANK(), currentuser = " "),
131 FALSE,
132 CONTAINSSTRING([getlinemanager_cleaned], currentuser)
133 || sdmperson[externalid] = currentuser
134 // zusaetzliche Bedingung damit Linemanager sich selbst auch sieht
135 // und nicht nur sein Team
136 )
137 {{/code}}
138
139 {{info}}
140 **Hinweis zur RLS-Logik:** Der zweite Teil der ODER-Bedingung ((% style="font-family:monospace" %)sdmperson[externalid] = currentuser(%%)) sorgt dafuer, dass der Linemanager **sich selbst** im Report sieht — nicht nur die ihm unterstellten Teammitglieder.
141 {{/info}}
142
143 == Zentrale Begriffe ==
144
145 |=Begriff|=Bedeutung
146 |**LZ — Leistungszeit**|Zeit, die als Leistung gebucht wurde (isabsenttype = FALSE)
147 |**NLZ — Nicht-Leistungszeit**|Abwesenheit / Urlaub / Krank (isabsenttype = TRUE)
148 |**Productive Time / Billable**|LZ, die auf ein //billable// Projekt/CC gebucht wurde
149 |**Non Productive Time / Non Billable**|LZ, die auf ein //non-billable// Projekt/CC gebucht wurde
150 |**Linemanager**|Vorgesetzter mit Sicht auf eigenes Team (via RLS)
151
152 == Related pages ==
153
154 * [[Bereichsuebergreifende Arbeitsbereiche (Hub)>>doc:IT-Wiki.01-Data.Reporting.PowerBI.Bereichsuebergreifend.WebHome]]
155 * [[Power BI Architektur>>doc:IT-Wiki.01-Data.Reporting.PowerBI.WebHome]]
156 * [[DAX>>doc:IT-Wiki.02-Tools.PowerBI.DAX.WebHome]] — Hintergrund zu CALCULATE, FILTER, USERPRINCIPALNAME
157 * [[Measures>>doc:IT-Wiki.02-Tools.PowerBI.Measures.WebHome]]
158
159 ----
160
161 == Verwandte Themen ==
162
163 {{include reference="IT-Wiki.Makros.Verwandte-Themen.WebHome"/}}
164
165 ----
166 **Status:** Migriert — Team-Review ausstehend · **Owner:** //(festlegen)// · **Letzter Review:** 2026-06-11
167