Access und Power BI â geht das zusammen?
Jein.
Access hat keine native Power BI-Integration.
Aber: Du kannst Power BI-Visualisierungen als Webobjekt einbetten.
Und ĂŒber VBA per JavaScript-Bridge indirekt ansprechen.
Das klingt wild â ist aber machbar.
Variante 1: Power BI-Bericht in WebBrowser-Control einbetten
Im Formular platzierst Du ein WebBrowser
-Steuerelement.
Dort lÀdst Du Deinen Power BI Embedded Link (oder Public Link).
Beispiel: Ăffentliche Power BI-URL laden
Private Sub Form_Load()
Dim url As String
url = "https://app.powerbi.com/view?r=123456789" ' Dein Bericht
Me.WebBrowser0.Object.Navigate url
End Sub
Wenn Du die Power BI-Seite als Embed freigegeben hast, funktioniert das.
Achte auf die Breite des WebControls â Power BI ist nicht klein.
Variante 2: Interaktion per PostMessage und eingebettetem JavaScript
Wenn Du einen Power BI Embedded-Report verwendest (z.âŻB. Pro oder Premium),
kannst Du JavaScript verwenden, um mit dem Bericht zu sprechen.
Und genau da kannst Du mit VBA andocken.
So gehtâs: HTML-Seite lokal als Container bauen
Erstelle eine HTML-Datei mit einem eingebetteten Power BI-Report
und Message-Handler fĂŒr window.external
.
Beispiel: powerbi-wrapper.html
<!DOCTYPE html>
<html>
<head>
<title>Power BI Embed</title>
<script src="https://cdn.powerbi.com/libs/powerbi-client/2.19.0/powerbi.min.js"></script>
</head>
<body>
<div id="reportContainer" style="height:100%;width:100%"></div>
<script>
var models = window['powerbi-client'].models;
var embedConfiguration = {
type: 'report',
id: 'DEIN_REPORT_ID',
embedUrl: 'https://app.powerbi.com/reportEmbed?reportId=DEIN_REPORT_ID&groupId=DEINE_GRUPPE',
accessToken: 'DEIN_TOKEN',
tokenType: models.TokenType.Embed,
settings: { filterPaneEnabled: false }
};
var report = powerbi.embed(document.getElementById('reportContainer'), embedConfiguration);
window.external.postMessage = function(msg) {
if (msg === 'refresh') {
report.refresh();
}
};
</script>
</body>
</html>
Jetzt: Die HTML-Seite im Access-WebBrowser laden
Private Sub Form_Load()
Dim pfad As String
pfad = CurrentProject.Path & "\powerbi-wrapper.html"
Me.WebBrowser0.Object.Navigate "file:///" & pfad
End Sub
Dann: Aus VBA JavaScript-Funktion aufrufen
Hier wirdâs interessant: Du kannst ĂŒber das COM-Interface mit der Seite reden.
Das geht allerdings nur mit dem alten Internet Explorer (ActiveX-Engine).
Aber: Funktioniert.
Beispiel: Refresh-Funktion auslösen
Sub BerichtAktualisieren()
Me.WebBrowser0.Object.Document.parentWindow.execScript "window.external.postMessage('refresh')"
End Sub
Damit sprichst Du die Funktion in der HTML-Datei an.
Power BI wird dann neu geladen.
Variante 3: Benutzerfilter aus Access ĂŒbergeben
Du kannst auch Filter ĂŒbergeben, z.âŻB. KundeID.
In der HTML-Datei musst Du dafĂŒr JavaScript erweitern:
window.external.postMessage = function(msg) {
if (msg.startsWith("filter=")) {
var kundenID = msg.split("=")[1];
var filter = {
$schema: "http://powerbi.com/product/schema#basic",
target: {
table: "Kunden",
column: "KundeID"
},
operator: "In",
values: [parseInt(kundenID)]
};
report.setFilters([filter]);
}
};
VBA-Code zum Filtern
Sub BerichtFilternNachKunde(kundeID As Long)
Me.WebBrowser0.Object.Document.parentWindow.execScript "window.external.postMessage('filter=" & kundeID & "')"
End Sub
Mein Setup fĂŒr den Alltag
- Power BI Embedded oder freigegebene Public Links
- HTML-Wrapper mit Filter- und Refresh-Funktionen
- Zugriff per WebBrowser-Steuerelement
- Steuerung per VBA, abhÀngig vom Benutzerkontext
Mein Fazit
Access kann kein Power BI â aber wir bringenâs ihm bei.
Mit HTML, WebControl und ein bisschen JavaScript klappt das sauber.
Nicht schön, aber funktioniert. Norddeutsch eben.
No responses yet