Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bonjour,
Nouveau sur l'environnement Qlikview, je me confronte à un problème. Dans ma table je dispose d'une date d'enregistrement que j'ai transformé en mois via la fonction Month()pour récupérer le mois. Je dispose également d'un mode de réclamation.
Je souhaite faire apparaitre dans un tableau (graphique) le nombre de réclamation par mois même si je ne dispose pas d'enregistrement pour un mois donné sur un site (que j'ai dans une liste de sélection).
J'ai donc créer un tableau croisé dynamique avec 2 dimensions : une avec le mode de réclamation et l'autre avec les mois (que j'ai transposé en horizontale pour un confort de lecture). J'ai coché l'option "Affiché toute les valeurs" pour mes deux dimensions et décohé supprimer les valeurs null dans l'onglet présentation.
Pour mon expression j'ai réalisé un comptage avec la fonction Count(). J’obtiens le résultat voulu à part qu'il me créer des valeurs sous forme de tiré dans mes dimensions (voir capture d'écran)
Comment empêcher cela ?
J'espère avoir été le plus claire possible n'hésitez pas si des précision sont nécessaire
Merci pour votre aide
Bonjour Mambi Badi,
Cela ne résous pas mon problème de départ qui est d'afficher des valeurs dans le tableau au niveau des dimensions. Par contre le Script de Bruno est parfait mais je ne l'ai pas compris dans son intégralité donc si il y a une âmes pour m'expliquer cela je suis preneur
// Création table intermédiaire à partir des données sources
Réclamation2 : // nom donnée à la table
LOAD
[Fiche de suivi n°],
[Ouverture Date],
month ([Ouverture Date]) as Mois,
[Mode de réclamation],
Site
FROM
(txt, codepage is 1252, embedded labels, delimiter is ';', msq, header is 7 lines);
// création de la table de travail
Réclamation:
LOAD
Mois &'_'& [Mode de réclamation] &'_'& Site as Clef,
[Fiche de suivi n°],
[Mode de réclamation],
Mois,
Site
Resident Réclamation2;
Drop Table Réclamation2; // suppression de la table des données sources
MoisSiteMode: // création d'une table pour créer les données manquantes
Load Distinct // Qui peut m'éclairer sur le Distinct
Mois
Resident Réclamation;
Outer Join (MoisSiteMode) Load Distinct // Qui peut m'éclairer sur le Outer join
Site
Resident Réclamation;
Outer Join (MoisSiteMode) Load Distinct
[Mode de réclamation]
Resident Réclamation;
Concatenate (Réclamation) Load // Qui peut m'éclairer sur concatenate
Mois,
[Mode de réclamation],
Site
Resident MoisSiteMode
Where not Exists(Clef, Mois &'_'& [Mode de réclamation] &'_'& Site); // qui peut m'éclairer sur cette instruction
Drop Table MoisSiteMode; // suppression de la table pour la création des données manquantes
Drop Field Clef; // suppression de la "CLEF" créée
J'ai juste adapter le code pour moi
Bonjour, Thomas.
Voici une explication:
//Création de la table de donnés sources avec la clé
Réclamation:
Load
Month([Ouverture Date]) &'_'& [Mode de réclamation] &'_'& Site as Clé,
[Fiche de suivi n°],
[Ouverture Date],
Month([Ouverture Date]) as Mois,
[Mode de réclamation],
Site
From
(txt, codepage is 1252, embedded labels, delimiter is ';', msq, header is 7 lines);
MoisSiteMode: // création d'une table pour créer les données manquantes
/* Distinct est un prédicat utilisé pour charger uniquement
le premier enregistrement en cas de doublons. */
Load Distinct // Charger chaque Mois sole une fois.
Mois
Resident Réclamation;
/* Le préfixe join joint la table chargée à une table nommée existante ou à la dernière
table de données créée. La jointure est une Jointure naturelle effectuée sur tous les
Champs communs. Le préfixe join peut être précédé d'un des préfixes Inner, Outer, Left ou Right. */
/* Le préfixe explicite Join peut être précédé du préfixe outer pour spécifier une jointure externe.
Dans une jointure externe, toutes les combinaisons entre les deux tables sont générées.
De ce fait, la table résultante contient uniquement des combinaisons de valeurs de champs
provenant des tables de données brutes où les valeurs des champs de liaison sont représentées
dans une ou les deux tables. Le mot-clé outer est facultatif. */
Outer Join (MoisSiteMode) Load Distinct // Charger chaque Site sole une fois.
Site // Comme il n'y a pas champs égaux,
Resident Réclamation; // nous avons toutes les combinaisons de Mois et Site.
Outer Join (MoisSiteMode) Load Distinct // Toutes les combinaisons de Mois, Site et Mode
[Mode de réclamation]
Resident Réclamation;
/*Concatenate: Si deux tables à concaténer disposent d'ensembles de Champs différents,
il est tout de même possible de forcer la Concaténation à l'aide du préfixe Concatenate.
Cette instruction force la concaténation avec une table existante et nommée ou avec la
dernière Table logique créée. En principe, une concaténation équivaut à une instruction SQL UNION,
à deux différences près : tout d'abord, le préfixe Concatenate s'utilise,
que les tables contiennent des noms de champs identiques ou non et, deuxièmement,
aucune suppression d'enregistrements identiques n'est effectuée.*/
Concatenate (Réclamation) Load
Mois,
[Mode de réclamation],
Site
Resident MoisSiteMode
Where not Exists(Clé, Mois &'_'& [Mode de réclamation] &'_'& Site); // Ne charger pas les combinaisons existantes
/* Exists(champ [ , expression ] 😞 Détermine si une valeur de champ donnée existe dans un champ
parmi les données déjà chargées. Field est un nom ou une expression de chaîne qui donne un nom de champ.
Le champ doit exister dans les données chargées jusque-là par le script.
Expr est une expression qui fournit la valeur à chercher dans le champ spécifié.
Si elle est omise, c'est la valeur de l'enregistrement actif dans le champ spécifié qui est utilisée. */
Drop Table MoisSiteMode; // suppression de la table pour la création des données manquantes
Drop Field Clef; // suppression de la Clé créée
Cordialement
Bonjour Bruno,
Merci pour votre retour qui va me permettre de progresser grace a ces explications.