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.
Heute möchte ich über ein Datenmodellierungskonzept namens Junk-Dimension sprechen . Der Name lässt vermuten, dass es sich um eine abwertende Technik handelt, die man vermeiden sollte, aber in Wirklichkeit handelt es sich um einen nützlichen Ansatz.
Tatsächlich habe ich an einer Frage aus dem gearbeitet und eine Junk-Dimension war die perfekte Lösung dafür. Sobald Sie es sehen und verstehen, werden Sie es in Ihrer eigenen Arbeit häufig anwenden können. Das vollständige Video dieses Tutorials können Sie unten in diesem Blog ansehen.
Inhaltsverzeichnis
Was sind Junk-Dimensionen?
Das Data Warehouse Toolkit von Kimball und Ross , eine der Bibeln der dimensionalen Modellierung, definiert sie als die Gruppierung von Flags und Indikatoren mit typischerweise niedriger Kardinalität . Niedrige Kardinalität bedeutet eine kleine Anzahl einzigartiger Beobachtungen innerhalb eines bestimmten Feldes.
In unserem Beispiel haben wir ein Datenmodell für unser Geschäft, kundenspezifische PCs zu bauen. Das Datenmodell bezieht sich auf Bestellungen und Rechnungen. Wir haben auch eine Reihe von Flags, mit denen wir den Prozessortyp , die Art der Tower- Konfiguration (Kompakt oder Vollständig) und den Zweck (Gaming oder Workstation) erfassen können .
Definieren von Junk-Abmessungen mithilfe der Küchen-Müllschubladen-Analogie
Wenn Sie sich jedes dieser Felder ansehen, gibt es in jedem Feld nur zwei eindeutige Beobachtungen. Dies ist es, was Kimball als Flagge mit niedriger Kardinalität bezeichnen würde . Er sagt, dass wir durch die Schaffung einer abstrakten Dimension Flags aus der Faktentabelle entfernen und sie gleichzeitig in ein nützliches Dimensionsgerüst einordnen.
Die Analogie der Küchenschublade für eine Mülldimension ist gut. Jeder hat eine Schublade voller Gummibänder, Heftklammern, Batterien, Geburtstagskerzen usw. Es ist nicht wichtig, dass all diese Dinge eine eigene Schublade haben, aber Sie müssen einen Platz haben, an dem Sie sie unterbringen können.
Wenn Sie sie beibehalten, kann dies dazu führen, dass die Faktentabelle immer größer wird. Nehmen wir an, wir haben eine Faktentabelle mit einer Million Datensätzen. Wir haben viele Computer gebaut und für jeden Computer, den wir bauen, müssen wir den Prozessor, den Tower und den Zweck angeben. Das bedeutet, dass wir für eine Million bestellter PC-Zeilen auch 3 Millionen Flags in der Faktentabelle haben.
Reduzieren der Größe der Faktentabelle
Wir könnten diese in eine Dimensionstabelle verschieben und nur mit der Modell-ID verknüpfen, um die 3 Millionen Flags aus der Faktentabelle zu entfernen. Dazu können wir für jedes dieser Flags eine separate Tabelle erstellen und es wird funktionieren. Dieser Vorgang verkompliziert jedoch das Datenmodell, in dem Sie normalerweise einspaltige Tabellen vermeiden möchten.
Die ideale Lösung besteht darin, eine Junk-Dimension zu verwenden , in der Sie über eine Reihe von Flags mit niedriger Kardinalität verfügen, die auf allgemeine Weise miteinander verbunden sind. Diese beziehen sich alle auf Attribute der Computer, die wir bauen, jedoch nicht auf eine wirklich direkte Weise, wie Sie es normalerweise für eine bestimmte Dimensionstabelle tun würden.
Überprüfung des Problems des Forummitglieds
Werfen wir einen Blick auf die konkrete Anwendung, die im Forum veröffentlicht wurde. Das Mitglied wollte zwei verschiedene Felder erstellen, eines für Stalled und eines für Active . Wenn der Kunde in den letzten 45 Tagen eine Transaktion durchgeführt hat, wird diese als aktiv gekennzeichnet; andernfalls wird es als blockiert gekennzeichnet.
Das Mitglied wollte außerdem eine andere Dimensionstabelle für den Kundentyp, der entweder Mehrfachbestellung oder Einzelbestellung ist. Wenn das Konto zu irgendeinem Zeitpunkt in der Historie zwei oder mehr Transaktionen unter Verwendung einer einzigen Kontonummer hätte, würde dies als Multi-Order-Kunde betrachtet. Und wenn sie nur eine Bestellung für eine bestimmte Kontonummer hätten, wäre das ein Einzelauftragskunde.
Das sind also die beiden Flaggen, die wir entwickeln wollen. Lassen Sie uns in LuckyTemplates eintauchen und herausfinden, wie das geht.
Datenmodellierung für die Junk-Dimension
Werfen wir einen Blick auf das Datenmodell. Es ist ein wirklich einfaches Datenmodell. Wir haben unsere erweiterte Datumstabelle und Transaktionstabelle .
Unsere Transaktionstabelle enthält nur drei Felder: eine Kontonummer , ein Rechnungsdatum und eine Verkaufsmenge .
Im Allgemeinen gilt: Wenn wir die Transformation näher an die Quelle bringen können, werden wir das tun. Dies ist im Verlauf einer Berichtssitzung nicht dynamisch, sodass wir es in DAX nicht tun müssen .
Wir sollten dies entweder in Power Query oder Data Warehouse/SQL tun, wenn wir diese Option haben. Gehen wir aber vorerst davon aus, dass wir das nicht tun und es nur in der Leistungsabfrage tun .
Identifizieren des Clienttyps für die Junk-Dimension
Als Erstes ermitteln wir den Kundentyp, ob es sich um eine Einzelbestellung oder eine Transaktion mit mehreren Bestellungen handelt. Wir verwenden Group By , Count und Count Rows .
Fügen Sie dann alle Daten hinzu und machen Sie daraus einen Vorgang „Alle Zeilen“, sodass wir nicht die aggregierte Tabelle, sondern die Anfangstabelle mit dieser Zeilenanzahl in jeder Zeile zurückgeben.
Schauen wir uns das Ergebnis an und erweitern es.
Wir können eine benutzerdefinierte Spalte hinzufügen, sie „Client Type“ nennen und dann eine IF-Anweisung erstellen. Die Aussage lautet: Wenn Count gleich 1 ist, handelt es sich um eine einzelne Bestellung. andernfalls handelt es sich um eine Mehrfachbestellung.
Wir ändern einfach die Spalte in einen Texttyp. Jetzt haben wir eine unserer beiden Dimensionen in der Faktentabelle festgelegt.
Lassen Sie uns die zweite Dimensionstabelle fertigstellen. Wenn in diesem Fall die letzte Bestellung 45 Tage oder weniger vom heutigen Datum entfernt ist, gilt der Kunde als aktiv. Wenn innerhalb von 45 Tagen ab heute keine Bestellung eingeht, ist der Kunde inaktiv.
Wir fügen eine benutzerdefinierte Spalte hinzu und benennen die Spalte Today . Fügen Sie dann DateTime.LocalNow hinzu , um uns das aktuelle Datum und die aktuelle Uhrzeit zu geben, und dann Date.From , um uns nur den Datumsteil zu geben.
Ändern wir dies einfach in einen Datumsdatentyp und verschieben wir dann die Spalte nach vorne.
Es gibt eine einfache Möglichkeit, eine Subtraktion zwischen den beiden Datumsspalten zu erstellen. Markieren Sie einfach diese beiden Daten, klicken Sie im Menüband auf „Daten“ und dann auf „Tage subtrahieren“ .
Dadurch erhalten Sie den Unterschied zwischen diesen beiden Daten in Bezug auf die Anzahl der Tage. Benennen wir diese neue Spalte „Tage vor heute“.
Der nächste Schritt besteht darin, die Mindesttage vor dem heutigen Tag zu ermitteln, d. h. die letzte Bestellung für jede Kontonummer. Wenn diese Zahl kleiner oder gleich 45 ist, ist sie aktiv.
Lassen Sie uns noch einmal „Gruppieren nach“ , dann „Erweitert“ und dann „Kontonummer“ ausführen .
Auch hier verwenden wir „Alle Daten“ für den neuen Spaltennamen und „Alle Zeilen“ für den Vorgang.
Dieses Mal fügen wir „ Mindesttage dazwischen“ mit „Minimum“ als Operation und „ Tage vor heute“ als Spalte hinzu. Dadurch erhalten wir die aktuellste Bestellung.
Dann erweitern wir „Alle Daten“ und entfernen „Kontonummer“ .
Sobald wir dies erweitert haben, haben wir die Mindesttage zwischen den Kontonummern.
Zuletzt fügen wir eine weitere benutzerdefinierte Spalte hinzu und nennen sie Client Timing . Wir werden einen Was-wäre-wenn-Parameter eingeben, bei dem es sich um „ Aktiv “ oder „ Stalled “ handelt, wenn unser Wert „Min. Tage dazwischen“ kleiner oder gleich 45 ist .
Entfernen der unnötigen Spalten
Da wir jetzt viele unterstützende Spalten haben, klicken wir auf „Spalten auswählen“ und entfernen diejenigen, die wir nicht benötigen.
Wir werden die Spalten Count , Today , Days Before to Today und Min Days Between entfernen . Wir haben jetzt nur noch die ursprüngliche Faktentabelle sowie die Spalten „Client-Typ“ und „Client-Timing“ .
Anstatt diese in der Faktentabelle zu belassen, duplizieren wir diese Tabelle.
Wir nennen die Duplikattabelle Account Flags .
Gehen wir zurück zur Tabelle „Transaktionen“ und entfernen Sie die Felder „Client-Typ“ und „Client-Timing“ .
Wir haben jetzt die ursprüngliche Faktentabelle und die Konto-Flags-Tabelle.
Für die Tabelle „Konto-Flags“ benötigen wir die Felder „Client-Typ“ und „Client-Timing“ nicht, daher entfernen wir diese. Wir markieren einfach alle diese Felder, entfernen Zeilen und entfernen Duplikate.
Wir haben jetzt unsere Junk-Dimensionstabelle. Jetzt müssen Sie nur noch auf „Schließen & Übernehmen“ klicken . Der nächste Schritt besteht darin, die Kontonummer aus unserer Tabelle „Kontomarkierungen“ mit der Kontonummer in unserer Transaktionstabelle zu verbinden .
Wir haben eine Eins-zu-viele-Beziehung zwischen der Tabelle „Transaktionen“ (die unsere Faktentabelle ist) und der Tabelle „Konto-Flags“ (die unsere Junk-Dimensionstabelle ist).
Aufbau Ihrer Datenmodellbeziehungen in LuckyTemplates
Datenmodellierung in LuckyTemplates: Tipps und Best Practices
Abschluss
Lassen Sie uns die Dimensionen „Client-Timing“ und „Client-Typ“ in unsere Leinwand einfügen und sie in Slicer umwandeln. Wir können jetzt genau das tun, was das Mitglied ursprünglich tun wollte, nämlich basierend auf diesen Attributen einen Slice erstellen.
Wenn wir auf „Mehrfachbestellung“ klicken, bleiben uns nur diejenigen übrig, die mehrere Bestellungen haben, und wenn wir auf „Einzelbestellung“ gehen, bleiben uns nur diejenigen übrig, die einen Kauf getätigt haben.
Zusammenfassend lässt sich sagen, dass dies im Grunde eine Junk-Dimension ist und wie man sie erstellen kann. Dies ist eine sehr nützliche Technik, wenn Sie über eine Reihe verschiedener Flags mit geringer Kardinalität verfügen, die Sie auf effiziente Weise in Ihr Datenmodell integrieren möchten.
Die Technik der Gruppierung nach allen Zeilen ist äußerst nützlich, um diese Junk-Dimensionen zu erstellen. Ich hoffe, Sie fanden das wie immer hilfreich.
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
In diesem Tutorial zur DAX-Codierungssprache erfahren Sie, wie Sie die GENERATE-Funktion verwenden und einen Kennzahltitel dynamisch ändern.
In diesem Tutorial erfahren Sie, wie Sie mithilfe der Multi-Threaded-Dynamic-Visuals-Technik Erkenntnisse aus dynamischen Datenvisualisierungen in Ihren Berichten gewinnen.
In diesem Artikel werde ich den Filterkontext durchgehen. Der Filterkontext ist eines der Hauptthemen, über die sich jeder LuckyTemplates-Benutzer zunächst informieren sollte.
Ich möchte zeigen, wie der LuckyTemplates Apps-Onlinedienst bei der Verwaltung verschiedener Berichte und Erkenntnisse aus verschiedenen Quellen helfen kann.
Erfahren Sie, wie Sie Ihre Gewinnmargenänderungen mithilfe von Techniken wie Kennzahlenverzweigung und der Kombination von DAX-Formeln in LuckyTemplates ermitteln.
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.
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