KNOWLEDGE BASE

Gruppieren von aufeinanderfolgenden Werten basierend auf einer Bedingung


Veröffentlicht: 16 Feb 2018
Zuletzt geändert am: 13 Sep 2023

Frage

Gruppieren von aufeinanderfolgenden Werten, die eine Bedingung erfüllen, oder mit anderen Worten alle Werte, die zur selben Periode gehören

Erstellen Sie beispielsweise Gruppen von Tagen auf der Grundlage der Anzahl aufeinanderfolgender Tage, die einen negativen Gewinn aufweisen. Wenn es 3 Tage in Folge mit negativem Gewinn gibt, würden diese Tage alle zur Gruppe "3" gehören.

Umgebung

  • Tableau Desktop
  • Optional: Tableau Prep

Antwort

Die folgenden Anweisungen werden anhand des Beispieldatensatzes Superstore in der Arbeitsmappe "running count groups_v2021.1.twbx" veranschaulicht, die Sie im rechten Fensterbereich herunterladen können.

Diese Anweisungen erstellen eine Markierungstabelle, die die Anzahl der Perioden in jeder Gruppierung zählt. Wie viele 3-Tage-Perioden mit negativem Gewinn gibt es zum Beispiel in dem Datensatz? Die Arbeitsmappe enthält auch Anleitungen zum Erstellen einer Kreuztabellenansicht und einer Gantt-Diagrammansicht.

Option 1: Verwenden von PREVIOUS_VALUE() in Tableau Desktop

Wir können das Startdatum für eine Gruppe von aufeinanderfolgenden Tagen ermitteln, indem wir prüfen, ob der aktuelle Tag die Bedingung erfüllt (negativen Gewinn aufweist) und der vorherige Tag nicht. Mithilfe der Funktion PREVIOUS_VALUE() können wir den Wert des Startdatums für jeden Tag der Gruppierung wiederholen. Dann können wir das Enddatum mit einem ähnlichen Verfahren ermitteln, wobei wir die Daten vom ältesten zum neuesten Datum lesen.

Erstellen von Berechnungen

  1. Optional: Erstellen Sie ein berechnetes Feld mit einem Namen wie "Gewinn lückenlos" mit einer Berechnung ähnlich der folgenden:
    ZN(LOOKUP(SUM([Gewinn]),0))
    
    
    Hinweis: Wenn im Datensatz Tage fehlen, ermöglicht uns dieser Schritt, fehlende Tage als Nullgewinn zu behandeln. Wenn Sie diesen Schritt auslassen, verwenden Sie in allen folgenden Schritten SUM([Gewinn]) statt [Gewinn lückenlos].
     
  2. Erstellen Sie ein berechnetes Feld mit einem Namen wie "Startdatum" mit einer Berechnung ähnlich der folgenden:
        IF [Gewinn lückenlos] >= 0
    	THEN NULL
    	
    	ELSEIF LOOKUP([Gewinn lückenlos],-1) >= 0
    	THEN MIN([Bestelldatum])\}
    	
    	ELSE PREVIOUS_VALUE(#1/1/18#)
    	END
    
    
  3. Erstellen Sie ein berechnetes Feld mit einem Namen wie "Nächster Gewinnwert" mit einer Berechnung ähnlich der folgenden:
    
        LOOKUP([Gewinn lückenlos],1)
        
  4. Erstellen Sie ein berechnetes Feld mit einem Namen wie "Enddatum" mit einer Berechnung ähnlich der folgenden:
    
    	IF [Gewinn lückenlos] >= 0
    	THEN NULL
    	
    	ELSEIF [Nächster Gewinnwert] >= 0
    	THEN MIN([Bestelldatum])\}
    	
    	ELSE PREVIOUS_VALUE(#1/1/18#)
    	END 
    
    
  5. Erstellen Sie ein berechnetes Feld mit einem Namen wie "Tage in Folge" mit einer Berechnung ähnlich der folgenden:
    	
        DATEDIFF('day', [Startdatum], [Enddatum]) + 1
        
  6. Erstellen Sie ein berechnetes Feld mit einem Namen wie "Anzahl Perioden" mit einer Berechnung ähnlich der folgenden:
    
        IF [Tage in Folge] = 1 THEN
    	    WINDOW_SUM(
    	    IF [Tage in Folge] = 1
    	    THEN COUNTD([Bestelldatum])
    	    END
    	    )
    	ELSEIF [Tage in Folge] = 2 THEN
    	    WINDOW_SUM(
    	    IF [Tage in Folge] = 2
    	    THEN COUNTD([Bestelldatum])
    	    END
    	    )
    	ELSEIF [Tage in Folge] = 3 THEN
    	    WINDOW_SUM(
    	    IF [Tage in Folge] = 3
    	    THEN COUNTD([Bestelldatum])
    	    END
    	    )
    	ELSEIF ...
    	END / [Tage in Folge]    
     

    Hinweis: Die berechneten Felder [Anzahl Perioden] und [Nur einen Tag pro Periode behalten] müssen eine Bedingung für jede mögliche Anzahl von Tagen in einer Periode enthalten. Weitere Erklärungen dazu finden Sie im Artikel Verwenden eines aggregierten Felds, um die Detailgenauigkeit in einer Tabellenberechnung zu definieren.

  7. Erstellen Sie ein berechnetes Feld mit einem Namen wie "Nur einen Tag pro Periode behalten" mit einer Berechnung ähnlich der folgenden:
    
        MIN([Bestelldatum]) = WINDOW_MIN(IF[Tage in Folge] = 1 THEN [Startdatum] END)
    	OR MIN([Bestelldatum]) = WINDOW_MIN(IF[Tage in Folge] = 2 THEN [Startdatum] END)
    	OR MIN([Bestelldatum]) = WINDOW_MIN(IF[Tage in Folge] = 3 THEN [Startdatum] END)
    	OR ...
    


Erstellen der Hervorhebungstabelle

  1. Ziehen Sie [Kategorie] auf den Spalten-Container.
  2. Klicken Sie mit der rechten Maustaste und ziehen Sie "[Order ID]" zu "Detail" auf der Karte "Markierungen".
  3. Wählen Sie im Dialogfeld "Feld ablegen" den Eintrag MDY(Auftragsdatum) aus und klicken Sie auf OK.
  4. Ziehen Sie [Tage in Folge] auf "Beschriftung" auf der Karte "Markierungen".
  5. Klicken Sie mit der rechten Maustaste auf [Tage in Folge] unter "Beschriftung" und wählen Sie "Tabellenberechnung bearbeiten" aus.
  6. Führen Sie im Dialogfeld "Tabellenberechnung" folgende Schritte aus:
    1. Wählen Sie "Startdatum" unter "Verschachtelte Berechnungen" aus.
    2. Wählen Sie unter Berechnen per die Option "Bestimmte Dimensionen" aus.
    3. Markieren Sie nur Monat, Tag, Jahr des Bestelldatums.
    4. Wählen Sie "Gewinn lückenlos" unter "Verschachtelte Berechnungen" aus.
    5. Wählen Sie unter Berechnen per die Option "Bestimmte Dimensionen" aus.
    6. Überprüfen Sie alle Dimensionen.
    7. Wählen Sie "Nächster Gewinnwert" unter "Verschachtelte Berechnungen" aus.
    8. Wählen Sie unter Berechnen per die Option "Bestimmte Dimensionen" aus.
    9. Markieren Sie nur Monat, Tag, Jahr des Bestelldatums.
    10. Wählen Sie "Enddatum" unter "Verschachtelte Berechnungen" aus.
    11. Wählen Sie unter Berechnen per die Option "Bestimmte Dimensionen" aus.
    12. Markieren Sie nur Monat, Tag, Jahr des Bestelldatums.
    13. Wählen Sie "Benutzerdefiniert", "Bestelldatum", "Minimum", "Absteigend" im Dropdown-Menü "Sortierreihenfolge" aus.
  7. Halten Sie die Strg-Taste gedrückt und ziehen Sie [Tage in Folge] von "Beschriftung" in den Zeilen-Container.
  8. Klicken Sie mit der rechten Maustaste auf [Tage in Folge] im Zeilen-Container und wählen Sie "Diskret" aus.
  9. Ziehen Sie [Nur einen Tag pro Periode behalten] auf den Filter-Container und klicken Sie auf OK, um das Dialogfeld "Filter" zu schließen.
  10. Klicken Sie mit der rechten Maustaste auf [Nur einen Tag pro Periode behalten] im Filter-Container und wählen Sie "Tabellenberechnung bearbeiten..." aus.
  11. Führen Sie im Dialogfeld "Tabellenberechnung" folgende Schritte aus:
    1. Wiederholen Sie die Schritte 6-1 bis 6-13.
    2. Wählen Sie unter "Verschachtelte Berechnungen" die Option "Nur einen Tag pro Periode behalten" aus.
    3. Wählen Sie unter Berechnen per die Option "Bestimmte Dimensionen" aus.
    4. Markieren Sie nur Monat, Tag, Jahr des Bestelldatums.
  12. Klicken Sie mit der rechten Maustaste auf [Nur einen Tag pro Periode behalten] im Filter-Container und wählen Sie "Filter bearbeiten" aus. Aktivieren Sie im Dialog "Filter" nur den Wert "True" (Wahr) und klicken Sie auf OK.
  13. Halten Sie die Strg-Taste gedrückt und ziehen Sie [Tage in Folge] vom Zeilen-Container auf "Farbe" in der Karte "Markierungen".
  14. Wählen Sie im Dropdown-Menü auf der Karte "Markierungen" die Option "Quadrat" aus.
  15. Klicken Sie auf der Karte "Markierungen" auf "Größe" und ziehen Sie den Schieberegler ganz nach rechts.
  16. Erstellen Sie ein berechnetes Feld mit einem Namen wie "Leer" mit einer Berechnung ähnlich der folgenden:
    
    ""
    
    
  17. Ziehen Sie eine Kopie von [Leer] auf den Zeilen-Container und eine weitere auf den Spalten-Container.
  18. Klicken Sie mit der rechten Maustaste im Zeilen-Container auf [Leer] und deaktivieren Sie Kopfzeile anzeigen.
 

Option 2: Verwenden von Tableau Prep

Die Erstellung des Prep-Schemas ist zwar aufwendiger, aber die Erstellung der Ansichten aus der Prep-Ausgabe ist viel einfacher als die Erstellung der Ansichten mit Tabellenberechnungen. Das Prep-Schema "Grouping Consequtive days.tflx" demonstriert die folgenden Schritte und kann vom Bereich rechts heruntergeladen werden.

Erstellen des Prep-Schemas

  1. Stellen Sie eine Verbindung zu Superstore her und ziehen Sie "Bestellungen" in den Arbeitsbereich.
  2. Optional: Folgen Sie den Anleitungen unterAuffüllen von Lücken in sequenziellen Daten oder Auffüllen von Lücken in sequenziellen Daten nach Kategorie, um fehlende Tage im Datensatz zu füllen.
  3. Erstellen Sie einen Bereinigungsschritt mit dem Namen "Hauptzweig".
  4. Erstellen Sie einen aggregierten Schritt mit dem Namen "Nur Felder behalten".
  5. Fügen Sie im Aggregationsschritt "Nur Felder behalten" Kategorie und Bestelldatum zu "Gruppierte Felder" und SUM(Gewinn) zu "Aggregierte Felder" hinzu.
  6. Erstellen Sie einen Bereinigungsschritt mit dem Namen "Zeilennummer".
  7. Führen Sie im Bereinigungsschritt "Zeilennummer" folgende Aktionen aus:
    1. Klicken Sie auf "Berechnetes Feld erstellen...", um eine neue Berechnung zu erstellen.
    2. Nennen Sie die Berechnung "Bedingung".
    3. Fügen Sie die Formel für die Bedingung hinzu, die zum Gruppieren von Feldern verwendet wird. Beispiel:
      
      IF [Gewinn] < 0
      THEN 'negative'
      ELSE 'positive'
      END
      
      
    4. Erstellen Sie ein neues berechnetes Feld mit dem Namen "Zeilennummer" mit einer Formel wie
      
      { PARTITION [Kategorie], [Bedingung] : { ORDERBY [Bestelldatum] ASC : RANK_DENSE()}}
      
  8. Erstellen Sie einen Bereinigungsschritt mit dem Namen "Zeilennummer + 1".
  9. Führen Sie im Bereinigungsschritt "Zeilennummer + 1" folgende Aktionen aus:
    1. Erstellen Sie ein neues berechnetes Feld mit dem Namen "Zeilennummer + 1" mit einer Formel wie 
      
      [Zeilennummer] + 1
      
      
    2. Entfernen Sie [Zeilennummer].
  10. Ziehen Sie den Bereinigungsschritt "Zeilennummer + 1" auf den Bereinigungsschritt "Zeilennummer" und legen Sie ihn auf "Verknüpfung" ab.
  11. Gehen Sie im Schritt "Verknüpfung 1" wie folgt vor:
    1. Tableau Prep sollte automatisch eine Verknüpfungsklausel auf Bedingung = Bedingung erstellen. Falls nicht, fügen Sie diese Verknüpfungsklausel hinzu.
    2. Klicken Sie auf das Pluszeichen im linken grauen Seitenbereich im Abschnitt "Verknüpfungsklauseln übernommen".
    3. Wählen Sie im Menü "Zeilennummer" die Option "Kategorie" aus.
    4. Wählen Sie im Menü "Zeilennummer + 1" die Option "Kategorie" aus.
    5. Aktualisieren Sie die Verknüpfungsklausel zu "Zeilennummer = Zeilennummer + 1".
    6. Wählen Sie im Venn-Diagramm den gesamten Kreis "Zeilennummer" aus, um eine linke Verknüpfung zu erstellen.
  12. Erstellen Sie einen Bereinigungsschritt mit dem Namen "Startdatum".
  13. Führen Sie im Bereinigungsschritt "Startdatum" folgende Aktionen aus:
    1. Klicken Sie auf [Kategorie] und klicken Sie dann bei gedrückter Strg-Taste auf [Kategorie-1], um beide Felder auszuwählen.
    2. Klicken Sie auf "Felder zusammenführen".
    3. Führen Sie [Bedingung] und [Bedingung-1] zusammen.
    4. Erstellen Sie ein neues berechnetes Feld mit dem Namen "Startdatum" mit einer Formel wie 
      
      IF ISNULL(DATEDIFF('day', [Bestelldatum-1], [Bestelldatum]))
      OR DATEDIFF('day', [Bestelldatum-1], [Bestelldatum]) > 1
      THEN [Bestelldatum]
      END
      
      
    5. Klicken Sie auf "Werte filtern…".
    6. Fügen Sie im Dialogfeld "Filter hinzufügen" eine Formel wie NOT ISNULL([Startdatum]) hinzu und klicken Sie auf "Speichern".
    7. Erstellen Sie ein neues berechnetes Feld mit dem Namen "Startdatum-Rang" mit einer Formel wie 
      { PARTITION [Kategorie], [Bedingung] : { ORDERBY [Startdatum] ASC: RANK_DENSE()}}
      
      
    8. Entfernen Sie [Zeilennummer], [Zeilennummer + 1], [Bestelldatum], [Bestelldatum-1]
  14. Zeigen Sie mit der Maus auf den Bereinigungsschritt "Zeilennummer" und klicken Sie auf das Pluszeichen neben dem Schritt (nicht das in eine Zeile eingebettete Pluszeichen), um einen neuen Bereinigungsschritt mit dem Namen "Zeilennummer - 1" zu erstellen, der eine separate Verzweigung anlegen wird.
  15. Hinweis: Die Schritte 15-19 sind den Schritten 9-13 sehr ähnlich, allerdings mit einigen Unterschieden, um das Enddatum und nicht das Startdatum zu ermitteln. Kopieren Sie nicht die berechneten Felder aus der Verzweigung "Startdatum", da es hier Unterschiede gibt. Führen Sie im Bereinigungsschritt "Zeilennummer - 1" folgende Aktionen aus:
    1. Erstellen Sie ein neues berechnetes Feld mit dem Namen "Startdatum-Rang" mit einer Formel wie 
      
      
      [Zeilennummer] - 1
      
      
    2. Entfernen Sie [Zeilennummer].
  16. Ziehen Sie den Bereinigungsschritt "Zeilennummer - 1" auf den Bereinigungsschritt "Zeilennummer" und legen Sie ihn auf "Verknüpfung" ab.
  17. Gehen Sie im Schritt "Verknüpfung 2" wie folgt vor:
    1. Erstellen Sie Verknüpfungsklauseln für "Zeilennummer = Zeilennummer - 1; Kategorie = Kategorie; Bedingung = Bedingung
    2. Wählen Sie im Venn-Diagramm den gesamten Kreis "Zeilennummer" aus, um eine linke Verknüpfung zu erstellen.
  18. Erstellen Sie einen Bereinigungsschritt mit dem Namen "Enddatum".
  19. Führen Sie im Bereinigungsschritt "Enddatum" folgende Aktionen aus:
    1. Führen Sie [Kategorie] and [Kategorie-1] zusammen. 
    2. Führen Sie [Bedingung] und [Bedingung-1] zusammen.
    3. Erstellen Sie ein neues berechnetes Feld mit dem Namen "Enddatum" mit einer Formel wie
      
      IF ISNULL(DATEDIFF('day', [Bestelldatum], [Bestelldatum-1]))
      OR DATEDIFF('day', [Bestelldatum], [Bestelldatum-1]) > 1
      THEN [Bestelldatum]
      END
      
      
    4. Fügen Sie einen Filter mit einer Formel wie NOT ISNULL([Enddatum]) hinzu.
    5. Erstellen Sie ein neues berechnetes Feld mit dem Namen "Enddatum-Rang" mit einer Formel wie 
      
      { PARTITION [Kategorie], [Bedingung] : { ORDERBY [Enddatum] ASC: RANK_DENSE()}}
      
      
    6. Entfernen Sie [Zeilennummer], [Zeilennummer + 1], [Bestelldatum], [Bestelldatum-1]
  20. Ziehen Sie den Bereinigungsschritt "Enddatum" auf den Bereinigungsschritt "Startdatum" und legen Sie ihn auf "Verknüpfung" ab.
  21. Erstellen Sie in "Verknüpfung 3" Verknüpfungsklauseln für Bedingung = Bedingung; Kategorie = Kategorie; Enddatum-Rang = Startdatum-Rang.
  22. Erstellen Sie einen Bereinigungsschritt mit dem Namen "Bereinigen".
  23. Führen Sie im Bereinigungsschritt "Bereinigen" folgende Aktionen aus:
    1. Führen Sie [Kategorie] and [Kategorie-1] zusammen.
    2. Führen Sie [Bedingung] und [Bedingung-1] zusammen.
    3. Erstellen Sie ein neues berechnetes Feld mit dem Namen "Anzahl fortlaufende Tage" mit einer Formel wie 
      
      DATEDIFF('day', [Startdatum], [Enddatum])+1
      
      
    4. Entfernen Sie [Startdatum-Rang] und [Enddatum-Rang]
  24. Ziehen Sie den Bereinigungsschritt "Bereinigen" auf den Bereinigungsschritt "Hauptzweig" und legen Sie ihn auf "Verknüpfung" ab.
  25. Erstellen Sie in "Verknüpfung 4" Verknüpfungsklauseln für Kategorie = Kategorie; Bestelldatum >= Startdatum; Bestelldatum <= Enddatum
  26. Erstellen Sie einen Bereinigungsschritt mit dem Namen "Letzte Bereinigung".
  27. Führen Sie im Bereinigungsschritt "Letzte Bereinigung" folgende Aktionen aus:
    1. Führen Sie [Kategorie] and [Kategorie-1] zusammen.
  28. Optional: Klicken und ziehen Sie, um alle Schritte im Seitenzweig auszuwählen, klicken Sie mit der rechten Maustaste auf etwaige hervorgehobene Schritte und wählen Sie "Gruppe".

Erstellen des Hervorhebungsdiagramms

  1. Ziehen Sie [Kategorie] auf den Spalten-Container.
  2. Ziehen Sie [Anzahl fortlaufende Tage] auf den Zeilen-Container.
  3. Klicken Sie mit der rechten Maustaste auf SUM(Anzahl fortlaufende Tage) im Zeilen-Container und wählen Sie "Dimension" aus.
  4. Klicken Sie mit der rechten Maustaste auf (Anzahl fortlaufende Tage) im Zeilen-Container und wählen Sie "Diskret" aus.
  5. Klicken Sie mit der rechten Maustaste auf [Startdatum] und ziehen Sie es auf Text.
  6. Wählen Sie im Menü "Feld ablegen" die Option "CNTD(Startdatum)" und klicken Sie auf "OK".
  7. Halten Sie die Strg-Taste gedrückt und ziehen Sie "CNTD(Startdatum)" von "Beschriftung" zu "Farbe" auf der Karte "Markierungen".
  8. Wählen Sie im Dropdown-Menü auf der Karte "Markierungen" die Option "Quadrat" aus.
  9. Ziehen Sie [Bedingung] in den Filter-Container.
  10. Wählen Sie im Dialogfeld "Filter" die Option "Negativ" aus und klicken Sie auf "OK".
  11. Wählen Sie im Dropdown-Menü "Anpassen" unter "Standard" die Option "Breite anpassen" aus.

Zusätzliche Informationen

Hinweise zu Option 1 mit PREVIOUS_VALUE()
  • Die Berechnung [Startdatum] gibt NULL zurück, wenn die Bedingung (Gewinn ist negativ) nicht erfüllt ist. Dann prüft die Berechnung, ob die Bedingung am Vortag nicht erfüllt war. Ist das der Fall, gibt sie den Wert des Bestelldatums zurück. Wenn schließlich sowohl der aktuelle Tag als auch der vorherige Tag die Bedingung erfüllen, verwendet die Berechnung PREVIOUS_VALUE(), um das Datum aus dieser Berechnung in der vorherigen Zeile zurückzugeben. Anders gesagt: Während Tableau Desktop jede Zeile (also jeden Tag) liest, gibt diese Berechnung entweder NULL zurück (diesen Wert des Bestelldatums) oder wiederholt den zuvor zurückgegebenen Wert des Bestelldatums.
  • Alle Tabellenberechnungen in dieser Ansicht müssen korrekt berechnet werden, um die erwarteten Werte anzuzeigen. Unter Transformieren von Werten mit Tabellenberechnungen finden Sie weitere Informationen darüber, wie die Berechnungseinstellungen die Ergebnisse einer Tabellenberechnung verändern.
  • Im Unterschied zu LOOKUP() gibt die Funktion PREVIOUS_VALUE() den letzten Wert dieser Berechnung zurück.
Hinweise zu Option 2 mit Tableau Prep:
  • Die Prep-Schema-Ausgabe enthält Startdatumsangaben für Gruppierungen, die die Bedingung (mit negativem Gewinn) erfüllen, und Gruppierungen, die die Bedingung nicht erfüllen. Sie könnten im Bereinigungsschritt "Zeilennummer" einen Filter hinzufügen, um nur [Bedingung]='negativ' beizubehalten, um Gruppierungen auszuschließen, die die Bedingung nicht erfüllen, andernfalls muss der Filter [Bedingung] zur Ansicht hinzugefügt werden.

     

Umwandeln von Werten mit Tabellenberechnungen
Tabellenberechnungsfunktionen
Hat dieser Artikel das Problem gelöst?