Exemples de requêtes analytiques

Mis à jour

BETA : La base de données de reporting est actuellement en version bêta et peut encore évoluer. Elle est disponible uniquement sur inscription. Pour participer à la bêta ou poser des questions, contactez support@azumuta.com.

Avant de commencer

Après vous être connecté, sélectionnez le schéma de votre espace de travail. Remplacez company_<your-workspace-id> par le nom du schéma configuré. Définissez le fuseau horaire de la session sur UTC pour obtenir des totaux mensuels cohérents.

set search_path to "company_<your-workspace-id>";
set time zone 'UTC';

Lorsqu'une synchronisation détecte un enregistrement source supprimé, elle supprime les lignes correspondantes dans la base de reporting. Les enregistrements archivés peuvent subsister. Les bases de données plus anciennes peuvent conserver une colonne deleted_at, mais la synchronisation actuelle ne la maintient pas. Ces requêtes n'utilisent pas cette colonne. Consultez Suppressions et autres conventions.

Enregistrements par statut

Comptez les enregistrements par statut enregistré. Seuls les enregistrements disposant d'une version d'instruction sont inclus. Cela peut inclure des audits planifiés qui n'ont pas commencé. Consultez Enregistrements d'audit dans la base de reporting.

select status, count(*) as recordings
from recording
group by status
order by recordings desc;

Problèmes par colonne du tableau

Comptez les problèmes d'amélioration continue par tableau et par colonne. Regroupez par identifiants pour conserver distinctes des colonnes portant le même nom. Cela inclut les problèmes archivés. Pour exclure les problèmes archivés, ajoutez and archived_at is null au filtre.

select board_id, column_id, column_name, count(*) as issues
from issue
where board_type = 'continuous-improvement'
group by board_id, column_id, column_name
order by issues desc;

Problèmes créés par mois

Comptez les problèmes par mois de création en UTC. Cela inclut tous les types de tableaux et les problèmes archivés présents dans la base de reporting.

select date_trunc('month', created_at) as month,
       count(*) as issues
from issue
where created_at is not null
group by month
order by month;

Durée active moyenne par instruction de travail

actual_duration est le temps de travail effectif d'un enregistrement, en secondes. Cette requête exclut les enregistrements sans durée. Elle affiche la moyenne pour les 20 instructions de travail ayant le plus grand nombre d'enregistrements restants. Elle ne filtre pas par statut ni par type d'enregistrement.

select workinstruction_id,
       count(*) as recordings,
       round(avg(actual_duration)::numeric, 1) as avg_seconds
from recording
where actual_duration is not null
group by workinstruction_id
order by recordings desc
limit 20;

Compter les éléments de commande associés à une zone

Unité de comptage : un élément d'instruction de travail d'une commande produit. Remplacez <zone-id> par l'identifiant de la zone. Cela inclut tous les types d'association et conserve les éléments en file d'attente sans enregistrements. Cela ne filtre pas l'état de la commande ni celui de l'enregistrement.

select count(*) as order_items
from product_order_workinstruction as item
where exists (
    select 1
    from product_order_workinstruction_spot as zone
    where zone.product_order_workinstruction_id = item.id
      and zone.spot_id = '<zone-id>'
);

EXISTS vérifie l'existence d'une association sans ajouter de lignes au comptage. Aucun jointure avec les enregistrements n'est nécessaire. Un élément peut être lié à plusieurs zones, donc les comptes pour différentes zones peuvent se chevaucher. N'additionnez pas ces comptes pour calculer un total d'espace de travail. Consultez Associations de zones et affectation pour la priorité des sources et les limites de réaffectation.

Compter les enregistrements traités par chaque opérateur

Unité de comptage : un enregistrement distinct par opérateur. Cette requête inclut les visites d'étape normales avec un ID utilisateur. Elle exclut les visites de double-vérification et ne filtre pas le statut ni le type d'enregistrement.

select user_id,
       count(distinct recording_id) as recordings
from instruction_visit
where type = 'normal'
  and user_id is not null
group by user_id
order by recordings desc, user_id;

Les visites répétées n'augmentent pas le compte d'un opérateur pour le même enregistrement. Les enregistrements partagés comptent pour plusieurs opérateurs, de sorte que les totaux par opérateur peuvent se chevaucher. Une visite ouverte peut ne pas encore avoir de ligne. Ceci mesure la participation enregistrée, pas l'affectation ni l'achèvement réussi. Consultez Utilisateurs planifiés et opérateurs réels.

Comparer les étapes applicables aux réponses enregistrées

Unité de sortie : une étape applicable par enregistrement. Partir de recording_step.active = true pour exclure les étapes qui ne s'appliquent pas aux variantes sélectionnées. Faites un LEFT JOIN des totaux de visites normales par enregistrement et par étape pour conserver les étapes sans totaux.

select step.recording_id,
       step.instruction_step_id,
       totals.visits,
       totals.answer_attempts,
       totals.final_answer,
       case
           when totals.id is null then 'No normal-visit totals'
           when totals.final_answer is null then 'No recorded answer'
           else 'Answer recorded'
       end as answer_evidence
from recording_step as step
left join instruction_total_visit as totals
    on totals.recording_id = step.recording_id
   and totals.instruction_step_id = step.instruction_step_id
   and totals.type = 'normal'
where step.active = true
order by step.recording_id, step.instruction_step_id;

La requête inclut tous les statuts et types d'enregistrement qui ont des lignes d'étape, y compris les travaux non terminés et annulés. Elle exclut les totaux de double-vérification. Conservez la condition type dans la jointure : un filtre dans WHERE supprimerait les étapes sans totaux.

Les libellés décrivent des éléments de preuve, pas réussite ou échec. Certaines étapes n'exigent pas de réponse. Une visite ouverte ou une tentative de contrôle bloquée peuvent aussi expliquer une réponse manquante. Des totaux NULL signifient l'absence d'une ligne correspondante, pas zéro tentative. Consultez Visites, tentatives et étapes applicables avant de calculer un taux d'achèvement des réponses.

Conseils

  • Effectuez des jointures sur les identifiants associés. Par exemple, recording.workinstruction_id correspond à workinstruction.id.
  • Utilisez les descriptions de colonnes intégrées pour vérifier la signification des champs et leurs unités.
  • Agrégez et filtrez en SQL avant de charger les données dans votre outil BI afin de réduire le volume de données transféré.