Power BI Integration: Daten automatisch aktualisieren mit n8n und Make.com
So integrieren Sie Power BI in Ihre Automatisierungs-Workflows.
Power BI ist Microsofts Business Intelligence Lösung – mächtig, aber oft isoliert von anderen Systemen. In diesem Guide zeigen wir, wie Sie Power BI mit Automatisierung verbinden: Daten automatisch aktualisieren, Reports verteilen und Alerts bei KPI-Änderungen senden.
Warum Power BI automatisieren?
Typische Probleme:| Problem | Manueller Aufwand | Automatisierte Lösung |
|---|---|---|
| Daten-Refresh | Täglich manuell | Automatisch bei Änderung |
| Report-Verteilung | E-Mail-Export | Automatischer Versand |
| KPI-Überwachung | Dashboard checken | Proaktive Alerts |
| Datenquellen-Sync | ETL-Jobs pflegen | Event-basierte Updates |
Power BI REST API Grundlagen
Die Power BI Automatisierung basiert auf der REST API. Falls Sie noch keine Erfahrung mit API-Anbindungen haben, empfehlen wir unseren Einsteiger-Guide zur API Integration.
API-Zugang einrichten
- Azure Portal → App registrations → New registration
- Name: "Power BI Automation"
- Redirect URI: https://n8n.ihre-domain.de/oauth2/callback
- API permissions → Add permission → Power BI Service
- Delegated: Dataset.ReadWrite.All, Report.Read.All
- Certificates & secrets → New client secret
- Secret kopieren und sicher speichern
Authentifizierung
// OAuth2 Token abrufen
const tokenResponse = await fetch('https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
client_id: 'YOUR_CLIENT_ID',
client_secret: 'YOUR_CLIENT_SECRET',
scope: 'https://analysis.windows.net/powerbi/api/.default',
grant_type: 'client_credentials'
})
});
const { access_token } = await tokenResponse.json();
Workflow 1: Automatischer Dataset Refresh
Das Ziel
Datasets automatisch aktualisieren, wenn sich Quelldaten ändern.
Trigger-Optionen
Option A: Zeitgesteuert
Schedule (täglich 6:00)
↓
Power BI: Dataset Refresh
Option B: Event-basiert
Datenbank (neue Daten)
↓
Power BI: Dataset Refresh
Option C: Webhook
Externes System (Webhook)
↓
Power BI: Dataset Refresh
n8n Implementation
Node 1: Trigger (Schedule oder Webhook) Node 2: Power BI Refresh starten// Node: HTTP Request
{
"method": "POST",
"url": "https://api.powerbi.com/v1.0/myorg/groups/{{ $env.WORKSPACE_ID }}/datasets/{{ $env.DATASET_ID }}/refreshes",
"headers": {
"Authorization": "Bearer {{ $json.access_token }}",
"Content-Type": "application/json"
},
"body": {
"notifyOption": "MailOnFailure"
}
}
Node 3: Refresh-Status prüfen
// Power BI Refresh ist async - Status abfragen
// Node: HTTP Request
{
"method": "GET",
"url": "https://api.powerbi.com/v1.0/myorg/groups/{{ $env.WORKSPACE_ID }}/datasets/{{ $env.DATASET_ID }}/refreshes?$top=1",
"headers": {
"Authorization": "Bearer {{ $json.access_token }}"
}
}
Node 4: Auf Abschluss warten
// Node: Wait + Loop
const refreshStatus = $json.value[0].status;
if (refreshStatus === 'Completed') {
return { success: true };
} else if (refreshStatus === 'Failed') {
throw new Error('Refresh failed: ' + $json.value[0].serviceExceptionJson);
} else {
// Noch in Progress - erneut prüfen
await wait(30000); // 30 Sekunden
// ... Loop
}
Workflow 2: Report per E-Mail versenden
Das Ziel
Reports automatisch als PDF exportieren und per E-Mail versenden.
Der Workflow
Schedule (Montag 8:00)
↓
Power BI: Report exportieren (PDF)
↓
Warten auf Export
↓
PDF herunterladen
↓
E-Mail mit Anhang senden
n8n Implementation
Schritt 1: Export starten// Node: HTTP Request
{
"method": "POST",
"url": "https://api.powerbi.com/v1.0/myorg/groups/{{ $env.WORKSPACE_ID }}/reports/{{ $env.REPORT_ID }}/ExportTo",
"headers": {
"Authorization": "Bearer {{ $json.access_token }}",
"Content-Type": "application/json"
},
"body": {
"format": "PDF",
"powerBIReportConfiguration": {
"pages": [
{ "pageName": "ReportSection1" }
]
}
}
}
Schritt 2: Export-Status prüfen
// Node: HTTP Request (Loop bis fertig)
{
"method": "GET",
"url": "https://api.powerbi.com/v1.0/myorg/groups/{{ $env.WORKSPACE_ID }}/reports/{{ $env.REPORT_ID }}/exports/{{ $json.id }}",
"headers": {
"Authorization": "Bearer {{ $json.access_token }}"
}
}
Schritt 3: PDF herunterladen
// Node: HTTP Request (Binary)
{
"method": "GET",
"url": "https://api.powerbi.com/v1.0/myorg/groups/{{ $env.WORKSPACE_ID }}/reports/{{ $env.REPORT_ID }}/exports/{{ $json.id }}/file",
"headers": {
"Authorization": "Bearer {{ $json.access_token }}"
},
"responseFormat": "file"
}
Schritt 4: E-Mail senden
// Node: Send Email
{
"to": "management@firma.de",
"subject": "Wöchentlicher Sales Report - KW {{ $now.weekNumber }}",
"body": "Anbei der aktuelle Sales Report.",
"attachments": [
{
"filename": "Sales-Report-KW{{ $now.weekNumber }}.pdf",
"data": "{{ $binary.data }}"
}
]
}
Workflow 3: KPI-Alerts
Das Ziel
Benachrichtigung wenn KPIs bestimmte Schwellenwerte über-/unterschreiten.
Der Workflow
Schedule (stündlich)
↓
Power BI: DAX Query ausführen
↓
KPI-Werte prüfen
↓
Schwellenwert überschritten?
↓
Ja: Alert senden (Slack/Email)
DAX Query ausführen
// Node: HTTP Request
{
"method": "POST",
"url": "https://api.powerbi.com/v1.0/myorg/groups/{{ $env.WORKSPACE_ID }}/datasets/{{ $env.DATASET_ID }}/executeQueries",
"headers": {
"Authorization": "Bearer {{ $json.access_token }}",
"Content-Type": "application/json"
},
"body": {
"queries": [
{
"query": "EVALUATE SUMMARIZECOLUMNS('Date'[Month], 'Sales'[Total Revenue], 'Sales'[Order Count])"
}
],
"serializerSettings": {
"includeNulls": true
}
}
}
Alert-Logik
// Node: Code
const results = $json.results[0].tables[0].rows;
const currentMonth = results[results.length - 1];
const alerts = [];
// Umsatz-Check
if (currentMonth['Sales[Total Revenue]'] < 100000) {
alerts.push({
type: 'warning',
kpi: 'Umsatz',
value: currentMonth['Sales[Total Revenue]'],
threshold: 100000,
message: 'Umsatz unter Ziel!'
});
}
// Order-Count-Check
if (currentMonth['Sales[Order Count]'] < 500) {
alerts.push({
type: 'critical',
kpi: 'Bestellungen',
value: currentMonth['Sales[Order Count]'],
threshold: 500,
message: 'Bestellungen kritisch niedrig!'
});
}
return { alerts, hasAlerts: alerts.length > 0 };
Slack Alert
// Node: Slack (wenn hasAlerts = true)
{
"channel": "#kpi-alerts",
"attachments": [
{
"color": "{{ $json.alerts[0].type === 'critical' ? 'danger' : 'warning' }}",
"title": "⚠️ KPI Alert",
"fields": $json.alerts.map(a => ({
"title": a.kpi,
"value": ${a.value} (Ziel: ${a.threshold}),
"short": true
}))
}
]
}
Workflow 4: Daten nach Power BI pushen
Push-Datasets erstellen
Power BI unterstützt Push-Datasets für Echtzeit-Daten:
// Dataset erstellen
{
"method": "POST",
"url": "https://api.powerbi.com/v1.0/myorg/groups/{{ $env.WORKSPACE_ID }}/datasets",
"body": {
"name": "Real-Time Sales",
"defaultMode": "Push",
"tables": [
{
"name": "Sales",
"columns": [
{ "name": "Timestamp", "dataType": "DateTime" },
{ "name": "Product", "dataType": "String" },
{ "name": "Amount", "dataType": "Double" },
{ "name": "Quantity", "dataType": "Int64" }
]
}
]
}
}
Daten pushen
// Bei neuer Bestellung: Daten an Power BI senden
{
"method": "POST",
"url": "https://api.powerbi.com/v1.0/myorg/groups/{{ $env.WORKSPACE_ID }}/datasets/{{ $env.PUSH_DATASET_ID }}/tables/Sales/rows",
"body": {
"rows": [
{
"Timestamp": "{{ $now.toISO() }}",
"Product": "{{ $json.product_name }}",
"Amount": {{ $json.total }},
"Quantity": {{ $json.quantity }}
}
]
}
}
Make.com Szenario
Module für Power BI
Make.com hat native Power BI Module:
Beispiel-Szenario
Schedule (täglich 6:00)
↓
Power BI: Refresh Dataset
↓
Wait: 10 Minuten
↓
Power BI: Export Report to PDF
↓
Wait: 5 Minuten
↓
Power BI: Get Export Status
↓
Gmail: Send with Attachment
Integration mit anderen Datenquellen
Power BI lässt sich mit zahlreichen Systemen verbinden -- weitere Inspirationen finden Sie in unseren Workflow Automatisierung Beispielen.
SQL Server → Power BI
SQL Server (neue Daten)
↓
Trigger: Neue Zeilen
↓
Power BI: Dataset Refresh
Google Analytics → Power BI
Schedule (täglich)
↓
Google Analytics: Report abrufen
↓
Daten transformieren
↓
Power BI: Push Dataset
Shopify → Power BI (Echtzeit)
Shopify Webhook (neue Bestellung)
↓
Daten formatieren
↓
Power BI: Push to Real-Time Dataset
Best Practices
1. Refresh-Limits beachten
| Power BI Plan | Refreshes/Tag |
|---|---|
| Pro | 8 |
| Premium | 48 |
| Premium per User | 48 |
2. Fehlerbehandlung
// Refresh-Fehler abfangen
try {
await refreshDataset();
} catch (error) {
if (error.status === 429) {
// Rate Limit - später erneut versuchen
await wait(3600000); // 1 Stunde
} else if (error.status === 401) {
// Token abgelaufen - neu authentifizieren
await refreshToken();
} else {
await sendAlert(error);
}
}
3. Incremental Refresh nutzen
Statt kompletter Refresh nur neue Daten laden:
Power BI Desktop:
- Incremental Refresh aktivieren
- RangeStart/RangeEnd Parameter definieren
- Nur Delta-Daten werden geladen
4. Gateway-Status überwachen
// Gateway-Status prüfen
const gateways = await fetch(
'https://api.powerbi.com/v1.0/myorg/gateways',
{ headers: { 'Authorization': Bearer ${token} } }
);
for (const gateway of gateways.value) {
if (gateway.publicKey === null) {
await sendAlert(Gateway ${gateway.name} ist offline!);
}
}
Kosten
| Komponente | Kosten |
|---|---|
| Power BI Pro | 9,40€/User/Monat |
| Power BI Premium | Ab 4.675€/Monat |
| n8n Cloud | Ab 20€/Monat |
| Make.com | Ab 9€/Monat |
Fazit
Power BI Automatisierung ermöglicht:
- Echtzeit-Datenaktualisierung
- Automatische Report-Verteilung
- Proaktive KPI-Überwachung
- Integration mit anderen Systemen
Nächste Schritte
Wir unterstützen Sie bei der Power BI Automatisierung -- von der Einrichtung bis zum produktiven Einsatz. Vereinbaren Sie eine kostenlose Beratung und starten Sie mit automatisiertem Reporting.