IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Créer un KPI sur 30 jours "roulants"


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2024
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2024
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Créer un KPI sur 30 jours "roulants"
    Bonjour
    (Premier post sur le forum, pardonnez moi si je rate qqc)

    J'ai un KPI "On time delivery ou OTD" qui se calcule comme suit : Parmi les X orders qui devaient etre livrées à telle date, combien ont été livrées dans les temps (<= ETA delivery)

    Probleme: Je sais calculer l'OTD sur une période de temps (disons tous les jours, tous les mois), mais je cherche a obtenir cet OTD sur une période de 30 jours roulants et ce tous jours.

    ex (jour au hasard en 2023): 10-06-2023 / OTD = Nb commandes qui devaient etre livrées entre du 11-05-2023 et le 09-06-2023 et bien été livées à temps


    --------
    La query qui me donne le KPI tous les jours (mais pas roulant sur la somme des 30J dans le passé) que j'essaye d'améliorer
    (Il y a aussi une metric d'on time shipment dans la query que je n'ai pas retirée, mais l'idée est la meme)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    SELECT 
      SELLER_ID
      ,SELLER_NAME
      ,DATE(DATETIME_DELIVERY_ORDER_ESTIMATED_LOCAL_TIME) AS DATE_DELIVERY_ETA
      ,COUNT(DISTINCT(ORDER_ID)) AS NB_ORDERS
      ,COUNT(DISTINCT(CASE WHEN SHIPPED_ON_TIME = 1 THEN ORDER_ID END)) AS NB_ORDERS_OTS
      ,ROUND(SAFE_DIVIDE(COUNT(DISTINCT(CASE WHEN SHIPPED_ON_TIME = 1 THEN ORDER_ID END)),COUNT(DISTINCT(ORDER_ID))), 4) AS OTS
      ,COUNT(DISTINCT(CASE WHEN DELIVERED_ON_TIME = 1 THEN ORDER_ID END)) AS NB_ORDERS_OTD
      ,ROUND(SAFE_DIVIDE(COUNT(DISTINCT(CASE WHEN DELIVERED_ON_TIME = 1 THEN ORDER_ID END)),COUNT(DISTINCT(ORDER_ID))), 4) AS OTD
    FROM `universe-prod-20220914.shipping.universe_delivery_forwards`
    WHERE 1=1
      AND SELLER_ID = '1EU' -- Filter on specific sellers
      AND DATE(DATETIME_DELIVERY_ORDER_ESTIMATED_LOCAL_TIME) >= CURRENT_DATE()-365 -- Date start
      AND DATE(DATETIME_DELIVERY_ORDER_ESTIMATED_LOCAL_TIME) < CURRENT_DATE() -- Date end - maximum current date (exclude orders to be delivered after today)
    GROUP BY 1,2,3
    ORDER BY 1,3 DESC
    Champs comportés par ma table en pj
    DATETIME_CREATION_ORDER
    DATETIME_DELIVERY_ORDER_ESTIMATED_LOCAL_TIME
    DATETIME_DELIVERY_ORDER
    DATETIME_SHIPPING_ORDER
    DATETIME_SHIPPING_ORDER_ESTIMATED_LOCAL TIME
    DELIVERED_ON_TIME
    SHIPPED

    J'utilise Google cloud / Big Query

    Merci d'avance

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Bonjour,

    Tu peux utiliser les fonctions analytiques COUNT(...) OVER (...) ou SUM(...) OVER (...) pour faire des comptages glissants. Si tu fournis un petit jeu de données on pourrait illustrer.

    Merci

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2024
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Février 2024
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci !
    Voici un exemple de data dans la table utilisée Cas data OTD.xlsx
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Requête pour les rappel sur 5 jour
    Par Mbrillon dans le forum Oracle
    Réponses: 16
    Dernier message: 06/05/2007, 14h01
  2. question sur 6 jours ouvrés par mois de préavis du syntec
    Par Filippo dans le forum Droit du travail
    Réponses: 21
    Dernier message: 14/06/2006, 13h20
  3. [Oracle] Date(oracle) => Année saisie sur 4 jours, retournée sur 2
    Par romulus dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/03/2006, 03h14
  4. [VB.Net] Calendar et style sur les jours
    Par Sardonnen dans le forum ASP.NET
    Réponses: 1
    Dernier message: 18/11/2005, 10h23
  5. [Log4j] journalisation sur 15 jours
    Par lapartdombre dans le forum Logging
    Réponses: 10
    Dernier message: 29/09/2005, 13h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo