Datenindizierung in Vertipaq: Zeilenspeicher versus Spaltenspeicher

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.


So speichern und laden Sie eine RDS-Datei in R

So speichern und laden Sie eine RDS-Datei in R

Sie erfahren, wie Sie Objekte aus einer .rds-Datei in R speichern und laden. In diesem Blog wird auch behandelt, wie Sie Objekte aus R in LuckyTemplates importieren.

Was ist Self in Python: Beispiele aus der Praxis

Was ist Self in Python: Beispiele aus der Praxis

Was ist Self in Python: Beispiele aus der Praxis

First N Business Days Revisited – Eine DAX-Codierungssprachenlösung

First N Business Days Revisited – Eine DAX-Codierungssprachenlösung

In diesem Tutorial zur DAX-Codierungssprache erfahren Sie, wie Sie die GENERATE-Funktion verwenden und einen Kennzahltitel dynamisch ändern.

Präsentieren Sie Einblicke mithilfe der Multi-Threaded-Dynamic-Visuals-Technik in LuckyTemplates

Präsentieren Sie Einblicke mithilfe der Multi-Threaded-Dynamic-Visuals-Technik in LuckyTemplates

In diesem Tutorial erfahren Sie, wie Sie mithilfe der Multi-Threaded-Dynamic-Visuals-Technik Erkenntnisse aus dynamischen Datenvisualisierungen in Ihren Berichten gewinnen.

Einführung in den Filterkontext in LuckyTemplates

Einführung in den Filterkontext in LuckyTemplates

In diesem Artikel werde ich den Filterkontext durchgehen. Der Filterkontext ist eines der Hauptthemen, über die sich jeder LuckyTemplates-Benutzer zunächst informieren sollte.

Beste Tipps zur Verwendung der Apps im LuckyTemplates-Onlinedienst

Beste Tipps zur Verwendung der Apps im LuckyTemplates-Onlinedienst

Ich möchte zeigen, wie der LuckyTemplates Apps-Onlinedienst bei der Verwaltung verschiedener Berichte und Erkenntnisse aus verschiedenen Quellen helfen kann.

Analysieren Sie Gewinnmargenänderungen im Laufe der Zeit – Analysen mit LuckyTemplates und DAX

Analysieren Sie Gewinnmargenänderungen im Laufe der Zeit – Analysen mit LuckyTemplates und DAX

Erfahren Sie, wie Sie Ihre Gewinnmargenänderungen mithilfe von Techniken wie Kennzahlenverzweigung und der Kombination von DAX-Formeln in LuckyTemplates ermitteln.

Materialisierungsideen für Datencaches in DAX Studio

Materialisierungsideen für Datencaches in DAX Studio

In diesem Tutorial werden die Ideen der Materialisierung von Datencaches und deren Auswirkungen auf die Leistung von DAXs bei der Bereitstellung von Ergebnissen erläutert.

Geschäftsberichte mit LuckyTemplates

Geschäftsberichte mit LuckyTemplates

Wenn Sie bisher noch Excel verwenden, ist dies der beste Zeitpunkt, LuckyTemplates für Ihre Geschäftsberichtsanforderungen zu verwenden.

Was ist LuckyTemplates Gateway? Alles was du wissen musst

Was ist LuckyTemplates Gateway? Alles was du wissen musst

Was ist LuckyTemplates Gateway? Alles was du wissen musst