PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So erstellen Sie eine fortlaufende Periodensumme

Die laufende Gesamtzahl der Besuche oder Benutzer oder Aktivitäten über einen fortlaufenden Zeitraum zu kennen, ist eine gute Möglichkeit, die Leistung Ihrer Website oder App zu analysieren. Der Suchbegriff „Rollierender 12-Monats-Bericht“ hat über 12 Millionen Suchergebnisse, und Experten glauben, dass der fortlaufende Bericht eine der besten Möglichkeiten ist, Trends aufzuzeigen. Genauso aufschlussreich ist es, Ihren Zeitraum je nach Anwendungsfall durch eine Jahres- oder 12-Monats-Ansicht zu ersetzen.

Beispielsweise kann die Analyse täglicher Website-Besuchertrends über einen Zeitraum von sechs Monaten wertvolle Informationen liefern, zeigt jedoch keine Trends über kleinere Zeiträume im Rahmen des Diagramms. Es wird nur der Gesamttrend angezeigt.

Wenn Sie nach Erkenntnissen suchen, um Phasen des Wachstums oder des Rückgangs zu identifizieren, kann Ihnen eine rollierende Trendanalyse dabei helfen, diese Phasen zu identifizieren. Das folgende Diagramm zeigt die gleichen Daten wie oben, angeordnet in einem täglichen Intervall, in einem fortlaufenden 7-Tage-Trendformat.

Mit dieser rollierenden 7-Tage-Periodenansicht können Sie mehr als nur den Gesamttrend sehen, der im täglichen Gesamtliniendiagramm zu sehen ist. Hier können Sie Mikrotrends innerhalb des Gesamterlebnisses sehen, die viel aufschlussreichere Informationen für Ihr Unternehmen liefern können. In unserem Beispiel hier sehen wir, dass der Gesamttrend der Besucher am Tag in unserem ersten Diagramm nach oben zeigt, aber unser zweites Diagramm zeigt aufeinanderfolgende 7 Perioden innerhalb unseres Gesamttrends, die eine Abwärtsrichtung haben. Diese Art von Einblick kann uns dabei helfen, Phasen des Abwärtstrends zu identifizieren, die mit Marketingbemühungen zusammenfallen könnten, die entweder funktioniert haben oder nicht.

Die Abfrage

Um diese Abfrage zu erstellen, sollten wir einige Dinge wissen:

  1. Der rollierende Zeitraum. Beispiel 12 Monate, 30 Tage oder 7 Tage. In unserem Fall:7 Tage.
  2. Der Messwert, den wir analysieren:Besucher pro Tag.

Die Abfrage wird aus verschiedenen Unterabfragen zusammengesetzt. Verwenden Sie zunächst generate_series, um Zeilen in einer Tabelle für alle Daten in einer Datumsspanne vom Anfang bis zum Ende der Datumsspanne in der Spalte Visitors.created_date zuzuweisen, die in der Haupt-SELECT-Anweisung aufgerufen wird. Diese Unterabfrage dient als Tabelle, aus der wir auswählen.

Eine zweite Unterabfrage geht in den Hauptabschnitt und gibt die Anzahl aller eindeutigen Besucher zurück, die unsere Website in einem Zeitraum von 7 Tagen besucht haben. Diese Unterabfrage dient als eigene Spalte in der Hauptabfrage und zählt die unterschiedlichen Besucher vom „Tag“ bis 7 Tage vor dem „Tag“.

Alles zusammengenommen können wir einen rollierenden Trend unserer Besucher pro Tag in einem Zeitraum von 7 Tagen generieren:

    SELECT
        day,
        (
          SELECT
              COUNT(DISTINCT "Visitors"."visitor_id") AS "Visitors"
          FROM
              "public"."visitors" AS "Visitors"
          WHERE  
              "Visitors"."created_date" BETWEEN b.day - 7 AND b.day + 1
        )
    FROM  (SELECT
            generate_series(
                            MIN(DATE_TRUNC('day', "Visitors"."created_date")::DATE),
                            MAX(DATE_TRUNC('day', "Visitors"."created_date")::DATE),
                            '1d')::date as day
            FROM "public"."visitors" AS "Visitors"
          ) as b
    GROUP BY day                        
    ORDER BY day

Mathematik testen. Wir können die Mathematik hier in der folgenden Tabelle testen. Sehen Sie sich die Verzögerungsschritte an, die die vorherigen 7 Tage der Spalte „Anzahl“ zuordnen, und die Spalte „Gesamt“, die der Spalte „Besucher“ entspricht.

Wenn unsere Mathematik bestätigt ist, können wir darauf vertrauen, dass diese Funktion uns einen Gesamtüberblick über die laufenden Summen rollierender Perioden gibt. Die obige Abfrage kann angepasst werden, um je nach Anwendungsfall unterschiedliche Zeiträume anzuzeigen.