Expand HTML Power BI HR manual

This commit is contained in:
2026-01-20 09:02:03 +01:00
parent 0871068ff8
commit 12d64bf009
2 changed files with 322 additions and 456 deletions
+322 -97
View File
@@ -8,11 +8,14 @@
:root {
color-scheme: light;
--accent: #1f6feb;
--accent-soft: #e0f2fe;
--text: #0f172a;
--muted: #475569;
--bg: #f8fafc;
--card: #ffffff;
--border: #e2e8f0;
--warning: #f97316;
--success: #16a34a;
--code: #0b1020;
}
body {
@@ -20,7 +23,7 @@
font-family: "Segoe UI", system-ui, -apple-system, sans-serif;
color: var(--text);
background: var(--bg);
line-height: 1.6;
line-height: 1.7;
}
header {
background: linear-gradient(120deg, #e0f2fe 0%, #eef2ff 100%);
@@ -32,21 +35,21 @@
font-size: 2.2rem;
}
header p {
margin: 4px 0;
margin: 6px 0;
color: var(--muted);
}
main {
max-width: 980px;
max-width: 1050px;
margin: 0 auto;
padding: 24px;
}
section {
background: var(--card);
border: 1px solid var(--border);
border-radius: 12px;
padding: 24px;
margin-bottom: 20px;
box-shadow: 0 4px 16px rgba(15, 23, 42, 0.04);
border-radius: 14px;
padding: 26px;
margin-bottom: 22px;
box-shadow: 0 4px 18px rgba(15, 23, 42, 0.05);
}
h2 {
margin-top: 0;
@@ -58,12 +61,16 @@
margin-bottom: 6px;
color: #1e293b;
}
h4 {
margin: 14px 0 6px;
color: #1f2937;
}
.badge {
display: inline-block;
padding: 2px 10px;
border-radius: 999px;
font-size: 0.85rem;
background: #e0f2fe;
background: var(--accent-soft);
color: #0369a1;
margin-left: 8px;
}
@@ -79,11 +86,15 @@
color: #1e293b;
}
.warning {
border-left-color: #f97316;
border-left-color: var(--warning);
background: #fff7ed;
}
.success {
border-left-color: var(--success);
background: #ecfdf3;
}
pre {
background: #0b1020;
background: var(--code);
color: #e2e8f0;
padding: 16px;
border-radius: 10px;
@@ -106,16 +117,34 @@
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
gap: 16px;
}
.grid-three {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
gap: 16px;
}
.kpi-list li {
margin-bottom: 4px;
}
.checklist li {
margin-bottom: 6px;
}
.small {
font-size: 0.92rem;
color: var(--muted);
}
.flow-box {
border: 1px solid var(--border);
border-radius: 10px;
padding: 12px;
background: #f1f5f9;
}
</style>
</head>
<body>
<header>
<h1>Power BI Schulungshandbuch für HR</h1>
<p>Word-Version: Nicht im Repo enthalten (Binary-Dateien werden beim PR-Erstellen nicht unterstützt).</p>
<p>Version: HTML-Ausgabe mit erweiterten Erklärungen, Checklisten und Beispielen.</p>
<p>Für 34 HR-Mitarbeiterinnen (Schweiz) mit wenig IT-Kenntnissen und Excel-Basis.</p>
<p class="small">Hinweis: Eine Word-Version ist nicht im Repo enthalten (Binary-Dateien werden beim PR-Erstellen nicht unterstützt).</p>
</header>
<main>
@@ -126,8 +155,8 @@
<h3>Zielgruppe</h3>
<ul>
<li>34 HR-Mitarbeiterinnen (Schweiz)</li>
<li>Excel-Basis + SVERWEIS</li>
<li>Technikaffinität 56/10</li>
<li>Excel: Basis + SVERWEIS</li>
<li>Technikaffinität: 56/10</li>
<li>Keine Power BI Vorkenntnisse</li>
</ul>
</div>
@@ -149,7 +178,7 @@
<li>Excel/CSV (Kununu-Score, Refline/Time-to-hire)</li>
</ul>
<h3>KPIs</h3>
<h3>KPIs (mit Periodizität)</h3>
<ul class="kpi-list">
<li>Headcount/FTE (monatlich)</li>
<li>Fluktuation (monatlich)</li>
@@ -166,98 +195,189 @@
</ul>
<figure>
<svg width="100%" height="240" viewBox="0 0 900 240" role="img" aria-label="Datenfluss von Quellen zu Power BI und Reports">
<svg width="100%" height="260" viewBox="0 0 980 260" role="img" aria-label="Datenfluss von Quellen zu Power BI und Reports">
<defs>
<linearGradient id="box" x1="0" x2="1">
<stop offset="0%" stop-color="#e0f2fe"/>
<stop offset="100%" stop-color="#eef2ff"/>
</linearGradient>
</defs>
<rect x="20" y="30" width="220" height="60" rx="12" fill="url(#box)" stroke="#94a3b8" />
<text x="130" y="65" text-anchor="middle" font-size="14" fill="#0f172a">SAP HCM/HRM</text>
<rect x="20" y="120" width="220" height="60" rx="12" fill="url(#box)" stroke="#94a3b8" />
<text x="130" y="155" text-anchor="middle" font-size="14" fill="#0f172a">Rexx HR-System</text>
<rect x="20" y="210" width="220" height="60" rx="12" fill="url(#box)" stroke="#94a3b8" />
<text x="130" y="245" text-anchor="middle" font-size="14" fill="#0f172a">Excel/CSV</text>
<rect x="330" y="100" width="220" height="80" rx="14" fill="#1f6feb" opacity="0.12" stroke="#1f6feb" />
<text x="440" y="145" text-anchor="middle" font-size="16" fill="#1f6feb">Power BI Desktop</text>
<rect x="650" y="70" width="220" height="120" rx="14" fill="#ecfeff" stroke="#0ea5e9" />
<text x="760" y="120" text-anchor="middle" font-size="14" fill="#0f172a">Berichte &amp; Dashboards</text>
<text x="760" y="145" text-anchor="middle" font-size="12" fill="#475569">GL · VR · Finanzen · Abteilungen</text>
<line x1="240" y1="60" x2="330" y2="120" stroke="#64748b" stroke-width="2" marker-end="url(#arrow)" />
<line x1="240" y1="150" x2="330" y2="140" stroke="#64748b" stroke-width="2" />
<line x1="240" y1="240" x2="330" y2="160" stroke="#64748b" stroke-width="2" />
<line x1="550" y1="140" x2="650" y2="130" stroke="#64748b" stroke-width="2" />
<defs>
<marker id="arrow" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto">
<path d="M0,0 L9,3 L0,6 Z" fill="#64748b" />
</marker>
</defs>
<rect x="20" y="30" width="240" height="60" rx="12" fill="url(#box)" stroke="#94a3b8" />
<text x="140" y="65" text-anchor="middle" font-size="14" fill="#0f172a">SAP HCM/HRM</text>
<rect x="20" y="120" width="240" height="60" rx="12" fill="url(#box)" stroke="#94a3b8" />
<text x="140" y="155" text-anchor="middle" font-size="14" fill="#0f172a">Rexx HR-System</text>
<rect x="20" y="210" width="240" height="60" rx="12" fill="url(#box)" stroke="#94a3b8" />
<text x="140" y="245" text-anchor="middle" font-size="14" fill="#0f172a">Excel/CSV</text>
<rect x="350" y="100" width="260" height="80" rx="14" fill="#1f6feb" opacity="0.12" stroke="#1f6feb" />
<text x="480" y="145" text-anchor="middle" font-size="16" fill="#1f6feb">Power BI Desktop</text>
<rect x="700" y="70" width="260" height="120" rx="14" fill="#ecfeff" stroke="#0ea5e9" />
<text x="830" y="120" text-anchor="middle" font-size="14" fill="#0f172a">Berichte &amp; Dashboards</text>
<text x="830" y="145" text-anchor="middle" font-size="12" fill="#475569">GL · VR · Finanzen · Abteilungen</text>
<line x1="260" y1="60" x2="350" y2="120" stroke="#64748b" stroke-width="2" marker-end="url(#arrow)" />
<line x1="260" y1="150" x2="350" y2="140" stroke="#64748b" stroke-width="2" />
<line x1="260" y1="240" x2="350" y2="160" stroke="#64748b" stroke-width="2" />
<line x1="610" y1="140" x2="700" y2="130" stroke="#64748b" stroke-width="2" marker-end="url(#arrow)" />
</svg>
<figcaption>Grafik: Datenfluss von HR-Quellen in Power BI bis zu den Zielgruppen-Reports.</figcaption>
</figure>
</section>
<section>
<h2>Vorbereitung: Arbeitsordner &amp; Dateien <span class="badge">Start</span></h2>
<ol>
<li>Lege einen Ordner <strong>HR-Power-BI</strong> an.</li>
<li>Erstelle Unterordner: <code>01_Rohdaten</code>, <code>02_Transformiert</code>, <code>03_Berichte</code>.</li>
<li>Speichere Exporte aus SAP/Rexx/Excel immer in <code>01_Rohdaten</code>.</li>
<li>Benutze klare Dateinamen mit Datum, z. B. <code>SAP_PA0001_2025-01.csv</code>.</li>
</ol>
<div class="callout success">Ziel: Alle Teammitglieder finden Dateien sofort wieder und arbeiten mit den gleichen Daten.</div>
</section>
<section>
<h2>1. Grundlagen &amp; Datenimport <span class="badge">Modul 1</span></h2>
<h3>1.1 Installation &amp; erster Start</h3>
<ol>
<li>Gehe auf https://powerbi.microsoft.com/de-de/desktop/ und lade Power BI Desktop herunter.</li>
<li>Installiere die Anwendung mit den Standardoptionen (Weiter → Installieren → Fertigstellen).</li>
<li>Starte Power BI Desktop und wähle Leerer Bericht.</li>
<li>Speichere die Datei als <code>HR-Reporting.pbix</code> in einem Projektordner.</li>
<li>Gehe auf <strong>https://powerbi.microsoft.com/de-de/desktop/</strong> und lade Power BI Desktop herunter.</li>
<li>Installiere mit Standardoptionen (Weiter → Installieren → Fertigstellen).</li>
<li>Starte Power BI Desktop und wähle <strong>Leerer Bericht</strong>.</li>
<li>Speichere die Datei als <code>HR-Reporting.pbix</code> in <code>03_Berichte</code>.</li>
</ol>
<div class="callout">Tipp: Lege eine Ordnerstruktur an: <code>01_Rohdaten</code>, <code>02_Modelle</code>, <code>03_Exporte</code>.</div>
<div class="callout">Tipp: Speichere früh und oft Power BI Desktop hat keine Auto-Speicherung.</div>
<h3>1.2 Oberfläche kennenlernen</h3>
<ol>
<li>Wechsle links zwischen Berichts-, Daten- und Modellansicht.</li>
<li>Suche das Menüband (oben), Visualisierungen (rechts) und den Felderbereich (rechts).</li>
<li>Öffne den Filterbereich, um Filter auf Visual-, Seiten- und Berichtsebene zu sehen.</li>
<li>Links: Berichtsansicht (Diagramme), Datenansicht (Tabellen), Modellansicht (Beziehungen).</li>
<li>Rechts: Visualisierungen (Diagramm-Typ), Felder (Spalten), Filter.</li>
<li>Oben: Menüband mit allen Funktionen.</li>
</ol>
<div class="callout">Merksatz: <strong>Felder</strong> sind die Daten, <strong>Visualisierungen</strong> sind die Diagramme.</div>
<h3>1.3 Excel &amp; CSV importieren</h3>
<h3>1.3 Excel importieren (Kununu, Refline)</h3>
<ol>
<li>Start → Daten abrufen → Excel/CSV.</li>
<li>Im Navigator nur relevante Tabellen auswählen.</li>
<li>Encoding auf UTF-8 setzen, wenn Umlaute falsch angezeigt werden.</li>
<li><strong>Start → Daten abrufen → Excel</strong>.</li>
<li>Datei auswählen → <strong>Öffnen</strong>.</li>
<li>Im Navigator das richtige Blatt wählen (z. B. <code>Kununu_Score</code>).</li>
<li>Klicke <strong>Laden</strong>.</li>
</ol>
<div class="callout warning">Warnung: Achte auf das Dezimaltrennzeichen (Punkt/Komma). Setze ggf. das Gebietsschema auf Schweiz.</div>
<div class="callout warning">Warnung: Excel-Tabellen ohne Überschrift führen zu „Spalte1/Spalte2“. Nutze in Power Query „Erste Zeile als Überschrift“.</div>
<h3>1.4 CSV importieren (Time-to-hire)</h3>
<ol>
<li><strong>Start → Daten abrufen → Text/CSV</strong>.</li>
<li>Datei auswählen → <strong>Öffnen</strong>.</li>
<li>Prüfe <strong>Trennzeichen</strong> (meist Semikolon).</li>
<li>Setze <strong>Dateiursprung</strong> auf UTF-8.</li>
</ol>
<div class="callout">Tipp: Umlaute (ä, ö, ü) sind das beste Zeichen, ob die Kodierung stimmt.</div>
<h3>1.5 SAP-Exporte importieren</h3>
<ol>
<li>SAP-Export lokal speichern (z. B. PA0001, PA0002, PA0008, PA2001).</li>
<li>Jeden Infotyp als eigene Tabelle laden.</li>
<li>Tabellen sofort umbenennen: <code>Mitarbeiter_Org</code>, <code>Mitarbeiter_Personal</code>, <code>Mitarbeiter_Lohn</code>, <code>Absenzen</code>.</li>
</ol>
<div class="callout warning">Warnung: SAP-Daten enthalten oft führende Nullen bei Personalnummern (PERNR). Nicht löschen!</div>
</section>
<section>
<h2>2. Power Query Editor <span class="badge">Modul 2</span></h2>
<h3>2.1 Datentypen &amp; Struktur</h3>
<h3>2.1 Power Query öffnen</h3>
<ol>
<li>Transformieren → Erste Zeile als Überschriften.</li>
<li>Datentypen auf Datum, Text oder Zahl setzen.</li>
<li>Überflüssige Spalten entfernen, relevante Spalten behalten.</li>
<li><strong>Start → Daten transformieren</strong>.</li>
<li>Du siehst eine Vorschau-Tabelle pro Datenquelle.</li>
</ol>
<h3>2.2 Filter &amp; Bereinigung</h3>
<h3>2.2 Erste Zeile als Überschrift</h3>
<ol>
<li>Filter für aktive Mitarbeitende setzen.</li>
<li>Nullwerte ersetzen (z. B. 0 für fehlende Überstunden).</li>
<li>Codes in Klartext umwandeln (z. B. A → Aktiv).</li>
<li><strong>Transformieren → Erste Zeile als Überschriften</strong>.</li>
<li>Kontrolliere, ob Spaltennamen sinnvoll sind.</li>
</ol>
<h3>2.3 Datentypen richtig setzen</h3>
<ol>
<li>Datumsspalten: <strong>Datum</strong> auswählen.</li>
<li>Zahlen: <strong>Ganze Zahl</strong> oder <strong>Dezimalzahl</strong>.</li>
<li>Text: <strong>Text</strong>.</li>
</ol>
<div class="callout warning">Warnung: Schweizer Datumsformat (TT.MM.JJJJ) braucht oft „Datentyp mit Gebietsschema (Deutsch Schweiz)“.</div>
<h3>2.4 Spalten entfernen / behalten</h3>
<ol>
<li>Unnötige Spalten markieren → <strong>Spalten entfernen</strong>.</li>
<li>Wenn nur 68 Spalten relevant sind: <strong>Andere Spalten entfernen</strong>.</li>
</ol>
<h3>2.5 Zeilen filtern</h3>
<ol>
<li>Filterpfeil in der Spalte <strong>Status</strong>.</li>
<li>Nur aktive Mitarbeitende wählen.</li>
<li>Zeitraum (z. B. letztes Jahr) filtern.</li>
</ol>
<h3>2.6 Werte ersetzen</h3>
<ol>
<li><strong>Transformieren → Werte ersetzen</strong>.</li>
<li><code>null</code> durch <code>0</code> ersetzen.</li>
<li>Codes wie <code>A</code> in Klartext (<code>Aktiv</code>) umwandeln.</li>
</ol>
<h3>2.7 Spalten teilen / zusammenführen</h3>
<ol>
<li>Spalte auswählen → <strong>Spalte teilen</strong> (z. B. Vorname/Nachname).</li>
<li>Mehrere Spalten zusammenführen (z. B. Vorname + Nachname).</li>
</ol>
<h3>2.8 Berechnete Spalte</h3>
<ol>
<li><strong>Spalte hinzufügen → Benutzerdefinierte Spalte</strong>.</li>
<li>Beispiel: FTE = Beschäftigungsgrad / 100.</li>
</ol>
<h3>2.9 Schliessen &amp; Laden</h3>
<ol>
<li><strong>Start → Schliessen &amp; Laden</strong>.</li>
<li>„Laden in“ nutzen, wenn du nur eine Verbindung brauchst.</li>
</ol>
</section>
<section>
<h2>3. Datenmodell <span class="badge">Modul 3</span></h2>
<h3>3.1 Beziehungen erstellen</h3>
<h3>3.1 Beziehungen verstehen</h3>
<div class="grid-three">
<div class="flow-box">
<strong>1:n Beziehung</strong>
<p class="small">Eine Personalnummer in der Mitarbeitertabelle kann viele Abwesenheitszeilen haben.</p>
</div>
<div class="flow-box">
<strong>1:1 Beziehung</strong>
<p class="small">Eine Personalnummer hat genau eine Detailzeile (z. B. Stammdaten).</p>
</div>
<div class="flow-box">
<strong>Filterfluss</strong>
<p class="small">Filter sollen meistens nur in eine Richtung laufen (Einweg).</p>
</div>
</div>
<h3>3.2 Beziehung erstellen</h3>
<ol>
<li>PERNR als Schlüssel zwischen SAP-Tabellen nutzen.</li>
<li>Datumsbeziehungen über eine zentrale Datumstabelle herstellen.</li>
<li>Kreuzfilterrichtung auf Einweg setzen.</li>
<li>Modellansicht öffnen (Beziehungs-Icon links).</li>
<li>Spalte <strong>PERNR</strong> von Tabelle A auf Tabelle B ziehen.</li>
<li>Kardinalität prüfen (1:n) und Kreuzfilterrichtung auf Einweg setzen.</li>
</ol>
<h3>3.2 Datumstabelle (DAX)</h3>
<h3>3.3 Datumstabelle erstellen</h3>
<ol>
<li><strong>Modellierung → Neue Tabelle</strong>.</li>
<li>DAX-Formel eingeben:</li>
</ol>
<pre><code>Datum = ADDCOLUMNS(
CALENDAR(DATE(2020,1,1), TODAY()),
"Jahr", YEAR([Date]),
@@ -266,65 +386,170 @@
"Quartal", "Q" &amp; QUARTER([Date]),
"KW", WEEKNUM([Date])
)</code></pre>
<ol start="3">
<li><strong>Tabellen-Tools → Als Datumstabelle markieren → Datum[Date]</strong>.</li>
</ol>
<h3>3.4 PERNR als Schlüssel</h3>
<ol>
<li>PERNR in allen SAP-Tabellen verwenden.</li>
<li>In Rexx/Excel dieselbe Spalte sicherstellen.</li>
<li>Bei führenden Nullen: Datentyp Text setzen (nicht Zahl).</li>
</ol>
</section>
<section>
<h2>4. DAX Measures <span class="badge">Modul 4</span></h2>
<h3>4.1 Basis-Measures</h3>
<h3>4.1 Measure vs. berechnete Spalte</h3>
<ul>
<li><strong>Measure:</strong> wird im Bericht berechnet, schneller und flexibler.</li>
<li><strong>Berechnete Spalte:</strong> wird in jeder Zeile gespeichert (macht Modell grösser).</li>
</ul>
<h3>4.2 Neues Measure erstellen</h3>
<ol>
<li><strong>Modellierung → Neues Measure</strong>.</li>
<li>Formel eingeben und Enter drücken.</li>
<li>Measure klar benennen (z. B. <code>Headcount</code>, <code>Fluktuation</code>).</li>
</ol>
<h3>4.3 Basis-Measures für HR</h3>
<pre><code>Headcount = COUNTROWS(Mitarbeiter)
FTE = SUMX(Mitarbeiter, Mitarbeiter[Beschäftigungsgrad]/100)
Krankenquote = DIVIDE([Krankheitstage], [Sollarbeitstage], 0)</code></pre>
Krankheitstage = SUM(Abwesenheiten[Kalendertage])
Sollarbeitstage = [Headcount] * 21
Krankenquote = DIVIDE([Krankheitstage], [Sollarbeitstage], 0)
Krankenquote_ohne_LZ =
VAR KrankheitstageKurz = CALCULATE([Krankheitstage], FILTER(Abwesenheiten, Abwesenheiten[Kalendertage] <= 30))
RETURN DIVIDE(KrankheitstageKurz, [Sollarbeitstage], 0)
Austritte = CALCULATE(COUNTROWS(Mitarbeiter), Mitarbeiter[Austritt] <> BLANK())
Avg_Headcount = AVERAGEX(VALUES(Datum[Monat]), [Headcount])
Fluktuation = DIVIDE([Austritte], [Avg_Headcount], 0) * 100</code></pre>
<h3>4.2 Zeitintelligenz</h3>
<h3>4.4 Zeitintelligenz</h3>
<pre><code>Headcount_VJ = CALCULATE([Headcount], SAMEPERIODLASTYEAR(Datum[Date]))
Headcount_YTD = TOTALYTD([Headcount], Datum[Date])</code></pre>
Headcount_VM = CALCULATE([Headcount], PREVIOUSMONTH(Datum[Date]))
Headcount_YTD = TOTALYTD([Headcount], Datum[Date])
Delta_VJ = [Headcount] - [Headcount_VJ]
Delta_VJ_Proz = DIVIDE([Delta_VJ], [Headcount_VJ], 0)</code></pre>
<h3>4.5 Measures formatieren</h3>
<ol>
<li>Measure auswählen.</li>
<li><strong>Measure-Tools → Format</strong> (Prozent, Währung, Dezimalstellen).</li>
</ol>
<div class="callout">Tipp: Für Krankenquote Prozentformat mit 1 Dezimalstelle verwenden.</div>
</section>
<section>
<h2>5. Visualisierung &amp; Dashboard <span class="badge">Module 56</span></h2>
<h3>5.1 Visuals gezielt einsetzen</h3>
<h2>5. Visualisierungen <span class="badge">Modul 5</span></h2>
<h3>5.1 Welche Visualisierung wofür?</h3>
<ul>
<li>Karten für KPI-Summen (Headcount, Fluktuation)</li>
<li>Liniendiagramm für Trendverläufe</li>
<li>Matrix für Detailansichten mit Drill-down</li>
<li><strong>Karte/Card:</strong> Einzelne KPI-Zahl (Headcount, Fluktuation).</li>
<li><strong>Balken:</strong> Vergleich von Abteilungen/Monaten.</li>
<li><strong>Linie:</strong> Trendverlauf (Headcount über 12 Monate).</li>
<li><strong>Ring:</strong> Anteil Absenzen nach Typ.</li>
<li><strong>Tachometer:</strong> Ziel vs Ist (Stellenplan).</li>
<li><strong>Matrix:</strong> Detailansicht mit Drill-down.</li>
</ul>
<h3>5.2 Dashboard-Layout</h3>
<h3>5.2 Erste Visualisierung erstellen</h3>
<ol>
<li>Visualisierung auswählen (z. B. Karte).</li>
<li>Feld <code>Headcount</code> in Werte ziehen.</li>
<li>Visual rechts auf der Seite platzieren.</li>
</ol>
<h3>5.3 Visualisierung formatieren</h3>
<ol>
<li>Visual auswählen → <strong>Format</strong> (Pinsel).</li>
<li>Titel hinzufügen: „Headcount aktuell“.</li>
<li>Farben gemäss Firmen-CI setzen.</li>
</ol>
<h3>5.4 Filter &amp; Slicer</h3>
<ol>
<li>Filterbereich öffnen.</li>
<li>Feld <code>Abteilung</code> als Seitenfilter setzen.</li>
<li>Slicer für Zeitraum hinzufügen.</li>
</ol>
<div class="callout warning">Warnung: Zu viele Filter verwirren. Maximal 23 Slicer pro Seite.</div>
</section>
<section>
<h2>6. Dashboard bauen <span class="badge">Modul 6</span></h2>
<h3>6.1 Layout planen</h3>
<ol>
<li>Wichtigste KPIs oben links platzieren (F-Muster).</li>
<li>Maximal 68 Visuals pro Seite.</li>
<li>Farben konsistent mit der Firmen-CI.</li>
<li>Genug Weissraum für bessere Lesbarkeit.</li>
</ol>
</section>
<section>
<h2>6. Veröffentlichen &amp; Teilen <span class="badge">Modul 7</span></h2>
<h3>6.2 Management-Übersicht (Seite 1)</h3>
<ol>
<li>Datei → Veröffentlichen → Arbeitsbereich wählen.</li>
<li>Dashboard-Visuals anheften.</li>
<li>Geplante Aktualisierung einrichten (mit Gateway für lokale Daten).</li>
<li>Row-Level Security für Abteilungsleiter einrichten.</li>
<li>KPI-Karten: Headcount, Krankenquote, Fluktuation, Stellenplan.</li>
<li>Trendlinie Headcount (12 Monate).</li>
<li>Absenzquote nach Typ als Ringdiagramm.</li>
</ol>
<h3>6.3 Detailanalyse (Seite 2)</h3>
<ol>
<li>Matrix mit Drill-down nach Abteilung.</li>
<li>Slicer: Zeitraum und Kostenstelle.</li>
</ol>
<h3>6.4 Interaktionen</h3>
<ol>
<li><strong>Format → Interaktionen bearbeiten</strong>.</li>
<li>Prüfen, ob Klick auf Balken andere Visuals filtert.</li>
</ol>
<div class="callout">Tipp: Teste RLS immer im Service über „Als Rolle anzeigen“.</div>
</section>
<section>
<h2>7. Troubleshooting &amp; Checklisten <span class="badge">Modul 89</span></h2>
<h3>7.1 Häufige Fehler</h3>
<h2>7. Veröffentlichen &amp; Teilen <span class="badge">Modul 7</span></h2>
<ol>
<li><strong>Datei → Veröffentlichen → Arbeitsbereich wählen</strong>.</li>
<li>Im Service Visuals anheften → Dashboard erstellen.</li>
<li>Teilen-Link an Geschäftsleitung/Finanzen senden.</li>
<li>Geplante Aktualisierung einrichten (Gateway für lokale Daten).</li>
</ol>
<div class="callout">Tipp: Teste RLS im Service immer mit „Als Rolle anzeigen“.</div>
</section>
<section>
<h2>8. Troubleshooting <span class="badge">Modul 8</span></h2>
<h3>8.1 Häufige Import-Fehler</h3>
<ul>
<li>Encoding-Probleme → UTF-8 auswählen</li>
<li>Datum als Text → Datentyp mit Gebietsschema Schweiz</li>
<li>Division durch Null → <code>DIVIDE()</code> verwenden</li>
<li>Umlaute falsch → Encoding auf UTF-8 stellen.</li>
<li>Datum als Text → Datentyp mit Gebietsschema Schweiz.</li>
<li>Dezimaltrennzeichen falsch → Gebietsschema prüfen.</li>
</ul>
<h3>7.2 Checkliste neuer Report</h3>
<ol>
<li>Datenquellen klären und Exporte konsolidieren.</li>
<li>Power Query Bereinigung durchführen.</li>
<li>Datenmodell und Datumstabelle sauber anlegen.</li>
<li>Measures erstellen und formatieren.</li>
<li>Dashboard bauen, testen, veröffentlichen.</li>
</ol>
<h3>8.2 DAX-Fehler</h3>
<ul>
<li>Zirkelbezug → berechnete Spalten vermeiden.</li>
<li>Division durch Null → <code>DIVIDE()</code> verwenden.</li>
<li>Filterkontext falsch → <code>CALCULATE()</code> prüfen.</li>
</ul>
</section>
<section>
<h2>9. Anhang: Cheat Sheet &amp; Checkliste <span class="badge">Modul 9</span></h2>
<h3>9.1 DAX Cheat Sheet</h3>
<pre><code>Headcount = COUNTROWS(Mitarbeiter)
FTE = SUMX(Mitarbeiter, Mitarbeiter[Beschäftigungsgrad]/100)
Krankenquote = DIVIDE([Krankheitstage], [Sollarbeitstage], 0)
Fluktuation = DIVIDE([Austritte], [Avg_Headcount], 0) * 100</code></pre>
<h3>9.2 Checkliste: Neuer Report</h3>
<ul class="checklist">
<li>Datenquellen klären (SAP, Rexx, Excel/CSV).</li>
<li>Daten importieren und bereinigen (Power Query).</li>
<li>Beziehungen und Datumstabelle erstellen.</li>
<li>Measures bauen und formatieren.</li>
<li>Dashboard layouten, testen, veröffentlichen.</li>
</ul>
</section>
</main>
</body>
@@ -1,359 +0,0 @@
# Power BI Schulungshandbuch für HR
Word-Version: Nicht im Repo enthalten (Binary-Dateien werden beim PR-Erstellen nicht unterstützt).
## Überblick
**Zielgruppe:** 34 HR-Mitarbeiterinnen (Schweiz), Excel-Basis + SVERWEIS, Technikaffinität 56/10, keine Power BI Vorkenntnisse.
**Datenquellen:**
- SAP HCM/HRM (alle Infotypen, besonders PA0001, PA0002, PA0008, PA2001)
- Rexx HR-System (Stellenplan, Pulsumfrage, MA-Zufriedenheit)
- Excel/CSV (Kununu-Score, Refline/Time-to-hire)
**KPIs (mit Periodizität):**
- Headcount/FTE (monatlich)
- Fluktuation (monatlich)
- Krankenquote gesamt + ohne Langzeitkrankheiten >30 Tage (Quartal)
- Überstunden (Quartal)
- Produktivstunden (wöchentlich)
- Ferientage/GLZ-Saldi (jährlich)
- Stellenplan Soll vs Ist (monatlich, aus Rexx)
- Lohnkosten (monatlich)
- Time to hire (Quartal)
- Kununu Score (monatlich)
- Pulsumfrage (Quartal, aus Rexx)
- MA-Zufriedenheitsumfrage (jährlich, aus Rexx)
**Zielgruppen der Reports:** Geschäftsleitung, Verwaltungsrat, Finanzbuchhaltung, Abteilungsleiter.
---
## 1. MODUL 1: GRUNDLAGEN & DATENIMPORT
### 1.1 Power BI Desktop installieren und starten
1. Schritt: Gehe auf https://powerbi.microsoft.com/de-de/desktop/ und lade Power BI Desktop herunter.
2. Schritt: Installiere die Anwendung mit den Standardoptionen (Weiter → Installieren → Fertigstellen).
3. Schritt: Starte Power BI Desktop über das Startmenü.
4. Schritt: Wähle "Leerer Bericht" und speichere die Datei als `HR-Reporting.pbix`.
[Screenshot: Startfenster von Power BI Desktop mit leeren Berichtsvorlagen].
**Tipp:** Wenn der Download blockiert ist, wende Dich an die IT (Admin-Rechte erforderlich).
### 1.2 Oberfläche kennenlernen
1. Schritt: Wechsle links zwischen **Berichtsansicht**, **Datenansicht** und **Modellansicht**.
2. Schritt: Erkenne die Bereiche: **Menüband**, **Visualisierungen**, **Felder**, **Seiten-Navigation**.
3. Schritt: Öffne rechts den Bereich **Filter**, um Visual-, Seiten- und Berichtsebene zu sehen.
[Screenshot: Power BI Desktop mit markierter Berichtsansicht, Visualisierungen und Felder-Bereich].
### 1.3 Excel-Datei importieren
1. Schritt: **Start → Daten abrufen → Excel**.
2. Schritt: Datei auswählen → **Öffnen**.
3. Schritt: Im **Navigator** Tabelle oder Blatt auswählen → **Laden**.
4. Schritt: Prüfe in der Datenansicht, ob die Spalten korrekt geladen wurden.
**Häufige Probleme und Lösungen:**
1. Problem: Falsche Spaltennamen → Lösung: Erste Zeile als Header setzen (Modul 2).
2. Problem: Zahlen als Text → Lösung: Datentyp korrigieren (Modul 2).
3. Problem: Leere Zeilen → Lösung: Leere Zeilen entfernen (Modul 2).
### 1.4 CSV importieren
1. Schritt: **Start → Daten abrufen → Text/CSV**.
2. Schritt: Datei auswählen → **Öffnen**.
3. Schritt: Im Vorschaufenster **Trennzeichen** (z. B. Semikolon) prüfen.
4. Schritt: **Dateiursprung** (Encoding) auf **UTF-8** stellen, wenn Umlaute falsch dargestellt werden.
**Warnung:** In der Schweiz sind Umlaute oft nur mit UTF-8 korrekt.
### 1.5 SAP-Export importieren
1. Schritt: SAP-Export (z. B. TXT/CSV/XLSX) in einen lokalen Ordner speichern.
2. Schritt: **Start → Daten abrufen → Text/CSV** oder **Excel** wählen.
3. Schritt: Prüfe, ob die erste Zeile die Spaltenüberschriften enthält.
4. Schritt: Importiere pro Infotyp getrennte Tabellen (PA0001, PA0002, PA0008, PA2001).
**Tipp:** Benenne Tabellen sofort verständlich um (z. B. `Mitarbeiter_Grunddaten`, `Mitarbeiter_Lohn`).
---
## 2. MODUL 2: POWER QUERY EDITOR
### 2.1 Power Query öffnen
1. Schritt: **Start → Daten transformieren**.
[Screenshot: Button 'Daten transformieren' im Menüband].
### 2.2 Erste Zeile als Header verwenden
1. Schritt: **Transformieren → Erste Zeile als Überschriften**.
2. Schritt: Prüfe, ob die Spaltennamen korrekt sind.
### 2.3 Datentypen ändern
1. Schritt: Spalte auswählen (z. B. Eintrittsdatum).
2. Schritt: **Transformieren → Datentyp → Datum**.
3. Schritt: Bei Zahlen **Dezimalzahl** oder **Ganze Zahl** wählen.
4. Schritt: Bei Schweizer Datumsformat **mit Gebietsschema (Deutsch Schweiz)** konvertieren.
**Warnung:** Datumsfelder werden oft als Text erkannt.
### 2.4 Spalten entfernen/behalten
1. Schritt: Unnötige Spalten markieren.
2. Schritt: **Start → Spalten entfernen**.
3. Schritt: Für schlanke Tabellen: **Andere Spalten entfernen**.
### 2.5 Zeilen filtern
1. Schritt: Filterpfeil in der Spalte **Status**.
2. Schritt: Nur aktive Mitarbeitende auswählen.
3. Schritt: Zeitraumfilter setzen (z. B. letztes Jahr).
### 2.6 Werte ersetzen
1. Schritt: **Transformieren → Werte ersetzen**.
2. Schritt: `null` durch `0` ersetzen.
3. Schritt: Codes (z. B. `A`) durch Klartext (z. B. `Aktiv`) ersetzen.
### 2.7 Spalten teilen/zusammenführen
1. Schritt: Spalte auswählen.
2. Schritt: **Transformieren → Spalte teilen** (nach Trennzeichen).
3. Schritt: Für Zusammenführen: **Transformieren → Spalten zusammenführen**.
### 2.8 Berechnete Spalte hinzufügen
1. Schritt: **Spalte hinzufügen → Benutzerdefinierte Spalte**.
2. Schritt: Formel eingeben (z. B. `Beschäftigungsgrad/100`).
### 2.9 Schliessen und Laden
1. Schritt: **Start → Schliessen & laden**.
2. Schritt: Unterschied: **Laden** speichert in Modell, **Laden in** erlaubt gezielte Ziele (z. B. nur Verbindung).
---
## 3. MODUL 3: DATENMODELL
### 3.1 Zur Modellansicht wechseln
1. Schritt: Links auf die Modellansicht (Beziehungs-Icon) klicken.
### 3.2 Beziehungen verstehen
1. Schritt: **1:n** = Eine Zeile in Tabelle A passt zu vielen Zeilen in Tabelle B.
2. Schritt: **1:1** = Jede Zeile passt genau zu einer anderen Zeile.
**Warum wichtig:** Beziehungen steuern, wie Filter zwischen Tabellen fliessen.
### 3.3 Beziehung erstellen
1. Schritt: Spalte in Tabelle A auf passende Spalte in Tabelle B ziehen (Drag & Drop).
2. Schritt: Beziehung prüfen → Kardinalität und Kreuzfilterrichtung einstellen.
3. Schritt: Beziehungsnamen überprüfen und bei Bedarf bearbeiten.
**Tipp:** Nutze meistens Einweg-Filterrichtung, um Mehrdeutigkeiten zu vermeiden.
### 3.4 Datumstabelle erstellen
1. Schritt: **Modellierung → Neue Tabelle**.
2. Schritt: DAX-Formel einfügen:
```
Datum = ADDCOLUMNS(
CALENDAR(DATE(2020,1,1), TODAY()),
"Jahr", YEAR([Date]),
"Monat", MONTH([Date]),
"MonatName", FORMAT([Date],"MMMM"),
"Quartal", "Q" & QUARTER([Date]),
"KW", WEEKNUM([Date])
)
```
3. Schritt: **Tabellen-Tools → Als Datumstabelle markieren → Datum[Date] auswählen**.
### 3.5 PERNR als Schlüssel
1. Schritt: Verwende die **Personalnummer (PERNR)** als Schlüssel zwischen SAP-Tabellen (PA0001, PA0002, PA0008, PA2001).
2. Schritt: In Rexx/Excel dieselbe Schlüsselspalte sicherstellen.
---
## 4. MODUL 4: DAX MEASURES
### 4.1 Measure vs. berechnete Spalte
1. Schritt: **Measure** berechnet sich dynamisch im Berichtskontext.
2. Schritt: **Berechnete Spalte** wird pro Zeile gespeichert und vergrössert das Modell.
### 4.2 Neues Measure erstellen
1. Schritt: **Modellierung → Neues Measure**.
2. Schritt: Formel eingeben und mit Enter bestätigen.
3. Schritt: Measure klar benennen (z. B. `Headcount`, `Fluktuation`).
### 4.3 Basis-Measures für HR
```
Headcount = COUNTROWS(Mitarbeiter)
FTE = SUMX(Mitarbeiter, Mitarbeiter[Beschäftigungsgrad]/100)
Krankheitstage = SUM(Abwesenheiten[Kalendertage])
Sollarbeitstage = [Headcount] * 21
Krankenquote = DIVIDE([Krankheitstage], [Sollarbeitstage], 0)
Krankenquote_ohne_LZ =
VAR KrankheitstageKurz = CALCULATE([Krankheitstage], FILTER(Abwesenheiten, Abwesenheiten[Kalendertage] <= 30))
RETURN DIVIDE(KrankheitstageKurz, [Sollarbeitstage], 0)
Austritte = CALCULATE(COUNTROWS(Mitarbeiter), Mitarbeiter[Austritt] <> BLANK())
Avg_Headcount = AVERAGEX(VALUES(Datum[Monat]), [Headcount])
Fluktuation = DIVIDE([Austritte], [Avg_Headcount], 0) * 100
```
### 4.4 Zeitintelligenz-Measures
```
Headcount_VJ = CALCULATE([Headcount], SAMEPERIODLASTYEAR(Datum[Date]))
Headcount_VM = CALCULATE([Headcount], PREVIOUSMONTH(Datum[Date]))
Headcount_YTD = TOTALYTD([Headcount], Datum[Date])
Delta_VJ = [Headcount] - [Headcount_VJ]
Delta_VJ_Proz = DIVIDE([Delta_VJ], [Headcount_VJ], 0)
```
### 4.5 Measures formatieren
1. Schritt: Measure auswählen.
2. Schritt: **Measure-Tools → Format** → Prozent, Dezimalstellen, Währung einstellen.
---
## 5. MODUL 5: VISUALISIERUNGEN
### 5.1 Visualisierungstypen und wann verwenden
1. **Karte/Card:** Einzelne KPI-Zahl (Headcount, Krankenquote).
2. **Balkendiagramm:** Vergleiche (Abteilungen, Monate).
3. **Liniendiagramm:** Zeitverläufe (Headcount über 12 Monate).
4. **Ringdiagramm:** Anteile (Absenzen nach Typ).
5. **Tachometer:** Ziel vs Ist (Stellenplan-Erfüllung).
6. **Tabelle/Matrix:** Details mit Drill-down.
### 5.2 Erste Visualisierung erstellen
1. Schritt: Visualisierung im Bereich **Visualisierungen** auswählen.
2. Schritt: Felder per Drag & Drop in Achse/Werte ziehen.
3. Schritt: Visualisierung auf der Seite positionieren und Grösse anpassen.
### 5.3 Visualisierung formatieren
1. Schritt: Visual auswählen → **Format** (Pinsel).
2. Schritt: Titel, Farben, Schriftgrössen anpassen.
3. Schritt: Einheit und Anzeigeform festlegen (z. B. Tausender, Dezimalstellen).
### 5.4 Filter hinzufügen
1. Schritt: Filterbereich öffnen.
2. Schritt: Felder in **Visualfilter**, **Seitenfilter** oder **Berichtsfilter** ziehen.
### 5.5 Slicer erstellen
1. Schritt: Visualisierung → **Datenschnitt (Slicer)** wählen.
2. Schritt: Feld (z. B. Zeitraum, Abteilung) hinzufügen.
### 5.6 Bedingte Formatierung
1. Schritt: In Tabelle/Matrix auf Wertefeld klicken → **Bedingte Formatierung**.
2. Schritt: Regeln definieren (z. B. Rot/Grün je nach Wert).
---
## 6. MODUL 6: DASHBOARD BAUEN
### 6.1 Dashboard-Layout planen
1. Schritt: **F-Muster** beachten Wichtigstes oben links.
2. Schritt: Maximal **68 Visualisierungen** pro Seite.
3. Schritt: KPI-Karten immer in gleicher Reihenfolge anordnen.
### 6.2 Seite 1: Management-Übersicht
1. Schritt: KPI-Karten oben: Headcount, Krankenquote, Fluktuation, Stellenplan.
2. Schritt: Trendlinie Headcount über 12 Monate.
3. Schritt: Absenzquote nach Typ als Ringdiagramm.
### 6.3 Seite 2: Detailanalyse
1. Schritt: Matrix mit Drill-down nach Abteilung.
2. Schritt: Filter für Zeitraum und Kostenstelle (Slicer).
### 6.4 Interaktionen
1. Schritt: **Format → Interaktionen bearbeiten**.
2. Schritt: Prüfen, ob Klick auf Balken andere Visuals filtert oder hervorhebt.
### 6.5 Design-Tipps
1. Schritt: Konsistente Farben (Firmen-CI).
2. Schritt: Genügend Weissraum.
3. Schritt: Beschriftungen gut lesbar.
---
## 7. MODUL 7: VERÖFFENTLICHEN & TEILEN
### 7.1 Power BI Service (app.powerbi.com)
1. Schritt: Konto erstellen/anmelden.
2. Schritt: Unterschied Desktop vs Service: Desktop = Modell/Bericht, Service = Teilen/Dashboard.
### 7.2 Bericht veröffentlichen
1. Schritt: **Datei → Veröffentlichen → Arbeitsbereich wählen**.
### 7.3 Arbeitsbereich einrichten
1. Schritt: Im Service → Arbeitsbereich erstellen.
2. Schritt: Zugriffsrechte für Geschäftsleitung/Finanzbuchhaltung setzen.
### 7.4 Dashboard erstellen (aus Bericht)
1. Schritt: Im Service Visualisierung auswählen → **Anheften**.
2. Schritt: Neues Dashboard erstellen oder bestehendes wählen.
### 7.5 Bericht teilen
1. Schritt: **Teilen → Link generieren**.
2. Schritt: Zugriff verwalten (Rollen/Personen).
### 7.6 Automatische Aktualisierung
1. Schritt: Datensatz → **Geplante Aktualisierung** (täglich/wöchentlich).
2. Schritt: Für lokale Daten **Gateway** einrichten (IT einbeziehen).
### 7.7 Row-Level Security (RLS)
1. Schritt: **Modellierung → Rollen verwalten**.
2. Schritt: Rolle erstellen, Filter setzen: `[Abteilung] = USERPRINCIPALNAME()`.
---
## 8. TROUBLESHOOTING
### 8.1 Häufige Fehler beim Import
1. Encoding-Probleme (UTF-8) → Dateiursprung im Import anpassen.
2. Dezimaltrennzeichen (Punkt vs Komma) → Datentyp mit Gebietsschema Schweiz.
3. Datum als Text → Datentyp Datum und richtiges Gebietsschema.
### 8.2 Häufige DAX-Fehler
1. Zirkelbezug → Berechnete Spalten vermeiden, Measures nutzen.
2. Division durch Null → `DIVIDE()` verwenden.
3. Falscher Filterkontext → Filter mit `CALCULATE()` prüfen.
### 8.3 Beziehungsprobleme
1. Mehrdeutige Beziehungen → Eine Beziehung aktiv, andere inaktiv setzen.
2. Fehlende Beziehung → Schlüsselspalten prüfen (PERNR, Datum).
### 8.4 Performance-Probleme
1. Zu viele Spalten importiert → Spalten reduzieren.
2. Zu viele berechnete Spalten → Measures bevorzugen.
---
## 9. ANHANG
### 9.1 DAX Cheat Sheet (alle HR-Formeln)
```
Headcount = COUNTROWS(Mitarbeiter)
FTE = SUMX(Mitarbeiter, Mitarbeiter[Beschäftigungsgrad]/100)
Krankheitstage = SUM(Abwesenheiten[Kalendertage])
Sollarbeitstage = [Headcount] * 21
Krankenquote = DIVIDE([Krankheitstage], [Sollarbeitstage], 0)
Krankenquote_ohne_LZ = VAR KrankheitstageKurz = CALCULATE([Krankheitstage], FILTER(Abwesenheiten, Abwesenheiten[Kalendertage] <= 30))
RETURN DIVIDE(KrankheitstageKurz, [Sollarbeitstage], 0)
Austritte = CALCULATE(COUNTROWS(Mitarbeiter), Mitarbeiter[Austritt] <> BLANK())
Avg_Headcount = AVERAGEX(VALUES(Datum[Monat]), [Headcount])
Fluktuation = DIVIDE([Austritte], [Avg_Headcount], 0) * 100
Headcount_VJ = CALCULATE([Headcount], SAMEPERIODLASTYEAR(Datum[Date]))
Headcount_VM = CALCULATE([Headcount], PREVIOUSMONTH(Datum[Date]))
Headcount_YTD = TOTALYTD([Headcount], Datum[Date])
Delta_VJ = [Headcount] - [Headcount_VJ]
Delta_VJ_Proz = DIVIDE([Delta_VJ], [Headcount_VJ], 0)
```
### 9.2 Checkliste: Neuen Report erstellen
1. Datenquellen klären (SAP, Rexx, Excel/CSV).
2. Daten importieren (Modul 1).
3. Daten bereinigen in Power Query (Modul 2).
4. Beziehungen und Datumstabelle erstellen (Modul 3).
5. Measures erstellen (Modul 4).
6. Visuals bauen und formatieren (Modul 5).
7. Dashboard layouten (Modul 6).
8. Veröffentlichen und teilen (Modul 7).
### 9.3 Glossar
- **Power Query:** Datenaufbereitungstool in Power BI.
- **DAX:** Formelsprache für Berechnungen in Power BI.
- **Measure:** Dynamische Kennzahl, abhängig vom Filterkontext.
- **Berechnete Spalte:** Feste Berechnung pro Zeile.
- **RLS:** Row-Level Security für zeilenbasierte Zugriffssteuerung.