Diplom-Biologe | Senior IT-Consultant
|
SH |
Sascha Hess xenosystems.de - IT-Consulting & Data Management |
www.xenosystems.de |
|
|
Strategische Wissens-Roadmap 2026 |
|
|
|
|
|
ERP-KPIs & Controlling |
|
|
Die richtigen Kennzahlen — automatisiert, aktuell, entscheidungsrelevant |
WAS SIE IN DIESEM KIT ERHALTEN:
|
|
1 |
50 ERP-KPIs Einkauf, Lager, Vertrieb, Finanzen — fertige SQL-Abfragen |
|
|
2 |
KPI-Automatisierung Tägliche Kennzahlen ohne manuellen Aufwand |
|
|
3 |
Power BI Schnelleinstieg Von der SQL-Abfrage zum Dashboard in einem Tag |
|
|
4 |
Frühwarnsystem Automatische Alerts bei KPI-Abweichungen |
|
|
5 |
30-Tage-Dashboard-Plan Erstes Management-Dashboard in einem Monat live |
HAFTUNGSAUSSCHLUSS
Alle Skripte, KPI-Definitionen und Empfehlungen wurden sorgfältig erarbeitet. Da jede ERP-Umgebung individuelle Datenstrukturen verwendet, übernimmt der Autor keinerlei Haftung für fehlerhafte Kennzahlen, Fehlentscheidungen auf Basis dieser Daten oder sonstige Schäden. Validieren Sie alle Abfragen gegen Ihre spezifische Datenbankstruktur.
KEINE ERGEBNISGARANTIE
KPI-Definitionen und SQL-Abfragen sind Vorlagen — keine fertigen Lösungen. Tabellenbezeichnungen, Feldnamen und Geschäftslogik weichen je nach ERP-System und Customizing ab. Fachliche Validierung durch Controlling und Buchhaltung ist zwingend erforderlich.
VERSIONSHINWEIS
Die Inhalte beziehen sich auf Microsoft Dynamics Business Central 2024/2025, MACH, APplus und Power BI, Stand März 2026. Herstellerupdates können Datenbankstrukturen und Feldbezeichnungen verändern.
URHEBERRECHT
Dieses Dokument ist für den persönlichen oder betriebsinternen Gebrauch des Käufers lizenziert. Weiterverkauf, Weitergabe an Dritte und öffentliche Veröffentlichung sind ohne schriftliche Genehmigung nicht gestattet.
KEINE VERBINDUNG ZU HERSTELLERN
Dieses Kit ist ein unabhängiges Werk und steht in keinerlei Verbindung zu Microsoft, MACH AG, Asseco Solutions oder anderen genannten Herstellern.
Eine ausführliche Version dieses Haftungsausschlusses befindet sich am Ende dieses Dokuments.
01 Einleitung
Warum ERP-KPIs ohne Automatisierung wertlos sind
02 KPI-Framework
Struktur, Definitionen und Qualitätskriterien
03 Einkaufs-KPIs
Liefertreue, Preisabweichung, Durchlaufzeit
04 Lager-KPIs
Umschlagshäufigkeit, Reichweite, Bestandsgenauigkeit
05 Vertriebs-KPIs
Auftragseingang, Liefertreue, Deckungsbeitrag
06 Finanz-KPIs
DSO, DPO, Liquidität, Offene Posten
07 KPI-Automatisierung
SQL Jobs, Staging-Tabellen, tägliche Berechnung
08 Power BI Schnelleinstieg
Von der Abfrage zum Dashboard in einem Tag
09 Frühwarnsystem
Automatische Alerts bei Zielwertabweichungen
10 30-Tage-Dashboard-Plan
Erstes Management-Dashboard produktiv in einem Monat
01
Jedes ERP-System enthält alle Daten, die für ein fundiertes Unternehmenscontrolling nötig sind. Trotzdem arbeiten die meisten mittelständischen Unternehmen mit monatlichen Excel-Berichten, die mühsam per Hand zusammengestellt werden — veraltet, fehleranfällig und zu spät für operative Entscheidungen.
Das Problem ist nicht die Datenverfügbarkeit — sondern die fehlende Automatisierung.
→ Kennzahlen, die nur monatlich verfügbar sind, ermöglichen nur monatliche Reaktionen — zu spät für viele operative Entscheidungen.
→ Manuell erstellte Berichte kosten in typischen KMU 5-15 Stunden pro Woche — für Tätigkeiten, die vollautomatisch laufen könnten.
→ Inkonsistente KPI-Definitionen führen zu Diskussionen über Zahlen statt über Maßnahmen.
→ Fehlende Frühwarnsysteme bedeuten: Probleme werden sichtbar, wenn der Schaden bereits entstanden ist.
Die Lösung ist ein einfaches, automatisiertes KPI-System direkt aus dem ERP — mit klaren Definitionen, täglicher Berechnung und automatischen Alerts bei Abweichungen. Dieses Kit liefert dafür die Blaupause.
|
|
WAS SIE IN DIESEM KIT ERWARTEN DÜRFEN ■ 50 ERP-KPIs — Mit Formel, SQL-Vorlage und Zielwert-Empfehlung für jede Kennzahl. ■ KPI-Automatisierung — Staging-Tabellen, Berechnungs-Jobs und tägliche Aktualisierung. ■ Power BI Schnelleinstieg — Von der ersten SQL-Abfrage zum interaktiven Dashboard. ■ Frühwarnsystem — Automatische Mail-Alerts bei Zielwertabweichungen. ■ 30-Tage-Plan — Erstes Management-Dashboard in einem Monat produktiv. |
|
|
ZIEL DIESES KITS Nach dem Lesen und Umsetzen dieses Kits haben Sie ein automatisiertes KPI-System, das täglich aktuell ist — ohne manuelle Arbeit. Führungskräfte sehen morgens die wichtigsten Zahlen, Abweichungen werden automatisch gemeldet, und Berichte schreiben sich selbst. |
02
Bevor die erste Abfrage geschrieben wird, braucht es ein gemeinsames Verständnis: Was messen wir? Warum? Wie? Ein solides KPI-Framework verhindert die häufigste Falle — Kennzahlen zu messen, die niemand nutzt.
|
JEDE KPI MUSS SEIN:
S — Spezifisch Eindeutige Definition, keine Interpretationsspielräume. Schlecht: "Kundenzufriedenheit" Gut: "Reklamationsquote = Reklamationen / Lieferungen × 100"
M — Messbar Aus dem ERP berechenbar, ohne manuelle Ergänzungen. Datenquelle, Formel und Einheit schriftlich definiert.
A — Akzeptiert Von Fachbereich und Controlling gemeinsam definiert. Nicht von IT allein — sonst wird die Zahl nicht genutzt.
R — Relevant Führt die Kennzahl zu Entscheidungen oder Maßnahmen? Wenn nicht: weglassen.
T — Terminiert Zeitraum und Aktualisierungsfrequenz festgelegt. Täglich, wöchentlich oder monatlich — bewusst gewählt. |
Jede KPI sollte in einem Steckbrief dokumentiert sein — vor der Umsetzung, nicht danach.
|
Feld |
Beispiel |
|
Name |
Liefertreue Lieferanten |
|
Definition |
Anteil pünktlicher Lieferungen an Gesamtlieferungen |
|
Formel |
Pünktliche Lfg. / Gesamt-Lfg. × 100 |
|
Einheit |
Prozent |
|
Zielwert |
≥ 95 % |
|
Alarmgrenze |
< 90 % |
|
Datenquelle |
Wareneingangstabelle, Bestelltabelle |
|
Aktualisierung |
Täglich |
|
Owner |
Einkaufsleiter |
|
STRATEGISCHE KPIs (Monatlich / Lenkungsausschuss) EBIT-Marge, Liquidität 3. Grades, Eigenkapitalrendite
TAKTISCHE KPIs (Wöchentlich / Abteilungsleiter) Liefertreue, Lagerumschlag, Forderungslaufzeit (DSO)
OPERATIVE KPIs (Täglich / Teamleiter / Disponenten) Offene Bestellungen, Überfällige Rechnungen, Lagerbestand |
03
Einkaufs-KPIs messen die Leistungsfähigkeit des Beschaffungsprozesses — von der Bestellung bis zum Wareneingang. Sie sind die Grundlage für Lieferantenbewertung und Prozessverbesserung.
Formel: Pünktliche Wareneingänge / Alle Wareneingänge × 100
Zielwert: ≥ 95 % | Alarmgrenze: < 90 %
|
-- Liefertreue je Lieferant (rollierende 90 Tage) SELECT l.LieferantNr, l.Name AS Lieferant, COUNT(*) AS Gesamt_Lieferungen, SUM(CASE WHEN we.Eingangsdatum <= b.ZugesagtesLieferdatum THEN 1 ELSE 0 END) AS Puenktlich, ROUND(100.0 * SUM(CASE WHEN we.Eingangsdatum <= b.ZugesagtesLieferdatum THEN 1 ELSE 0 END) / COUNT(*), 1) AS Liefertreue_Pct, AVG(DATEDIFF(DAY, b.ZugesagtesLieferdatum, we.Eingangsdatum)) AS Avg_Verzoegerung_Tage FROM dbo.Wareneingaenge we JOIN dbo.Bestellungen b ON we.BestellNr = b.BestellNr JOIN dbo.Lieferanten l ON b.LieferantNr = l.LieferantNr WHERE we.Eingangsdatum >= DATEADD(DAY, -90, CAST(GETDATE() AS DATE)) GROUP BY l.LieferantNr, l.Name HAVING COUNT(*) >= 5 -- Mindestens 5 Lieferungen für Aussagekraft ORDER BY Liefertreue_Pct ASC; |
Formel: (Ist-Preis − Standardpreis) / Standardpreis × 100
Zielwert: < ±3 % | Alarmgrenze: > ±10 %
|
-- Preisabweichung je Artikel (letztes Quartal) SELECT a.ArtikelNr, a.Bezeichnung, a.Standardpreis, AVG(bp.EinzelPreis) AS Avg_EinkaufsPreis, ROUND(100.0 * (AVG(bp.EinzelPreis) - a.Standardpreis) / NULLIF(a.Standardpreis, 0), 1) AS Abweichung_Pct, SUM(bp.Menge) AS Gesamt_Menge, SUM(bp.Menge * (bp.EinzelPreis - a.Standardpreis)) AS Abweichung_EUR FROM dbo.BestellPositionen bp JOIN dbo.Artikel a ON bp.ArtikelNr = a.ArtikelNr JOIN dbo.Bestellungen b ON bp.BestellNr = b.BestellNr WHERE b.Bestelldatum >= DATEADD(QUARTER, -1, CAST(GETDATE() AS DATE)) AND a.Standardpreis > 0 GROUP BY a.ArtikelNr, a.Bezeichnung, a.Standardpreis HAVING ABS(ROUND(100.0 * (AVG(bp.EinzelPreis) - a.Standardpreis) / NULLIF(a.Standardpreis, 0), 1)) > 3 ORDER BY ABS(Abweichung_EUR) DESC; |
|
KPI |
Formel |
Zielwert |
Frequenz |
|
Bestelldurchlaufzeit |
Ø Tage Bestellung → Wareneingang |
≤ Lieferzeit + 1 Tag |
Täglich |
|
Maverick Buying Quote |
Käufe ohne Bestellung / Gesamtkäufe |
< 5 % |
Monatlich |
|
Lieferantenkonzentration |
Anteil Top-3-Lieferanten am Einkaufsvolumen |
< 60 % |
Monatlich |
|
Reklamationsquote Einkauf |
Reklamierte Lieferungen / Gesamt-Lieferungen |
< 2 % |
Wöchentlich |
|
Bestellwert je Bestellung |
Ø Nettowert je Bestellvorgang |
> 500 € (Bündelung) |
Monatlich |
04
Lager-KPIs zeigen, ob gebundenes Kapital effizient eingesetzt wird — und ob die Verfügbarkeit für Produktion und Vertrieb gesichert ist.
Formel: Umsatz (zu Einstandspreisen) / Ø Lagerbestand (zu Einstandspreisen)
Zielwert: Branchenabhängig — Handel 8-15×, Produktion 4-8× pro Jahr
|
-- Lagerumschlagshäufigkeit je Warengruppe (laufendes Jahr) SELECT a.Warengruppe, SUM(vp.Menge * vp.EinstandsPreis) AS Umsatz_Einstand, AVG(lb.Bestandswert) AS Avg_Lagerbestand, ROUND(SUM(vp.Menge * vp.EinstandsPreis) / NULLIF(AVG(lb.Bestandswert), 0), 1) AS Umschlag_Haeufigkeit, ROUND(365.0 / NULLIF( SUM(vp.Menge * vp.EinstandsPreis) / NULLIF(AVG(lb.Bestandswert), 0), 0), 0) AS Reichweite_Tage FROM dbo.VerkaufsPositionen vp JOIN dbo.Artikel a ON vp.ArtikelNr = a.ArtikelNr JOIN dbo.Lagerbestaende lb ON a.ArtikelNr = lb.ArtikelNr WHERE vp.Belegdatum >= DATEFROMPARTS(YEAR(GETDATE()), 1, 1) GROUP BY a.Warengruppe ORDER BY Umschlag_Haeufigkeit ASC; |
Formel: Lagerbestand / Ø Tagesverbrauch
Zielwert: 14-30 Tage (abhängig von Lieferzeit) | Alarmgrenze: < 7 Tage oder > 90 Tage
|
-- Lagerreichweite je Artikel — kritische Artikel hervorheben WITH VerbrauchPro90Tage AS ( SELECT ArtikelNr, SUM(Menge) / 90.0 AS TagesVerbrauch FROM dbo.VerkaufsPositionen WHERE Belegdatum >= DATEADD(DAY, -90, CAST(GETDATE() AS DATE)) GROUP BY ArtikelNr ) SELECT a.ArtikelNr, a.Bezeichnung, lb.Bestand, ROUND(v.TagesVerbrauch, 2) AS TagesVerbrauch, ROUND(lb.Bestand / NULLIF(v.TagesVerbrauch, 0), 0) AS Reichweite_Tage, CASE WHEN lb.Bestand / NULLIF(v.TagesVerbrauch, 0) < 7 THEN 'KRITISCH' WHEN lb.Bestand / NULLIF(v.TagesVerbrauch, 0) < 14 THEN 'Niedrig' WHEN lb.Bestand / NULLIF(v.TagesVerbrauch, 0) > 90 THEN 'Überbestand' ELSE 'OK' END AS Status FROM dbo.Artikel a JOIN dbo.Lagerbestaende lb ON a.ArtikelNr = lb.ArtikelNr JOIN VerbrauchPro90Tage v ON a.ArtikelNr = v.ArtikelNr WHERE a.Aktiv = 1 AND lb.Bestand > 0 ORDER BY Reichweite_Tage ASC; |
|
KPI |
Formel |
Zielwert |
Frequenz |
|
Bestandsgenauigkeit |
Inventurzählung = Systembestand (%) |
> 98 % |
Nach Inventur |
|
Slow Mover Quote |
Artikel ohne Bewegung > 180 Tage / Gesamt |
< 10 % |
Monatlich |
|
Lagerkostenquote |
Lagerkosten / Ø Lagerwert |
< 20 % p.a. |
Monatlich |
|
Lieferfähigkeit |
Sofort lieferbare Aufträge / Gesamt |
> 95 % |
Täglich |
|
Nullbestand-Quote |
Artikel mit Bestand = 0 / Aktive Artikel |
< 5 % |
Täglich |
05
Vertriebs-KPIs messen die Effektivität des Verkaufsprozesses — von der Anfrage bis zur Auslieferung und Zahlung.
Formel: Nettowert aller eingegangenen Aufträge im Zeitraum
|
-- Auftragseingang: aktueller Monat vs. Vormonat vs. Vorjahr SELECT YEAR(Auftragsdatum) AS Jahr, MONTH(Auftragsdatum) AS Monat, COUNT(*) AS Anzahl_Auftraege, SUM(Nettobetrag) AS Auftragseingang_EUR, AVG(Nettobetrag) AS Avg_Auftragswert, LAG(SUM(Nettobetrag)) OVER (ORDER BY YEAR(Auftragsdatum), MONTH(Auftragsdatum)) AS Vormonat, ROUND(100.0 * (SUM(Nettobetrag) - LAG(SUM(Nettobetrag)) OVER (ORDER BY YEAR(Auftragsdatum), MONTH(Auftragsdatum))) / NULLIF(LAG(SUM(Nettobetrag)) OVER (ORDER BY YEAR(Auftragsdatum), MONTH(Auftragsdatum)), 0), 1) AS Veraenderung_Pct FROM dbo.Verkaufsauftraege WHERE Auftragsdatum >= DATEADD(MONTH, -13, DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1)) AND Belegart = 'Auftrag' GROUP BY YEAR(Auftragsdatum), MONTH(Auftragsdatum) ORDER BY Jahr DESC, Monat DESC; |
Formel: Pünktliche Lieferungen / Alle Lieferungen × 100
Zielwert: ≥ 95 % | Alarmgrenze: < 90 %
|
-- Liefertreue an Kunden je Monat SELECT YEAR(ls.Lieferdatum) AS Jahr, MONTH(ls.Lieferdatum) AS Monat, COUNT(*) AS Gesamt_Lieferungen, SUM(CASE WHEN ls.Lieferdatum <= va.ZugesagtesLieferdatum THEN 1 ELSE 0 END) AS Puenktlich, ROUND(100.0 * SUM(CASE WHEN ls.Lieferdatum <= va.ZugesagtesLieferdatum THEN 1 ELSE 0 END) / COUNT(*), 1) AS Liefertreue_Pct, AVG(DATEDIFF(DAY, va.ZugesagtesLieferdatum, ls.Lieferdatum)) AS Avg_Verz_Tage FROM dbo.Lieferscheine ls JOIN dbo.Verkaufsauftraege va ON ls.AuftragsNr = va.AuftragsNr WHERE ls.Lieferdatum >= DATEADD(MONTH, -6, CAST(GETDATE() AS DATE)) GROUP BY YEAR(ls.Lieferdatum), MONTH(ls.Lieferdatum) ORDER BY Jahr DESC, Monat DESC; |
|
KPI |
Formel |
Zielwert |
Frequenz |
|
Angebots-Abschlussquote |
Aufträge / Angebote × 100 |
> 30 % |
Monatlich |
|
Deckungsbeitrag I |
Umsatz − variable Kosten |
Budgetwert |
Monatlich |
|
Umsatz je Mitarbeiter |
Gesamtumsatz / Anzahl MA |
Branchenwert |
Monatlich |
|
Retourenquote |
Retouren / Lieferungen × 100 |
< 3 % |
Wöchentlich |
|
Durchschnittlicher Auftragswert |
Σ Nettoumsatz / Anzahl Aufträge |
Trendbeobachtung |
Monatlich |
|
Top-10-Kunden-Anteil |
Umsatz Top 10 / Gesamtumsatz |
< 50 % |
Monatlich |
06
Finanz-KPIs sind die sensibelsten Kennzahlen — sie zeigen, ob das Unternehmen zahlungsfähig bleibt und ob Forderungen und Verbindlichkeiten im Griff sind.
Formel: Ø Forderungen / (Jahresumsatz / 365)
Zielwert: ≤ vereinbartes Zahlungsziel + 5 Tage | Alarmgrenze: > vereinbartes Ziel + 20 Tage
|
-- DSO: Durchschnittliche Forderungslaufzeit (rollierende 90 Tage) WITH UmsatzJahr AS ( SELECT SUM(Nettobetrag) / 365.0 AS TagesUmsatz FROM dbo.Verkaufsbelege WHERE Belegdatum >= DATEADD(YEAR, -1, CAST(GETDATE() AS DATE)) AND Belegart = 'Rechnung' ) SELECT ROUND(SUM(op.OffenerBetrag) / u.TagesUmsatz, 1) AS DSO_Tage, SUM(op.OffenerBetrag) AS Gesamtforderungen_EUR, COUNT(*) AS Anzahl_Offene_Posten, SUM(CASE WHEN DATEDIFF(DAY, op.Faelligkeitsdatum, GETDATE()) > 0 THEN op.OffenerBetrag ELSE 0 END) AS Ueberfaellig_EUR, ROUND(100.0 * SUM(CASE WHEN DATEDIFF(DAY, op.Faelligkeitsdatum, GETDATE()) > 0 THEN op.OffenerBetrag ELSE 0 END) / NULLIF(SUM(op.OffenerBetrag), 0), 1) AS Ueberfaellig_Pct FROM dbo.OffenePosten op CROSS JOIN UmsatzJahr u WHERE op.Typ = 'Forderung'; |
Formel: Ø Verbindlichkeiten / (Jahreseinkauf / 365)
Zielwert: Möglichst nah am vereinbarten Zahlungsziel (Liquidität optimieren)
|
-- Überfällige Verbindlichkeiten mit Skontopotenzial SELECT l.Name AS Lieferant, op.BelegNr AS Rechnungsnummer, op.Belegdatum, op.Faelligkeitsdatum, op.SkontodatumI AS Skonto_Faellig, op.OffenerBetrag, DATEDIFF(DAY, op.Faelligkeitsdatum, GETDATE()) AS Tage_Ueberfaellig, CASE WHEN GETDATE() <= op.SkontodatumI THEN ROUND(op.OffenerBetrag * op.SkontoProzentI / 100, 2) ELSE 0 END AS Skontopotenzial_EUR FROM dbo.OffenePosten op JOIN dbo.Lieferanten l ON op.KontoNr = l.LieferantNr WHERE op.Typ = 'Verbindlichkeit' AND op.OffenerBetrag > 0 ORDER BY op.SkontodatumI ASC, Tage_Ueberfaellig DESC; |
|
KPI |
Formel |
Zielwert |
Frequenz |
|
Liquidität 1. Grades |
Zahlungsmittel / kurzfr. Verbindl. |
> 20 % |
Täglich |
|
Liquidität 3. Grades |
Umlaufvermögen / kurzfr. Verbindl. |
> 120 % |
Monatlich |
|
Debitorenausfallquote |
Abgeschriebene Forderungen / Umsatz |
< 0,5 % |
Monatlich |
|
Skontoquote |
Genutzte Skonti / Mögliche Skonti |
> 80 % |
Monatlich |
|
Mahnquotenverteilung |
OP je Mahnstufe / Gesamtforderungen |
Mahnstufe 1 > 80 % |
Wöchentlich |
07
KPIs manuell zu berechnen eliminiert den Nutzen. Dieser Abschnitt zeigt, wie ein vollautomatisches KPI-System aufgebaut wird — von der Staging-Tabelle bis zum täglichen Berechnungsjob.
|
EMPFOHLENE ARCHITEKTUR:
ERP-Produktivdatenbank (Read-only für KPI-Jobs) ↓ (nächtlicher ETL-Job) KPI-Staging-Datenbank (eigene DB: "KPI_DWH") ├── dbo.KPI_Definitionen (Metadaten aller KPIs) ├── dbo.KPI_Tagesdaten (tägliche Berechnungsergebnisse) ├── dbo.KPI_Zielwerte (Soll-Werte je KPI und Periode) ├── dbo.KPI_Alerts (ausgelöste Warnmeldungen) └── dbo.KPI_History (Langzeitarchiv, 3 Jahre) ↓ (DirectQuery oder Import) Power BI Dashboard |
|
-- KPI-Definitionstabelle CREATE TABLE dbo.KPI_Definitionen ( KPI_ID INT IDENTITY PRIMARY KEY, KPI_Code NVARCHAR(50) UNIQUE NOT NULL, KPI_Name NVARCHAR(200) NOT NULL, Bereich NVARCHAR(50), -- Einkauf / Lager / Vertrieb / Finanzen Einheit NVARCHAR(20), -- %, EUR, Tage, Stück Zielwert DECIMAL(18,2), Alarmgrenze DECIMAL(18,2), Alarm_Richtung NVARCHAR(10), -- 'unter' oder 'ueber' Beschreibung NVARCHAR(MAX), Aktiv BIT DEFAULT 1 );
-- KPI-Tagesdaten CREATE TABLE dbo.KPI_Tagesdaten ( ID INT IDENTITY PRIMARY KEY, KPI_ID INT REFERENCES dbo.KPI_Definitionen(KPI_ID), Berechnungs_Datum DATE NOT NULL, Wert DECIMAL(18,4), Dimension1 NVARCHAR(100), -- z.B. Warengruppe, Lieferant Berechnet_Am DATETIME2 DEFAULT GETDATE(), CONSTRAINT UQ_KPI_Tag UNIQUE (KPI_ID, Berechnungs_Datum, Dimension1) );
-- KPI-Alerts CREATE TABLE dbo.KPI_Alerts ( AlertID INT IDENTITY PRIMARY KEY, KPI_ID INT REFERENCES dbo.KPI_Definitionen(KPI_ID), Alert_Datum DATETIME2 DEFAULT GETDATE(), Ist_Wert DECIMAL(18,4), Ziel_Wert DECIMAL(18,4), Abweichung_Pct DECIMAL(8,2), Alert_Gesendet BIT DEFAULT 0, Empfaenger NVARCHAR(500) ); |
|
-- Täglicher KPI-Berechnungsjob (SQL Agent, täglich 06:00) -- Beispiel: Liefertreue Lieferanten automatisch berechnen und speichern
DECLARE @Datum DATE = CAST(GETDATE() AS DATE); DECLARE @KPI_ID INT = (SELECT KPI_ID FROM dbo.KPI_Definitionen WHERE KPI_Code = 'EINK_LIEFERTREUE');
-- Alte Werte für heute löschen (Idempotenz) DELETE FROM dbo.KPI_Tagesdaten WHERE KPI_ID = @KPI_ID AND Berechnungs_Datum = @Datum;
-- Neue Werte berechnen und speichern INSERT INTO dbo.KPI_Tagesdaten (KPI_ID, Berechnungs_Datum, Wert, Dimension1) SELECT @KPI_ID, @Datum, ROUND(100.0 * SUM(CASE WHEN we.Eingangsdatum <= b.ZugesagtesLieferdatum THEN 1 ELSE 0 END) / COUNT(*), 1), l.Name FROM dbo.Wareneingaenge we JOIN dbo.Bestellungen b ON we.BestellNr = b.BestellNr JOIN dbo.Lieferanten l ON b.LieferantNr = l.LieferantNr WHERE we.Eingangsdatum >= DATEADD(DAY, -90, @Datum) GROUP BY l.LieferantNr, l.Name HAVING COUNT(*) >= 5;
-- Alert prüfen INSERT INTO dbo.KPI_Alerts (KPI_ID, Ist_Wert, Ziel_Wert, Abweichung_Pct) SELECT t.KPI_ID, t.Wert, d.Alarmgrenze, ROUND(100.0 * (t.Wert - d.Alarmgrenze) / NULLIF(d.Alarmgrenze, 0), 1) FROM dbo.KPI_Tagesdaten t JOIN dbo.KPI_Definitionen d ON t.KPI_ID = d.KPI_ID WHERE t.KPI_ID = @KPI_ID AND t.Berechnungs_Datum = @Datum AND d.Alarm_Richtung = 'unter' AND t.Wert < d.Alarmgrenze; |
08
Power BI ist das leistungsfähigste und für M365-Kunden kostengünstigste BI-Tool. Mit der richtigen Vorbereitung im SQL-Backend entsteht ein Dashboard in Stunden, nicht Wochen.
|
IMPORT-MODUS (empfohlen für die meisten KMU): ✓ Daten werden in Power BI-Dataset gespeichert ✓ Sehr schnell — keine Datenbankabfrage beim Öffnen ✓ Automatische Aktualisierung (täglich / stündlich) ✗ Daten bis zu 24h veraltet ✗ 1 GB Dataset-Limit (Pro-Lizenz) → Für: Tages-/Wochen-Berichte, KPI-Dashboards
DIRECTQUERY-MODUS: ✓ Immer aktuelle Daten ✓ Kein Datenmengenlimit ✗ Langsam bei komplexen Abfragen ✗ Hohe Last auf ERP-Datenbank → Für: Operative Echtzeit-Übersichten (Lagerbestand, offene Aufträge) |
|
|
BESTE PRAXIS FÜR POWER BI & ERP Verbinden Sie Power BI nie direkt mit ERP-Rohtabellen. Erstellen Sie stattdessen SQL-Views oder gespeicherte Prozeduren — diese abstrahieren die ERP-Datenstruktur und schützen Ihre Berichte vor ERP-Updates, die Tabellennamen oder -strukturen ändern. |
|
-- Beispiel: Stabile View für Power BI Umsatz-Analyse CREATE OR ALTER VIEW dbo.vw_PBI_Umsatz AS SELECT CAST(vb.Belegdatum AS DATE) AS Datum, YEAR(vb.Belegdatum) AS Jahr, MONTH(vb.Belegdatum) AS Monat, DATENAME(MONTH, vb.Belegdatum) AS Monatsname, k.Name AS Kunde, k.Kundennummer, k.Region, k.Branche, a.Warengruppe, a.Produktgruppe, vp.ArtikelNr, a.Bezeichnung AS Artikel, vp.Menge, vp.Nettobetrag AS Umsatz_EUR, vp.EinstandsPreis * vp.Menge AS Kosten_EUR, vp.Nettobetrag - (vp.EinstandsPreis * vp.Menge) AS DB1_EUR FROM dbo.VerkaufsPositionen vp JOIN dbo.Verkaufsbelege vb ON vp.BelegNr = vb.BelegNr JOIN dbo.Kunden k ON vb.KundenNr = k.KundenNr JOIN dbo.Artikel a ON vp.ArtikelNr = a.ArtikelNr WHERE vb.Belegart = 'Rechnung' AND vb.Storniert = 0; |
|
EMPFOHLENE DASHBOARD-SEITEN:
SEITE 1 — EXECUTIVE SUMMARY KPI-Karten: Umsatz MTD, DB-Marge, DSO, Liefertreue Umsatz-Trend (12 Monate, Linie + Vorjahr) Top-5-Kunden nach Deckungsbeitrag
SEITE 2 — VERTRIEB Auftragseingang aktueller Monat vs. Plan Umsatz je Verkäufer / Region Pipeline und offene Angebote
SEITE 3 — LAGER & EINKAUF Lagerreichweite nach Warengruppe Kritische Artikel (< 7 Tage Reichweite) Liefertreue Lieferanten Top/Flop 10
SEITE 4 — FINANZEN DSO-Trend, überfällige Forderungen nach Alter Skontopotenzial Liquiditätsvorschau 30/60/90 Tage |
09
Ein KPI-System ohne Frühwarnfunktion ist ein Rückspiegel — es zeigt, was war, nicht was kommt. Automatische Alerts wandeln das reaktive Controlling in ein proaktives um.
|
3-STUFEN-ALERT-SYSTEM:
STUFE 1 — INFORMATION (Grün → Gelb) Abweichung: 10-20 % vom Zielwert Empfänger: Abteilungsleiter Kanal: E-Mail / Teams-Nachricht Reaktion: Beobachten, Ursache prüfen
STUFE 2 — WARNUNG (Gelb → Orange) Abweichung: 20-30 % vom Zielwert Empfänger: Bereichsleiter + Abteilungsleiter Kanal: E-Mail mit Detailbericht Reaktion: Maßnahmenplan innerhalb 48h
STUFE 3 — ALARM (Orange → Rot) Abweichung: > 30 % vom Zielwert Empfänger: Geschäftsführung + alle Führungsebenen Kanal: E-Mail + SMS / Teams-Direktnachricht Reaktion: Sofortmaßnahmen, Eskalation |
|
-- SQL Agent Job: Täglicher KPI-Alert-Check (täglich 07:00) DECLARE @AlertText NVARCHAR(MAX) = ''; DECLARE @AnzahlAlerts INT = 0;
-- Alle ausgelösten aber noch nicht gesendeten Alerts sammeln SELECT @AlertText = @AlertText + CHAR(13) + CHAR(10) + '⚠ ' + d.KPI_Name + ' [' + d.Bereich + ']' + CHAR(13) + CHAR(10) + ' Ist-Wert: ' + CAST(ROUND(a.Ist_Wert, 1) AS VARCHAR) + ' ' + d.Einheit + CHAR(13) + CHAR(10) + ' Ziel: ' + CAST(ROUND(a.Ziel_Wert, 1) AS VARCHAR) + ' ' + d.Einheit + CHAR(13) + CHAR(10) + ' Abweichung: ' + CAST(a.Abweichung_Pct AS VARCHAR) + ' %' + CHAR(13) + CHAR(10), @AnzahlAlerts = @AnzahlAlerts + 1 FROM dbo.KPI_Alerts a JOIN dbo.KPI_Definitionen d ON a.KPI_ID = d.KPI_ID WHERE a.Alert_Gesendet = 0 AND CAST(a.Alert_Datum AS DATE) = CAST(GETDATE() AS DATE);
-- Alert senden wenn vorhanden IF @AnzahlAlerts > 0 BEGIN EXEC msdb.dbo.sp_send_dbmail @profile_name = 'KPI-Alerts', @recipients = 'controlling@firma.de;geschaeftsfuehrung@firma.de', @subject = 'KPI-Frühwarnung: ' + CAST(@AnzahlAlerts AS VARCHAR) + ' Kennzahl(en) unter Zielwert — ' + CONVERT(VARCHAR, GETDATE(), 104), @body = 'Folgende KPIs haben heute Alarmgrenzen unterschritten:' + CHAR(13) + CHAR(10) + @AlertText + CHAR(13) + CHAR(10) + 'Details im KPI-Dashboard: https://powerbi.firma.de';
-- Als gesendet markieren UPDATE dbo.KPI_Alerts SET Alert_Gesendet = 1 WHERE Alert_Gesendet = 0 AND CAST(Alert_Datum AS DATE) = CAST(GETDATE() AS DATE); END; |
|
Bereich |
KPI |
Alert-Grenze |
Empfänger |
|
Einkauf |
Liefertreue Lieferant |
< 90 % |
Einkaufsleiter |
|
Lager |
Lagerreichweite kritischer Artikel |
< 7 Tage |
Disponent + Einkauf |
|
Vertrieb |
Liefertreue an Kunden |
< 90 % |
Vertriebsleiter |
|
Finanzen |
DSO |
> Zahlungsziel + 20 Tage |
Buchhaltung + GF |
|
Finanzen |
Überfällige Forderungen |
> 15 % der Gesamtforderungen |
GF + Buchhaltung |
|
Allgemein |
Backup fehlt |
> 26 Stunden |
IT-Leiter |
10
Dieser Plan führt Sie von der leeren Datenbank zum ersten produktiven Management-Dashboard — ohne externe Berater, ohne monatelange Projekte.
|
|
VOR DEM START KPI-Steckbriefe für mindestens 10 KPIs mit Fachbereich abstimmen und unterschreiben lassen. Datenbankzugriff auf ERP (Read-only) für den KPI-Job-User einrichten. Power BI Desktop installiert und Zugang zu Power BI Service (Pro-Lizenz) sichergestellt. |
■ TAG 1-2: KPI-AUSWAHL MIT FACHBEREICHEN
■ Workshop: Je Bereich 5 KPIs auswählen und Steckbrief ausfüllen
■ Zielwerte und Alarmgrenzen von Fachbereich bestätigen lassen
■ Datenquellen je KPI identifizieren: Welche Tabellen, welche Felder?
■ Datenqualität prüfen: Sind die benötigten Felder befüllt?
■ Owner je KPI festlegen: Wer ist verantwortlich?
■ TAG 3-5: KPI-DATENBANK AUFBAUEN
■ Datenbank "KPI_DWH" anlegen (oder Schema in bestehender DB)
■ Tabellen anlegen: KPI_Definitionen, KPI_Tagesdaten, KPI_Alerts (Skripte Kapitel 7)
■ KPI-Definitionen für die ersten 10 KPIs eintragen
■ Read-only-User für ERP-Datenbank einrichten
■ Ersten Berechnungs-Job manuell testen — Ergebnisse validieren
■ TAG 6-10: SQL-VIEWS FÜR POWER BI
■ Views für alle 10 KPIs anlegen (Vorlage aus Kapitel 8.2)
■ Jede View mit Fachbereich auf Korrektheit prüfen
■ Performance testen: Abfragezeit < 10 Sekunden anstreben
■ Bei langen Laufzeiten: Indizes prüfen, ggf. Staging-Tabelle
■ TAG 11-14: BERECHNUNGSJOBS EINRICHTEN
■ Automatischen Berechnungsjob für alle 10 KPIs einrichten (Kapitel 7.3)
■ Fehlerbehandlung und Logging einbauen
■ Job 3 Tage täglich laufen lassen — Ergebnisse täglich validieren
■ KPI_Alerts-Tabelle prüfen: Werden Alarme korrekt ausgelöst?
■ TAG 15-17: POWER BI VERBINDUNG
■ Power BI Desktop: Verbindung zu KPI_DWH herstellen
■ Import-Modus für historische Daten, DirectQuery für Echtzeit-KPIs
■ Datenmodell erstellen: KPI_Tagesdaten mit KPI_Definitionen verknüpfen
■ Datumstabelle anlegen (Kalender-Dimension für Time Intelligence)
■ TAG 18-21: DASHBOARD AUFBAUEN
■ Executive Summary Seite: 4-6 KPI-Karten + 1 Trendiagramm
■ Farbcodierung: Grün/Gelb/Rot basierend auf Zielwerten (Conditional Formatting)
■ Vertriebsseite: Umsatz-Trend, Top-Kunden
■ Einkauf/Lager-Seite: Liefertreue, kritische Reichweiten
■ Finanzseite: DSO, überfällige Posten, Skontopotenzial
■ TAG 22-25: ALERT-SYSTEM AKTIVIEREN
■ Alert-Job einrichten und mit echten Empfängern testen
■ Mail-Templates professionell gestalten — Link zum Dashboard
■ Alert-Empfänger mit Fachbereich abstimmen
■ Eskalationsregeln konfigurieren
■ TAG 26-28: FREIGABE UND SCHULUNG
■ Dashboard mit Fachbereich reviewen — Zahlen validieren
■ Kurzschulung: Wie liest man das Dashboard? Was bedeuten die Farben?
■ Automatische Aktualisierung einrichten (täglich 07:00 — nach Berechnungsjob)
■ Dashboard in Power BI Service veröffentlichen — Link an Nutzer
■ TAG 29-30: ABSCHLUSS UND ROADMAP
■ Dokumentation: KPI-Definitionen, Job-Beschreibungen, Dashboard-Anleitung
■ Feedback einholen: Was fehlt? Was ist unklar?
■ Roadmap Phase 2: Weitere 10-20 KPIs, weitere Dashboard-Seiten
■ Review-Termin in 4 Wochen fest einplanen ■
|
|
ERGEBNIS NACH 30 TAGEN Nach 30 Tagen haben Sie ein automatisiertes KPI-System mit 10+ täglich berechneten Kennzahlen, ein Management-Dashboard in Power BI und ein Frühwarnsystem das Alarme automatisch sendet. Der manuelle Reporting-Aufwand sinkt von Stunden auf Minuten pro Woche. |
Die in diesem Dokument enthaltenen Informationen, KPI-Definitionen, Skripte und Konfigurationshinweise wurden nach bestem Wissen und Gewissen auf der Grundlage langjähriger praktischer Erfahrung erstellt. Dennoch kann keine Gewähr für die Vollständigkeit, Richtigkeit oder Aktualität übernommen werden.
Der Autor übernimmt ausdrücklich keinerlei Haftung für Fehlentscheidungen auf Basis dieser Kennzahlen, Datenverlust, Systemausfälle oder sonstige Schäden. KPI-Definitionen und Berechnungen müssen zwingend mit Controlling und Buchhaltung fachlich abgestimmt und validiert werden.
Die Hinweise zu Finanzkennzahlen (DSO, DPO, Liquiditätskennzahlen) ersetzen keine steuerliche oder rechtliche Beratung. Für Abschlussrelevanz ist ein Steuerberater oder Wirtschaftsprüfer hinzuzuziehen.
SQL-Abfragen sind Vorlagen — Tabellen- und Feldbezeichnungen weichen je nach ERP-System, Version und Customizing ab. Alle Abfragen vor dem produktiven Einsatz validieren.
Dieses Dokument und alle Inhalte sind urheberrechtlich geschützt. © 2026 Sascha Hess, xenosystems.de. Alle Rechte vorbehalten.
Microsoft, Power BI, SQL Server, Dynamics Business Central sind eingetragene Marken der Microsoft Corporation. Alle anderen Produktnamen sind Eigentum ihrer jeweiligen Inhaber.
Es gilt ausschließlich deutsches
Recht. Gerichtsstand ist, soweit gesetzlich zulässig, Weimar, Thüringen,
Deutschland.
Sascha Hess ist Diplom-Biologe und IT-Professional mit über 20 Jahren Erfahrung in der Administration von ERP-, BI- und Datenbanksystemen. Er hat KPI-Systeme und Power BI Dashboards für mittelständische Unternehmen, Logistiker und die Bauhaus-Universität Weimar aufgebaut — von der ersten SQL-Abfrage bis zum produktiven Management-Reporting.
Sein Ansatz verbindet naturwissenschaftliche Präzision mit pragmatischer IT-Erfahrung. Schwerpunkte: Business Intelligence (Power BI, DeltaMaster, SSAS), ERP-Controlling, SQL Server Performance-Tuning und IT-Interim-Management.
Web: www.xenosystems.de | E-Mail: info@xenosystems.de | Standort: Weimar, Thüringen / Remote
|
Service |
Beschreibung |
|
BI-Dashboard-Aufbau |
Power BI / DeltaMaster Dashboards inkl. ETL-Strecken, KPI-System und Data-Warehouse-Aufbau — für KMU ab 1 Woche Projektumfang. |
|
ERP-Prozessautomatisierung |
Analyse, Konzeption und Umsetzung von Workflow- und Schnittstellenautomatisierungen — von Quick Wins bis zur vollständigen Roadmap. |
|
SQL Server DB Health Check |
Professioneller Audit Ihres SQL Servers — Managementreport, Risikobewertung und Maßnahmenplan. Scope: 3-5 Tage. |
|
ERP-Einführungsberatung |
Begleitung von ERP-Projekten (MACH, Dynamics NAV/BC, APplus) — Anforderungsanalyse, Datenmigration, Go-Live-Support. |
|
Interim IT-Management |
Übernahme der IT-Steuerung auf Zeit — Budgetplanung, Dienstleister-Management, strategische IT-Ausrichtung. |
Vollständiges Dokument
Strategische Wissens-Roadmap · Checklisten · Praxisbeispiele
49,90 €
Sichere Zahlung über PayPal · Sofort-Download nach Zahlungseingang