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.

Tags:

No responses yet

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert