Qlik Sense · Supervision · QVD

Suivre l’exécution d’une Nuit Applicative

Un KO posé dès le départ, un OK seulement lorsque le traitement atteint sa fin, et un contrôle de volumétrie indépendant pour repérer les données à vérifier.

INTRODUCTION

Suivre autre chose que le simple résultat d’une tâche

Dans cet article, nous appelons Nuit Applicative (NA) une chaîne de traitements Qlik exécutés automatiquement, généralement en dehors des heures d’utilisation, afin d’extraire, transformer et préparer les données nécessaires aux applications.

La QMC indique l’état d’une tâche, mais on peut souhaiter disposer, dans les données elles-mêmes, d’un suivi complémentaire : le traitement a-t-il réellement démarré ? Est-il arrivé jusqu’à son terme ? Combien de temps a-t-il duré ? Quels volumes a-t-il produits ?

DÉMARRAGELe traitement est-il parti ?
EXÉCUTIONA-t-il atteint sa fin ?
DONNÉESLes volumes sont-ils cohérents ?

Le principe retenu est volontairement simple :

PRINCIPEQlik Script
CALL SuiviNaDebut(...);

// Traitement normal de l'application

CALL SuiviNaFin(...);
Le déclic

Petit clin d’œil à Serge DESTRAZ pour l’idée simple et efficace qui est au cœur du mécanisme : poser le KO dès le départ. Tant que la fin du traitement n’a pas été constatée, on ne considère pas l’exécution comme terminée.

SuiviNaDebut : poser le KO avant de commencer

Dès le début du script, SuiviNaDebut enregistre une trace contenant notamment l’application, la date et l’heure de démarrage, avec un statut provisoire KO.

Démarrage→SuiviNaDebut→KO→Traitement Qlik

Ce KO ne signifie pas qu’une erreur vient déjà de se produire. À cet instant, nous savons seulement que le traitement a commencé : rien ne garantit encore qu’il atteindra sa fin.

Pourquoi ne pas utiliser EN_COURS ?

Avec un statut EN_COURS, un traitement interrompu resterait indéfiniment « en cours » et il faudrait définir un délai à partir duquel le considérer comme perdu. Le KO évite cette règle supplémentaire : si une véritable erreur provoque une sortie du script avant SuiviNaFin, le KO reste présent et signale une exécution commencée mais non clôturée.

SuiviNaFin : l’OK se mérite à la fin

Lorsque les traitements sont terminés et que les QVD ont été produits, l’application atteint SuiviNaFin. La routine peut alors enregistrer l’heure de fin, calculer la durée et clôturer l’exécution.

FIN DU TRAITEMENTQlik Script
CALL SuiviNaFin(...);

Lorsque SuiviNaFin est atteinte, le suivi de cette exécution est clôturé en OK avec ses informations de fin. Si la routine n’est jamais atteinte, le KO posé au démarrage reste présent.

LE SCRIPT S’INTERROMPTKO conservé

SuiviNaFin n’a jamais été atteinte.

LE SCRIPT ATTEINT SA FINOK

SuiviNaFin clôture normalement l’exécution.

ApplicationDébutFinDuréeStatut
CHARGEMENT_VENTES01:1501:2700:12OK

Un traitement terminé peut quand même mériter notre attention

Arriver jusqu’à la fin du script confirme que le traitement s’est exécuté. Cela ne garantit pas, à lui seul, que la volumétrie produite est celle attendue. On peut donc profiter de SuiviNaFin pour ajouter un contrôle complémentaire.

Qlik fournit la fonction QvdNoOfRecords(), qui retourne le nombre d’enregistrements présents dans un QVD.

EXEMPLE SOSBIQlik Script
// Nombre de lignes du QVD produit
LET vNbLignesQvd =
    QvdNoOfRecords('lib://QVD/COMMANDES.qvd');

Côté SGBD source, le même principe peut être obtenu par un comptage sur la table homonyme :

EXEMPLE SOSBISQL
SELECT COUNT(*)
FROM ERP.COMMANDES;
ContrôleVolume
COMMANDES.qvd1 249 850
ERP.COMMANDES1 250 000
Écart-150
Deux contrôles, deux significations

Le statut OK/KO décrit l’exécution du traitement. L’écart de volumétrie décrit la cohérence des données produites. Un traitement peut donc être OK tout en présentant un écart qui devra être signalé dans la restitution de la NA.

ERREUR D’EXÉCUTIONKO

Le script n’a pas atteint SuiviNaFin.

ÉCART DE VOLUMÉTRIEOK + alerte

Le traitement est terminé, mais les données sont à contrôler.

Attention au périmètre comparé

Une égalité stricte entre un QVD et une table source n’est pertinente que si les deux représentent le même périmètre. Un chargement filtré, agrégé, transformé ou incrémental peut légitimement produire une volumétrie différente. Le contrôle doit donc être adapté à la logique du traitement.

Le nom du QVD fournit déjà le nom de la table

Une application peut produire plusieurs QVD provenant de différents schémas du SGBD. Si l’on adopte la convention un QVD = une table source homonyme, inutile de déclarer chaque table individuellement : le nom du QVD fournit déjà le nom de la table.

Il reste simplement à indiquer les schémas sources à contrôler :

CONFIGURATIONQlik Script
SET vTablesSuiviFinNa =
    'ERP|REFERENTIEL|CRM';

Le caractère | n’a ici aucune signification particulière dans Qlik : c’est simplement le séparateur choisi pour stocker plusieurs schémas dans une même variable.

QVD produitSchémaTable source déduite
COMMANDES.qvdERPERP.COMMANDES
CLIENTS.qvdERPERP.CLIENTS
ARTICLES.qvdREFERENTIELREFERENTIEL.ARTICLES
CONTACTS.qvdCRMCRM.CONTACTS
La règle de contrôle

Le schéma vient de la configuration ; le nom de la table vient du QVD.

Quelques lignes suffisent à illustrer le parcours de cette liste :

EXEMPLE SOSBIQlik Script
IF Len(Trim('$(vTablesSuiviFinNa)')) > 0 THEN

    FOR vIndex = 1 TO
        SubStringCount('$(vTablesSuiviFinNa)', '|') + 1

        LET vSchema =
            Trim(
                SubField(
                    '$(vTablesSuiviFinNa)',
                    '|',
                    $(vIndex)
                )
            );

        IF Len('$(vSchema)') > 0 THEN
            // Contrôle des QVD associés au schéma...
        END IF

    NEXT vIndex

END IF

Le premier test évite de lancer la boucle si aucune liste n’a été définie. Le second ignore un élément vide, par exemple après un séparateur final ou en présence d’espaces parasites.

Faire ressortir immédiatement ce qui mérite l’attention

Le QVD de suivi peut alimenter une application de restitution de la Nuit Applicative. L’objectif n’est pas de mélanger les contrôles, mais au contraire de rendre leur lecture immédiate.

ApplicationDuréeVolume QVDVolume sourceÉcartStatut
CHARGEMENT_VENTES00:121 250 0001 250 0000OK
CHARGEMENT_CLIENTS00:08499 850500 000-150OK
CHARGEMENT_STOCKS————KO

Ici, CHARGEMENT_CLIENTS a bien atteint sa fin : son statut reste donc OK. L’écart de -150 est néanmoins mis en évidence par un indicateur rouge dans le rapport.

À l’inverse, CHARGEMENT_STOCKS est resté en KO : son traitement n’a jamais atteint SuiviNaFin. Le même suivi peut naturellement servir de base à d’autres mécanismes d’alerte.

1SuiviNaDebutKO provisoire
→
2Traitement QlikChargements et STORE
→
3SuiviNaFinFin + durée
→
4VolumétrieQVD ↔ source
→
5RestitutionOK / KO / alerte

Cette approche complète la supervision native de Qlik Sense par des contrôles liés au déroulement des traitements et aux données produites.

Référence technique :documentation Qlik — QvdNoOfRecords().