Datenindizierung in Vertipaq: Zeilenspeicher versus Spaltenspeicher

In diesem Tutorial werden wir den Unterschied zwischen der Datenindizierung in einer relationalen Datenbank und in Vertipaq behandeln.

Relationale Datenbanken speichern die Daten zeilenweise. Vertipaq hingegen erledigt dies Spalte für Spalte.

Sehen wir uns an, wie sich diese beiden Arten der Datenspeicherung und -indizierung auf Ihren Berichtsentwicklungsprozess auswirken können, insbesondere bei der Ausführung Ihrer Abfragen.

Inhaltsverzeichnis

Datenindizierung pro Zeile

Das zeilenweise Speichern der Daten ist die herkömmliche Art der Datenspeicherung. Dieser Vorgang nimmt jedoch mehr Zeit in Anspruch, was sich auf die Leistung Ihrer Abfrage auswirkt.

Nehmen wir an, wir haben eine Tabelle, die Marke, Farbe, Geschlecht, Menge und Nettopreis enthält.

Datenindizierung in Vertipaq: Zeilenspeicher versus Spaltenspeicher

Wenn wir alles in dieser Tabelle in einer Datenbank speichern, werden die Daten Zeile für Zeile gespeichert. Aus diesem Grund wird die traditionelle Datenspeicherstruktur auch als Zeilenspeicher bezeichnet.

Zunächst werden in derselben Zeile die Spaltenüberschriften der ersten Zeile gespeichert – Marke, Farbe, Geschlecht, Menge und Nettopreis. Dann geht es weiter zur nächsten Zeile, um die ersten Elemente unter jeder Spalte zu speichern – A. Datum, Azure, ein Leerzeichen, 1 und 103,2. Dies geht Reihe für Reihe weiter.

Datenindizierung in Vertipaq: Zeilenspeicher versus Spaltenspeicher

Wie berechnen wir also mit dieser Datenindizierungsmethode die

Zunächst beginnt es mit der ersten Zeile, die die Spaltenüberschriften enthält. Dann springt es in die nächste Zeile und überspringt die anderen Datenelemente, bis es die erste Größe erreicht, die es sieht, nämlich 1. Dann springt es von Zeile zu Zeile, durchläuft alle Daten, die jede Zeile enthält, und sammelt alle Mengen sind Funde.

Sobald alle Mengen aus jeder Zeile beiseite gelegt wurden, ist die Berechnung erst dann abgeschlossen.

Sie können sich wahrscheinlich vorstellen, wie langwierig der Prozess ist, wenn Sie einen LuckyTemplates-Bericht vorbereiten, der eine DirectQuery-Verbindung zu einer SQL-Datenquelle verwendet. In diesem Fall konvertieren Analysis Services den DAX-Code in die SQL-Sprache und beginnen dann damit, die Datenstruktur Zeile für Zeile durchzugehen.

Datenindizierung pro Spalte

Um den damit verbundenen langwierigen Prozess zu vermeiden, haben Sie die Möglichkeit, die Daten spaltenweise über Vertipaq zu speichern, wenn Sie den Importmodus wählen.

Wenn Sie den Spaltenspeicher anstelle des Zeilenspeichers verwenden, werden Marke, Farbe, Geschlecht, Menge und Nettopreis jeweils in unterschiedlichen Datenstrukturen gespeichert.

Datenindizierung in Vertipaq: Zeilenspeicher versus Spaltenspeicher

Nehmen wir an, wir möchten die SUMME der Werte in der Spalte „Menge“ erhalten. Es besteht keine Notwendigkeit, Marke, Farbe und andere Daten außerhalb der Spalte „Menge“ weiterzugeben. In einem einzigen Scan wird die gesamte Mengenspalte von oben nach unten gelesen und alle Werte summiert.

Datenindizierung in Vertipaq: Zeilenspeicher versus Spaltenspeicher

Dadurch werden die Abfragen schneller ausgeführt als von links nach rechts.

Vergleich der Ausführungszeit in einfachen Abfragen

Um den großen Unterschied zwischen Zeilenspeicher und Spaltenspeicher wirklich zu erkennen, führen wir einige Testabfragen sowohl in SQL als auch in Vertipaq durch. Die Ausführungszeit sollte uns sagen, wie schnell ein Prozess im Vergleich zum anderen ist.

Beginnen wir mit einer einfachen Abfrage in SQL. Wir werden die SUMME der Spalte „Menge“ in der Tabelle „Verkäufe“ berechnen.

Datenindizierung in Vertipaq: Zeilenspeicher versus Spaltenspeicher

Wie Sie sehen, beträgt die Gesamtausführungszeit 2,2 Sekunden.

Gehen wir nun zu DAX Studio und verwenden Sie die EVALUATE- Funktion, um dieselbe Abfrage auszuführen. Wir müssen die Server-Timings einschalten und warten, bis die Ablaufverfolgung abgeschlossen ist.

Datenindizierung in Vertipaq: Zeilenspeicher versus Spaltenspeicher

Wir müssen außerdem sicherstellen, dass die Option „Cache leeren und dann ausführen“ ausgewählt ist, wenn wir die Abfrage ausführen.

Datenindizierung in Vertipaq: Zeilenspeicher versus Spaltenspeicher

Sobald die Abfrage ausgeführt ist, werden Sie feststellen, dass es nur 3 Millisekunden dauert, um dieselbe Abfrage abzuschließen, die wir zuvor in SQL durchgeführt haben.

Datenindizierung in Vertipaq: Zeilenspeicher versus Spaltenspeicher

Die Ergebnismenge sollte auch für SQL und DAX Studio übereinstimmen. Wenn wir sie nebeneinander platzieren, können Sie sehen, dass wir denselben Wert zurückgeben.

Datenindizierung in Vertipaq: Zeilenspeicher versus Spaltenspeicher

Sie können versuchen, die Abfrage noch einige Male auszuführen, um zu sehen, wie konsistent die Ausführungszeit ist.

Vergleich der Ausführungszeit bei komplizierteren Abfragen

Vergleichen wir dieses Mal die Ausführungszeit, wenn wir kompliziertere Abfragen ausführen.

Nehmen wir an, wir möchten die SUMME der Verkaufsmengen für jede Marke ermitteln . Dazu können wir über den der jeweiligen Produktmarke verwenden. Im niedrigen Kontext erstellen wir außerdem eine neue Tabelle mit dem Namen „Gesamtmenge“, in der wir die SUMME der Verkaufsmenge

Datenindizierung in Vertipaq: Zeilenspeicher versus Spaltenspeicher

Wenn wir diesen Code ausführen, können Sie sehen, dass die Gesamtausführungszeit 7 Millisekunden beträgt.

Datenindizierung in Vertipaq: Zeilenspeicher versus Spaltenspeicher

Im Hintergrund führt dieser Code tatsächlich zwei Abfragen aus. Der erste nimmt die Spalte „Marke“ aus der Tabelle „Produkte“ und führt dann einen OUTER JOIN für die Produktschlüsselspalten sowohl der Spalte „Verkäufe“ als auch der Spalte „Produkte“ aus.

Datenindizierung in Vertipaq: Zeilenspeicher versus Spaltenspeicher

Die zweite Abfrage ruft einfach die Spalte „Marke“ aus der Tabelle „Produkte“ ab.

Datenindizierung in Vertipaq: Zeilenspeicher versus Spaltenspeicher

Wenn ich zum Ergebnisbildschirm gehe, können Sie sehen, dass die Gesamtmenge nach Marke aufgeteilt wurde.

Datenindizierung in Vertipaq: Zeilenspeicher versus Spaltenspeicher

Gehen wir nun zum SQL-Server und schreiben dieselbe Abfrage.

Wir verschieben die DaxStudio Sales-Tabelle in die nächste Zeile und verweisen auf die Sales-Tabelle AS S. Anschließend führen wir auch einen LEFT JOIN in der DaxStudio Products-Tabelle aus, auf die AS P verwiesen wird, wobei der S.Product Key gleich ist P.Produktschlüssel. Wir werden P.Brand auch mit der SUMME der Menge und der Gesamtmenge in der SELECT- Anweisung verwenden . Schließlich werden wir für P.brand verwenden.

Datenindizierung in Vertipaq: Zeilenspeicher versus Spaltenspeicher

Sobald wir diesen Code ausführen, erhalten wir eine Tabelle, die die nach jeder Marke getrennte Gesamtmenge enthält. Dies ist dasselbe, was wir zuvor in Vertipaq erhalten haben.

Datenindizierung in Vertipaq: Zeilenspeicher versus Spaltenspeicher

Die Gesamtausführungszeit bleibt mit 2,5 Sekunden deutlich langsamer.

Datenindizierung in Vertipaq: Zeilenspeicher versus Spaltenspeicher


DAX für LuckyTemplates: Optimierung mithilfe von Formel-Engines in DAX Studio,
Techniken und Lektionen zur DAX-Abfrageoptimierung,
Abfrageleistung und DAX Studio-Setup

Abschluss

Es ist offensichtlich, wie schnell der Spaltenspeicher durch Vertipaq im Vergleich zum Zeilenspeicher in einer SQL-Datenbank wirklich ist. Dies zeigt, wie wichtig es ist, die Funktionsweise der Datenindizierung auf verschiedenen Plattformen wirklich kennenzulernen.

Es mag auf den ersten Blick wie ein kleines Opfer erscheinen, wenn Sie sich dennoch für die 2,5 Sekunden entscheiden, die der Zeilenspeicher für die Ausführung Ihrer Abfrage benötigt, im Vergleich zu 7 Millisekunden. Doch wenn wir unsere Berichte erstellen, führen wir alle mehrere Abfragen durch, und diese Ausführungszeiten summieren sich, was sich auf lange Sicht auf die Produktivität und das Benutzererlebnis auswirkt.

Leave a Comment

Streudiagramm-Visualisierungen mit Charticulator

Streudiagramm-Visualisierungen mit Charticulator

In diesem Tutorial erfahren Sie, wie Sie mit Charticulator eine Streudiagramm-Visualisierung für Ihren LuckyTemplates-Bericht erstellen und entwerfen.

PowerApps-Suchfeld: So fügen Sie es hinzu und passen es an

PowerApps-Suchfeld: So fügen Sie es hinzu und passen es an

Erfahren Sie, wie Sie ein PowerApps-Suchfeld von Grund auf erstellen und es an das Gesamtthema Ihrer App anpassen.

Power Automate String-Funktionen: Substring und IndexOf

Power Automate String-Funktionen: Substring und IndexOf

Erlernen Sie ganz einfach zwei komplizierte Power Automate String-Funktionen, die in Microsoft Flows verwendet werden können – die Funktionen substring und indexOf.

Power Query M: Abwechselndes 0-1-Muster in der Datumstabelle

Power Query M: Abwechselndes 0-1-Muster in der Datumstabelle

Dieses Tutorial konzentriert sich auf die Power Query M-Funktion „number.mod“, um ein abwechselndes 0-1-Muster in der Datumstabelle zu erstellen.

Prognosetechnik: Erkundung der Prognoselogik in LuckyTemplates-Modellen

Prognosetechnik: Erkundung der Prognoselogik in LuckyTemplates-Modellen

In diesem Tutorial führe ich eine Prognosetechnik durch, bei der ich meine tatsächlichen Ergebnisse mit meinen Prognosen vergleiche und sie kumulativ betrachte.

Speichern Sie E-Mail-Anhänge in SharePoint mit Power Automate

Speichern Sie E-Mail-Anhänge in SharePoint mit Power Automate

In diesem Blog erfahren Sie, wie Sie mit Power Automate E-Mail-Anhänge automatisch in SharePoint speichern und E-Mails anschließend löschen.

Führen Sie eine Bis-Loop-Steuerung in Power Automate durch

Führen Sie eine Bis-Loop-Steuerung in Power Automate durch

Erfahren Sie, wie die Do Until Schleifensteuerung in Power Automate funktioniert und welche Schritte zur Implementierung erforderlich sind.

Berechnen eines gleitenden Durchschnitts in LuckyTemplates mithilfe von DAX

Berechnen eines gleitenden Durchschnitts in LuckyTemplates mithilfe von DAX

In diesem Tutorial erfahren Sie, wie Sie mithilfe der ALLSELECTED-Funktion einen dynamischen gleitenden Durchschnitt in LuckyTemplates berechnen können.

Berechnen Sie dynamisch eine laufende oder kumulative LuckyTemplates-Summe

Berechnen Sie dynamisch eine laufende oder kumulative LuckyTemplates-Summe

Durch diesen Artikel erhalten wir ein klares und besseres Verständnis für die dynamische Berechnung einer laufenden oder kumulativen Gesamtsumme in LuckyTemplates.

Power Automate auf jede Aktion in Workflows anwenden

Power Automate auf jede Aktion in Workflows anwenden

Erfahren und verstehen Sie die Bedeutung und ordnungsgemäße Verwendung der Power Automate-Aktionssteuerung „Auf jede anwenden“ in unseren Microsoft-Workflows.