PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment créer un total cumulé pour une période glissante

Connaître le total cumulé des visites ou des utilisateurs ou des activités sur une période glissante est un bon moyen d'analyser les performances de votre site Web ou de votre application. Le terme de recherche "Rapport glissant sur 12 mois" contient plus de 12 millions de résultats de recherche, et les experts estiment que le rapport glissant est l'un des meilleurs moyens de montrer les tendances. Remplacer votre période par une vue annuelle ou sur 12 mois, selon votre cas d'utilisation, est tout aussi pertinent.

Par exemple, l'analyse des tendances quotidiennes des visiteurs du site Web sur une période de six mois peut fournir des informations précieuses, mais elle ne montre pas les tendances sur des périodes plus courtes dans le cadre du graphique. Il ne montrera que la tendance générale.

Si vous cherchez à obtenir des informations pour identifier les périodes de croissance ou de déclin, une analyse des tendances glissantes peut vous aider à identifier ces périodes. Le graphique ci-dessous montre les mêmes données que celles vues ci-dessus, disposées sur un intervalle quotidien, dans un format de tendance sur 7 jours.

Avec cette vue glissante sur 7 jours, vous pouvez voir plus que la tendance générale observée dans le graphique linéaire total quotidien. Ici, vous pouvez voir des micro-tendances au sein de l'expérience globale qui peuvent révéler des informations beaucoup plus perspicaces pour votre organisation. Dans notre exemple ici, nous pouvons voir que la tendance globale des visiteurs par jour est à la hausse dans notre premier graphique, mais notre second révèle 7 périodes consécutives dans notre tendance globale qui ont une direction à la baisse. Ce type d'informations peut nous aider à identifier les périodes de tendance à la baisse qui pourraient coïncider avec des efforts marketing qui ont fonctionné ou non.

La requête

Pour construire cette requête, nous voudrons savoir quelques choses :

  1. La période de roulement. Exemple 12 mois, 30 jours ou 7 jours. Dans notre cas :7 jours.
  2. Statistique que nous analysons :visiteurs par jour.

La requête sera composée de différentes sous-requêtes. Tout d'abord, utilisez generate_series pour attribuer des lignes dans une table pour toutes les dates d'une plage de dates du début à la fin de la plage de dates dans la colonne Visitors.created_date, qui sera appelée dans l'instruction SELECT principale. Cette sous-requête servira de table à partir de laquelle nous sélectionnerons.

Une deuxième sous-requête ira dans la section principale et renverra le nombre de tous les visiteurs uniques qui ont visité notre site sur une période de 7 jours. Cette sous-requête servira de sa propre colonne dans la requête principale et comptera les visiteurs distincts du « jour » jusqu'à 7 jours avant le « jour ».

En mettant tout cela ensemble, nous pouvons générer une tendance glissante de notre visiteur par jour sur une période de 7 jours :

    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

Tester les maths. Nous pouvons tester les calculs ici dans le tableau suivant. Consultez les étapes de décalage qui attribuent les 7 jours précédents à la colonne Nombre et la colonne Total qui sera égale à la colonne Visiteurs.

Une fois nos calculs confirmés, nous pouvons faire confiance à cette fonction pour nous donner une vue d'ensemble des totaux cumulés des périodes glissantes. La requête ci-dessus peut être ajustée pour afficher différentes périodes de temps en fonction de votre cas d'utilisation.