Les widgets KPI se caractérisent par l'utilisation directe d'une requête SQL pour lire les données en base de données ou le paramétrage via un fichier texte contenant des requêtes SQL de type select.
Particularités des widgets KPI
- Configuration du widget via un assistant dans le zoom des widgets
- Conversion du résultat de la requête SQL en chaîne de paramétrage pour le widget selon son type de widget
- Widgets concernés par le mode KPI : feu, jauge, graphique, liste
- Utilisation de paramètres ERP (utilisateur courant, dossier courant, …) dans l'écriture de la requête
- Fréquence de rafraîchissement choisie dans le widget
- Structure de données imposée par le type de widget
- Ordre des champs
- Type des champs
- Nombre de champs significatifs
- Fonction de TEST du widget pour vérifier la requête
- Fonction de SIMULATION du widget pour vérifier le résultat
- Fonction de DEBUG en exécution
- Vues SQL Server pour simplifier l'écriture des requêtes
- Vues ERP
- Vues KPI
- Traitement des confidentialités ERP
- Utilisation des balises ERROR des widgets
Assistant widget KPI
L'assistant 'mode KPI' des widgets couvre trois fonctions dans le zoom des widgets (appelé depuis l'IA par Ctrl+F7) :
- Aide au remplissage des champs du zoom des widgets via la case à cocher et la liste déroulante
- Test du mode KPI via le menu dédié
- Simulation du mode KPI via le menu dédié
L'assistant se base sur la présence d'un fichier exemple « Indicateur.drpt » et sur les fichiers nommés "'CodeApplic'_Indicateur.drpt" comme par exemple « DAV_Indicateur.drpt » présent dans les implicites ERP.
La case à cocher va charger tous les modes KPI décrits dans le fichier et les proposer dans la liste déroulante.
Le choix d'un élément de la liste va garnir les champs du widget. Les données sont modifiables par la suite.
Quelques règles de fonctionnement :
L'assistant considère toujours « Indicateur.drpt » ou les fichiers nommé "CodeApplic_Indicateur.drpt" comme par exemple « DAV_Indicateur.drpt » (mais il reste modifiable dans la zone paramétrage)
Une alternative est aussi le nommage "CodeApplic_U_Indicateur.drpt" comme par exemple « DAV_U_Indicateur.drpt » pour des fichiers complémentaires distincts
Le nom ainsi que la balise du KPI sont indispensables
La fréquence de rafraîchissement ne doit pas être trop élevée au risque du surcharger le serveur SQL
Les noms du module et fonction sont indispensables. L'assistant les positionne après choix dans la liste
Le widget sera vide dans l'IA si le paramétrage (du widget) n'est pas bon
Attention, la visite guidée propose des exemples pour une version minimale de SQL 2012. L'utilisation de version antérieure provoque une erreur SQL.
TESTER une requête SQL associée au widget KPI
Le menu "WidgetKPI / Générer la requête dans le presse-papier permet de tester le widget KPI" permet de tester le paramétrage :
Lecture du fichier indiqué pour le widget
- Permet de vérifier si le fichier est trouvé
- Permet de vérifier si le KPI est trouvé dans le fichier
- Permet surtout d'exécuter la requête afin de vérifier sa validité (en termes d'écriture SQL)
La requête est copiée dans le presse-papier pour exécution dans SQL Management studio
SIMULER le résultat du widget KPI
Le menu "WidgetKPI / Copier le résultat du KPI dans le presse-papier" permet de simuler le widget en mode KPI.
Après avoir exécuté la requête, passe par la conversion du résultat de la requête SQL en chaîne au format requis par le widget choisi.
Le résultat est copié dans le presse-papier pour vérification dans un bloc-notes.
Paramétrage du fichier de descriptions des KPI
Le fichier de description des KPI est un fichier texte, placé dans l'implicite ERP, et indiqué dans la zone texte de paramétrage du widget. Le nom pris par défaut est : Indicateur.drpt
L'assistant considère toujours « Indicateur.drpt » ou les fichiers nommé "CodeApplic_Indicateur.drpt" comme par exemple « DAV_Indicateur.drpt » (mais il reste modifiable dans la zone paramétrage)
Une alternative est aussi le nommage "CodeApplic_U_Indicateur.drpt" comme par exemple « DAV_U_Indicateur.drpt » pour des fichiers complémentaires distincts.
STRUCTURE COMPLETE
CODE UNIQUE DU WIDGET : Commentaire pour le zoom des widgets
C'est le code du KPI qui doit être unique par fichier. Il sert au widget à trouver la définition du KPI et il est affiché dans la liste déroulante de l'assistant. Le commentaire apparaît dans la bulle de la liste déroulante de l'assistant
Balise TYPE à F ou FEU, J ou JAUGE, L ou LIST, G ou GRAPHIQUE pour restreindre le choix du zoom des widgets
Pour restreindre le choix du zoom des widgets dans la liste déroulante de l'assistant. Une seule lettre suffit : F, J, L ou G.
Les FEU et JAUGE ont la même structure pour le KPI, cela signifie que l'on peut mettre la balise TYPE à FJ systématiquement.
Le widget TABLEAU est un widget LISTE qui retourne plusieurs colonnes, c'est donc la requête SQL qui détermine le type. Pour les graphiques, le type de graphiques (camembert ou histogramme) est déterminé par la requête SQL.
Balise MAX à 50 nombre maximum de lignes pour un widget liste.
Valeur numérique entière. Le widget LISTE a une valeur par défaut de 100 lignes affichées au maximum (ne concerne pas les autres widgets). Pour modifier cette limite, indiquer le nombre de lignes maximum à afficher
Pour ne pas avoir de limite mettre la valeur 0
Balise QUERY. Ma requête en plusieurs lignes avec des paramètres sous la forme @NOMPARAM et la database sous la forme $APPLIC. devant le nom de la table.
Écriture de la requête SQL de type SELECT Multi-ligne autorisé. Permet l'utilisation de paramètres au niveau ERP et requête. Accepte les UNION ou les variables SQL Server ou les fonctions SQL Server.
Doit être compatible avec la cible de version de serveur de base de données (SQL Server 2012 dans les exemple fournis)
Balise DEBUG à E ou R ou ER active un mode débogage lors de l'exécution du widget dans l'IA. La présence de la balise DEBUG associée à la valeur E ou R active un mode débogage lors de l'exécution du widget dans l'IA.
E = demande confirmation d'exécution de la requête, et permet de copier la requête dans le presse-papier
R = copie du résultat dans le presse-papier (ER fait les deux actions)
Pour désactiver le debug, il suffit de renommer la balise en NODEBUG pour qu'elle ne soit plus reconnue.
Balise ZOOM à CODE_APPLIC : Numéro du zoom utilisé pour les widgets LISTE pour trouver le code application et le numéro de zoom à appeler en standard; Possibilité de surcharge a5tmetlkpi.dhsp pour traiter d'autres actions.
CODE_APPLIC indique le nom du module concerné (DAV COMMUN DCPT DCONT DPAIE DRT DQUAL DAFF DDOC DGRM DSP DREG)
Numéro du zoom : numéro interne du zoom (Shift+f7 dans l'IA) Utilisé pour les widgets KPI LISTE pour trouver le code application et le numéro de zoom à appeler. En standard en cas de clic sur la ligne, possibilité de surcharger a5tmetlkpi.dhsp pour traiter d'autres actions
COMPLEMENTS
Paramètres de requêtes SQL : contexte ERP
L'écriture des requêtes SQL permet l'utilisation de paramètres de contexte ERP. Ce sont des données liées à l'exécution courante de l'ERP (à partir de l'IA) qui sont disponibles pour filtrer.
Le filtrage contextuel ERP est indispensable pour une bonne utilisation des KPI. Le zoom des widgets fonctionnant hors contexte ERP, la fonction de TEST de l'assistant utilise un module diva 'a5tmetlkpi' qui effectue le garnissage des données pour permettre la substitution des valeurs.
Paramètres de requêtes SQL : globale
A mettre en début de fichier dans une section KPI vide (=crochet ouvrant immédiatement suivi d'un crochet fermant). Ces paramètres seront valables pour tout le fichier.
Paramètres de requêtes SQL
Dans le zoom des widgets, il est possible d'attribuer une valeur à un paramètre dans la zone de texte du zoom des widgets (avec les balises INDICATEUR).
Ce paramètre, sous la forme @NOMPARAM sera valable pour ce widget uniquement. Il est prioritaire aux paramètres globaux ou locaux
Nom de base de données
La requête SQL est exécutée par la couche runtime (record diva SQL) et gère donc la répartition sur plusieurs bases de données. Notamment, la base de données décisionnelle (DataWarehouse)ou encore le module comptabilité ou paie qui serait hébergé dans une autre base.
Syntaxe : identique à celle de l'écriture des record SQL, à savoir $MADATABASE.NOMTABLE
Les valeurs possibles pour $MADATABASE sont : $DAV $BI $COMMUN $DCPT $DCONT $DPAIE $DRT $DQUAL $DAFF $DDOC $DGRM $DSP $DREG
Lorsque $MADATABASE n'est pas indiqué c'est la base de données $COMMUN qui est utilisée.
Base BI : ce mécanisme permet donc d'afficher dans l'IA des widgets qui interrogent directement la base SQL décisionnelle.
Exemple:
SELECT SUM(MAXFAC.MONTANT_FACTURE_NET_DEV) FROM $BI.F_FACTURE_VENTE_LIGNE as MAXFAC WHERE YEAR(MAXFAC.DATE_FACTURE) = YEAR(GETDATE())-1 and MAXFAC.DOSSIER_CODE = @DOSSIER
Action KPI sur widget liste
Une première action consiste à utiliser le paramétrage d'appel de zoom possible dans le fichier de paramétrage. Cette option implique que le champ ID rendu par le widget soit exploitable par le zoom puisque celui-ci le reçoit dans la zone de pilotage Harmony.DataVal.
Une alternative consiste à construire dans la requête SQL une chaîne sous la forme nommodule;nomfonction;liste param séparée par des ';' qui permet d'adresser un module Diva et de faire appel à une fonction tunnel
Exemple: une liste OF construit
GGPMBAS.DHOP;Tunnel_OF_Visualiser;"597"
GGPMBAS.DHOP;Tunnel_OF_Visualiser;"643"
Ce qui permet d'appel la fonction Diva "Tunnel_OF_Visualiser" du module "GGPMBAS.DHOP" avec en paramètre le numéro d'OF à consulter
3 actions différentes sont possibles :
- Sur double-clic gauche: appel de l'action retournée dans le champ ACTIONKPI
- Sur double-clic et touche CTRL : appel de l'action retournée dans le champ ACTIONKPIC
- Sur double-clic et touche SHIFT : appel de l'action retournée dans le champ ACTIONKPIS
L'appel d'une fonction nécessite de respecter des règles
- ; entre les paramètres de la fonction ou procédure
- Pas de constante diva, il faut donner les valeurs
- Mettre des " pour sécuriser les espaces utiles dans les chaînes
Exemple de syntaxe pour ouvrir une pièce
CONCAT('gtpm000.dhop;Tunnel_Piece_Consulter;"', ENT.TICOD , '";' , ENT.PICOD ,
';"',dbo.PIECECONCAT(ENT.PREFPINO ,ENT.PINO), '";1;1') as ACTIONKPI,
Traitement des confidentialités ERP
Il est possible de traiter les confidentialités ERP. Le champ CONF doit être garni avec la confidentialité issue de la requête SQL ou imposée par le paramétrage KPI dans la requête.
Le traitement du champ CONF suit exactement les mêmes règles que dans l'ERP
Utilisation des balises ERROR des widgets
Tous les widgets traitent une balise ERROR
N'est utilisé qu'en l'absence de licence pour l'indiquer dans l'IA
Widgets en mode KPI
L'utilisation du mode KPI permet de convertir des données issues d'une requête SQL en chaine de caractères exploitables par le widget (tel qu'il l'attend).
Pour cela le RESULTAT DE LA REQUETE doit respecter l'ordre et le type des champs. Les champs non retournés par la requête ont une valeur par défaut. Il n'est donc pas nécessaire de retourner TOUS les champs requis par le KPI.
Le nom des champs n'est pas significatif (c'est bien l'ordre des champs) mais il est recommandé de les mettre pour une meilleure lecture de la requête SQL.
Par contre l'ORDRE DES CHAMPS et la NATURE DES CHAMPS sont fondamentaux, à respecter selon le dictionnaire (et pas selon l'aide Runtime)
La première colonne est toujours un ID qui ne figure pas dans le dictionnaire mais il est indispensable à la couche Runtime
FEU / JAUGE
FEU
- (Valeur minimale inutile pour un feu)
- Valeur maximale
- Valeur courante numérique
- Etat (couleur)
- Ecart par rapport à l'objectif
- Valeur courante formatée en texte
- Titre du widget
JAUGE
- Valeur minimale
- Valeur maximale
- Valeur courante numérique
- Etat (couleur)
- Ecart par rapport à l'objectif
- Valeur courante formatée en texte
- Titre du widget
CHAMPS ATTENDUS EN RETOUR DE LA REQUETE SQL
La requête ne doit retourner qu'UNE seule ligne
Nom Libellé Nature | Libellé | Nature |
ID | Identifiant non utilisé | mettre 1 |
CurVal | Valeur courante | Décimal 12,3 |
Text | Texte widget | Chaîne 80 |
State | Couleur 1=vert 2=orange 3=rouge | Entier 1 |
MinVal | Valeur minimale | Décimal 12,3 |
MaxVal | Valeur maximale | Décimal 12,3 |
CurValTxt | Valeur courante formatée | Chaîne 40 |
Spread | Ecart à l'objectif | Chaîne 40 |
Error | Texte d'erreur | Chaîne 100 |
Conf | Confidentialité | Chaîne 4 |
TranslateCol | Liste des numéros de colonnes à traduire séparés par ';' | Chaîne 40 |
LISTE/TABLEAU
Liste
- Texte à afficher
- Titre du widget
- Priorité de l'élément (couleur)
- ActionKPI permettant de déterminer l'action sur double-clic dans le widget
- ActionKPIC permettant de déterminer l'action sur clic dans le widget avec touche CTRL
- ActionKPIS permettant de déterminer l'action sur clic dans le widget avec touche SHIFT
Tableau
- Titre du widget
- Titre de chaque colonne (1 à 8)
- Texte à afficher pour chaque colonne (1 à 8)
- Priorité de l'élément (couleur)
- ActionKPI permettant de déterminer l'action sur double-clic dans le widget
- ActionKPIC permettant de déterminer l'action sur clic dans le widget avec touche CTRL
- ActionKPIS permettant de déterminer l'action sur clic dans le widget avec touche SHIFT
CHAMPS ATTENDUS EN RETOUR DE LA REQUETE SQL
La requête retournera AUTANT de lignes qu'il y en aura à afficher dans le widget. Un widget liste en mode LISTE requiert uniquement les premières colonnes jusqu'à 'Conf', mais l'utilisation des actions avec touches nécessite alors de retourner les colonnes à ''.
Un widget liste en mode TABLEAU n'utilise pas la colonne 'Text' mais celles 'TitleColX' associée à 'TextColX' et 'AlignX'
Nom | Libellé | Nature |
ID | Identifiant utilisé en transmission lors d'une action (clic) | Chaîne |
Title | Titre du widget | Chaîne 40 |
Text | Texte widget si mode liste | Chaîne 80 |
Priority | Priorité (0=aucune, 1=bas, 2=standard, 3=haut) | Entier 1 |
ActionKPI | Action pour KPI liste | Chaîne 200 |
Error | Texte d'erreur | Chaîne 100 |
Conf | Confidentialité | Chaîne 4 |
TitleCol1 | Titre de la colonne 1 si widget tableau | Chaîne 80 |
TextCol1 | Texte de la colonne 1 si widget tableau | Chaîne 80 |
Align1 | Alignement de texte de la colonne 1 si widget tableau | Chaîne 80 |
… | ||
TitleCol9 | Titre de la colonne 9 si widget tableau | Chaîne 80 |
TextCol9 | Texte de la colonne 9 si widget tableau | Chaîne 80 |
Align9 | Alignement de texte de la colonne 9 si widget tableau | Chaîne 80 |
ActionKPIS | Action pour KPI liste avec touche SHIFT | Chaîne 200 |
ActionKPIC | Action pour KPI liste avec touche CTRL | Chaîne 200 |
TranslateCol | Liste des numéros de colonnes à traduire séparés par ';' | Chaîne 40 |
Alignement
G ou L pour un alignement à gauche
D ou R pour un alignement à droite
C pour un alignement centré
GRAPHIQUES
- Type de graphique
- Titre de l'axe horizontal
- Titre de l'axe vertical
- Orientation du graphique (histogramme seulement)
- Palette de couleur à utiliser
- Afficher ou non la légende
- Valeur
- Libellé
CHAMPS ATTENDUS EN RETOUR DE LA REQUETE SQL
Il existe deux modes de fonctionnement, selon que la requête est en mesure de retourner plusieurs valeurs d'une même série ou non. Le choix du graphique impose le nombre de séries :
- Camembert : une seule série
Histogramme ou courbe : plusieurs séries.
Nom
Libellé
Nature
ID
Identifiant non utilisé
Chaîne
TypeGraph
Type de graphique
Chaîne 5
HorizontalAxeTitle
Titre de l'axe horizontal
Chaîne 40
VerticalAxeTitle
Titre de l'axez vertical
Chaîne 40
Orientation
Orientation du graphique
Chaîne 1
Palette
Nom de la palette de couleurs
Chaîne 20
ShowLegend
Affichage de la légende
Entier 1
Serie
Texte de la série
Chaîne 80
Indice
Indice
Entier 2
IndiceValue
Valeur pour l'indice
Décimal 12,3
IndiceText
Texte pour l'indice
Chaîne 40
V01Value
Valeur de la VALEUR1
Décimal 12,3
V01Text
Texte de la VALEUR1
Chaîne 40
…
V20Value
Valeur de la VALEUR20
Décimal 12,3
V20Text
Texte de la VALEUR20
Chaîne 40
TranslateCol
Liste des numéros de colonnes à traduire séparés par ';' Chaîne 40
Chaîne 40
Mode « 0 » de Graphique- Ce mode utilise les champs V01VALUE+V01TEXT jusqu'à V20VALUE+V20TEXT pour chaque ligne résultante de la requête, c'est-à-dire que la requête peut retourner plusieurs valeurs de la série.
- Permet d'écrire une ou plusieurs requête (avec UNION) qui vont remplir les cellules de 1 à 20 pour la série.
- La détection du changement de série effectue la sauvegarde pour le graphique, donc les cellules peuvent être remplies par plusieurs requêtes successives. Les données doivent donc être traitées dans l'ordre des séries.
Exemple : une requête calcule V01 pour un état de départ qui tient compte du passé (par exemple un stock en début d'année) et l'union avec une seconde requête calculer V02 à V012 (par exemple les stocks mensuels).
Mode « 1 » de Graphique
- Ce mode utilise les champs INDICE+INDICEVALUE+INDICETEXT pour chaque ligne résultante de la requête.
- Passe par l'écriture de plusieurs requêtes (avec UNION) qui vont chacune indiquer une cellule individuelle.
- La détection du changement de série effectue la sauvegarde pour le graphique. Les données doivent donc être traitées dans l'ordre des séries.
Exemple : une requête qui nécessite un COUNT ou GROUP BY calcule une cellule à la fois
Options de graphique
Type :
- P pour camembert
- B pour histogramme
- L pour courbes
- Suivi de 0 ou 1 selon le « mode » donc par exemple B1 ou L0
Mode 0 ou 1 de graphique : illustration
Le widget requiert une suite de valeurs par série
S1 : V1 V2 V3 V4
S2 : V1 V2 V3 V4
La requête SQL sert à remplir les séries (sauf camembert qui n'en a qu'une) et les valeurs. Le mode 0 ou 1 change l'interprétation du résultat des requêtes.
Le mode 0 suppose que la requête puisse retourner toutes les valeurs d'une série en une fois. Les différentes séries sont obtenues par UNION entre les requêtes de chaque série
Requête 1 donne S1 : V1 V2 V3 V4
UNION
Requête 2 donne S2 : V1 V2 V3 V4
Le mode 1 permet de renseigner cellule par cellule par UNION des différentes requêtes. Les cellules ne sont pas forcément dans l'ordre.
Requête 1 donne S1 : Indice1 donc V1
UNION
Requête 2 donne S1 : Indice4 donc V4
UNION
Requête 3 donne S1 : Indice2 donc V2
UNION
Requête 4 donne S2 : Indice2 donc V2
Orientation (histogramme uniquement) :
- H pour horizontal
- V pour vertical
Affichage de légende
- 1 pour Oui
- 0 pour Non
Palette de couleurs Windows parmi (voir l'aide runtime) :
Artic, Autumn, Cold, Flower, Forest, Grayscale, Ground, Lilac, Natural, Pastel, Rainbow, Spring, Summer, Warm, Windows8
Vues SQL pour KPI
L'accès aux données au travers des vues SQL est simplifié.
Exemple : lecture du Code dossier, Référence, Désignation, Code nature produit, Libellé nature produit, Classe produit dans la table des ARTICLES
Requête SQL 'directe'
SELECT
ART.DOS AS DOSSIER
,ART.REF AS REFERENCE
,ART.DES AS DESIGNATION
,ART.PRODNAT AS NATUREPRODUIT
,NATURE_PRODUIT.LIB AS NATUREPRODUITLIBELLE
,LEFT(ART.PRODNAT,1) AS CLASSEPRODUIT
FROM ART
LEFT JOIN T000 AS T000 ON T000.DOS = '999 '
LEFT JOIN T036 AS NATURE_PRODUIT ON NATURE_PRODUIT.CEBIN = 36 AND ( NATURE_PRODUIT.DOS =
CASE WHEN T000.TABTYP_0036 = 2 THEN '999 ' ELSE ART.DOS END ) AND NATURE_PRODUIT.PRODNAT =
ART.PRODNAT
ORDER BY DOSSIER,REFERENCE
Requête SQL 'avec utilisation de la vue' (La jointure est déjà prévue)
SELECT
ARTICLE_V.DOSSIER,
ARTICLE_V.REFERENCE,
ARTICLE_V.DESIGNATION,
ARTICLE_V.NATUREPRODUIT,
ARTICLE_V.NATUREPRODUITLIBELLE,
ARTICLE_V.CLASSEPRODUIT
FROM ARTICLE_V
ORDER by DOSSIER,REFERENCE
Requête SQL 'avec utilisation de la vue et jointure' (la jointure n'est pas prévue)
SELECT
ARTICLE_V.DOSSIER,
ARTICLE_V.REFERENCE,
ARTICLE_V.DESIGNATION,
ARTICLE_V.NATUREPRODUIT,
NATURE_PRODUIT.LIBELLE AS NATUREPRODUITLIBELLE,
ARTICLE_V.CLASSEPRODUIT
FROM ARTICLE_V
LEFT JOIN TABLE_NATURE_PRODUIT_V AS NATURE_PRODUIT ON (ARTICLE_V.NATUREPRODUIT =
NATURE_PRODUIT.NATUREPRODUIT AND ARTICLE_V.DOSSIER = NATURE_PRODUIT.DOSC)
ORDER by DOSSIER,REFERENCE
Erreur IA de chargement de widget
Lorsque l'IA charge un widget en erreur en raison de son paramétrage, cela provoque un arrêt de l'IA. Pour corriger, il faut trouver le fichier de configuration de l'IA par utilisateur (NomUtilisateur.config) et le supprimer.
Ce fichier est stocké dans un dossier nommé 'ia' qui est lui-même stocké dans divalto/NOMENVIRONNEMENT.
Exemple : /divalto/erp212/demo.config
Astuces SQL
UNION
Permet le mélange du résultat de plusieurs requêtes successives. Dans ce cas les champs doivent être strictement dans le même ordre et du même type.
RTRIM
Enlève les espaces.
FORMAT(date,'dd/MM/yyyy')
Formate une date.
FORMAT(decimal, 'C', 'fr-fr')
Formate une valeur en montant €.
CONCAT(a,b,c)
Concatène les chaines a et b et c.
COALESCE(a,b,c)
Prend la première valeur trouvée dans l'ordre a puis b puis c.
CAST(champDate as date)
Force la conversion d'un champ Date en date SQL pour comparaison.
CASE WHEN condition1 THEN cas1 ELSE cas2 END
Test de condition.
YEAR(date)
Retourne l'année de la date.
MONTH(date)
Retourne le mois de la date.
RANK() OVER (ORDER BY X) as RANG ......ORDER BY RANG
Attribue un compteur de lignes du select.
dbo.PIECECONCAT(prefpino,pino)
Fonction de concaténation d'un préfixe de pièce avec le numéro de pièce.