Mit OData für CRM 2016 Online Power-BI-Abfragen beschleunigen
Vor Kurzem wurden wir beauftragt, den Power BI Bericht für Microsoft Dynamics CRM 2016 eines Kunden zu migrieren. Obwohl der alte OrganizationData.svc noch als Datenquelle verwendet werden kann, entschieden wir uns, den neuen OData v4 Service von CRM 2016 Online zu nutzen.
Wir stellten uns außerdem die Frage, wie wir die Geschwindigkeit der Aktualisierung des Datenmodells weiter optimieren können. Im Laufe der Zeit wird die Datenquelle immer größer und es dauert dementsprechend länger, einen Bericht zu aktualisieren. Ein Update, das einst wenige Minuten in Anspruch nahm, kann ein paar Monate später einige Stunden dauern.
Leider geht Power BI beim Erstellen von Abfragen mit der grafischen Benutzeroberfläche des Abfrage-Editors nicht sehr geschickt vor. Verbinden Sie das Programm stattdessen mit CRM Online und wählen Sie eine Entität aus:
Daraufhin erscheint eine Benachrichtigung, die Sie darauf hinweist, dass Sie bei Reduzierung der Spaltenzahl schneller Ergebnisse erhalten:
Nachdem Sie die Spalten ausgewählt haben, die Sie für Ihren Bericht benötigen, wird eine Tabelle erstellt, die nur diese Spalten enthält. Wenn Sie aber die tatsächliche Abfrage im Erweiterten Editor ansehen, wird Ihnen auffallen, dass Sie immer mit einer Tabelle starten, die jede Spalte enthält. Im nächsten Schritt entfernen Sie also alle Spalten, die Sie nicht ausgewählt haben.
let
Source =
OData.Feed("https://<tenant>.api.crm.dynamics.com/XRMServices/2011/OrganizationData.svc/Entity")
#"Removed Other Columns" = Table.SelectColumns(Source,{"Column"})
in
#"Removed Other Columns"
Dankenswerterweise ist es möglich, mit dem Erweiterten Editor einen Filter für Ihre OData-Quellenabfrage zu nutzen. Passen Sie Ihre Abfrage wie folgt an:
let
Source =
OData.Feed("https://<tenant>.api.crm.dynamics.com/XRMServices/2011/OrganizationData.svc/Entity?$select=Column")
in
Source
Beide Abfragen generieren das gleiche Ergebnis. Allerdings ist die zweite potentiell viel schneller als die erste.
Die erste OData-Abfrage zu filtern funktioniert, wenn Sie den neuen OData-Service für CRM 2016 Online benutzen, leider nicht wie geplant:
let
Source =
OData.Feed("https://<tenant>.api.crm.dynamics.com/api/data/v8.0/Entity?$select=Column")
in
Source
Diese Abfrage ergibt eine Tabelle, welche die Daten aus jeder ausgewählten Spalte enthält, und zusätzlich jede weitere vorhandene Spalte, die keine Daten enthält. Das Power-BI-Team hat uns auf Nachfrage bestätigt, dass es sich hier um einen Bug in der Power BI v. 2.31.4280.661 handelt.
Da die ausgegebenen Spalten jedoch keine Daten enthalten, geht es immer noch schneller, die Quellenabfrage zu modifizieren und anschließend nach den benötigten Spalten zu filtern.
Bis dieser Bug behoben wurde rät das Power-BI-Team, die folgende Syntax zu verwenden, um Abfragen zu starten:
let
Source =
OData.Feed("https://<tenant>.api.crm.dynamics.com/api/data/v8.0/ Entity?$select=Column"),
#"Removed Other Columns" = Table.SelectColumns(Source,{"Column"})
in
#"Removed Other Columns"