Label Décisionnel
Bienvenue, Invité
Merci de vous identifier ou de vous inscrire.    Mot de passe perdu?
Re:cumul sur 2 axes (1 lecteur(s)) (1) Invité(s)
Aller en bas Répondre Ajouté aux favoris : 0
SUJET: Re:cumul sur 2 axes
#1964
sanypad (Utilisateur)
Fresh Boarder
Messages: 5
graphgraph
Personne n'est hors ligne Cliquez ici pour voir le profil de cet utilisateur
cumul sur 2 axes depuis 1 Mois, 3 Semaines Karma: 0  
Bonjour,

nouvelle utilisatrice de Qlikview me voilà confronter aux premières difficultés.

Je dois faire un cumul sur 2 axes : mois et type.
Mon problème est que je n'ai pas des données de chaque type pour chaque mois.
concrètement avec un ex. ce sera plus simple à expliquer :

mes données :
Mois Type Nb
Janv A 1
Janv B 2
Fev A 3
Mars B 1

Résultat souhaité:
Mois Type Cumul
Janv A 1
Janv B 2
Fev A 4
Fev B 2
Mars A 4
Mars B 3

Comment faire pour ajouter le type B à février avec nb=0 et le type A à mars avec nb=0 à mes données ? ensuite, pour le cumul, je m'en sortirai avec la fct peek.

merci pour votre aide.
cdlt,
 
  L'administrateur a désactivé l'accès public en écriture.
#1967
rhooft (Admin)
Administrateur
Messages: 84
graphgraph
Personne n'est hors ligne Cliquez ici pour voir le profil de cet utilisateur
Re:cumul sur 2 axes depuis 1 Mois, 3 Semaines Karma: 5  
bonjour,

les calculs doivent-ils être faits dans le script ou dans l'interface ?
 
  L'administrateur a désactivé l'accès public en écriture.
#1974
sanypad (Utilisateur)
Fresh Boarder
Messages: 5
graphgraph
Personne n'est hors ligne Cliquez ici pour voir le profil de cet utilisateur
Re:cumul sur 2 axes depuis 1 Mois, 3 Semaines Karma: 0  
Bonjour,

je suis partie dans l'idée de le faire en script, mais je suis partante pour toute autre idée de solution.

cdlt,
 
  L'administrateur a désactivé l'accès public en écriture.
#1984
rhooft (Admin)
Administrateur
Messages: 84
graphgraph
Personne n'est hors ligne Cliquez ici pour voir le profil de cet utilisateur
Re:cumul sur 2 axes depuis 1 Mois, 3 Semaines Karma: 5  
ok

pour le faire via le script, l'idée consiste dans un premier temps à créer toutes les combinaisons mois/type (produit cartésien) puis récupérer les données valorisées et enfin faire le cumul des données avec un peek.


pour le faire dans l'interface on peut faire les cumuls en revanche je ne vois comment simplement générer les croisements manquants

espérant que ça aidera...
si vous bloquez sur le scripting dites le moi...
 
  L'administrateur a désactivé l'accès public en écriture.
#1992
sanypad (Utilisateur)
Fresh Boarder
Messages: 5
graphgraph
Personne n'est hors ligne Cliquez ici pour voir le profil de cet utilisateur
Re:cumul sur 2 axes depuis 1 Mois, 3 Semaines Karma: 0  
Bonjour,

je bloque effectivement sur le script.

J'ai une table de données "table_données" qui contient mes données comme préciser plus haut et une table "table_type" qui contient mes 2 types A et B.

voilà mon script :

load Mois
RESIDENT table_données
;
join
load Type
RESIDENT table_type;


CumulType:
LOAD Mois,
Type,
Nb+If(IsNull(Peek( 'Cumul', -2 )),0,Peek( 'Cumul', -2)) AS Cumul
RESIDENT table_données
ORDER BY Mois, Type;


et ci-joint le résultat obtenu

Je veux bien un coup de main pour m'aider à résoudre ce pb.
En vous remerciant,
 
  L'administrateur a désactivé l'accès public en écriture.
#1999
rhooft (Admin)
Administrateur
Messages: 84
graphgraph
Personne n'est hors ligne Cliquez ici pour voir le profil de cet utilisateur
Re:cumul sur 2 axes depuis 1 Mois, 3 Semaines Karma: 5  
l'idée est là mais il faut passer par une table intermédiaire table_tmp qui contient les valeurs nb pour les croisements existants et les autres croisements qui n'ont pas de valeur. il faut ensuite écrire différemment la fonction de cumul.

L'ordre de tri compte également, il faut d'abord trier par type puis par mois, puisque l'objectif est de cumuler les nb au sein d'un même type.
Ne pouvant trier les mois Jan, Fev, Mars car le tri alphabétique les met dans le mauvais ordre, je suis passé par une petite table de correspondance (table_mois) faisant le lien libellé du mois <-> n° du mois

Pour le calcul du cumul : Il faut gérer les ruptures sur le type via la fonction previous() qui renvoie la valeur de l'enregistrement précédent
Attention, le null est absorbant donc null+1=null et non pas 1. D'où if(isnull(Nb) plutôt que sur le cumul

voilà une solution :

table_données:
LOAD * INLINE [
Mois, Type, Nb
Jan, A, 1
Jan, B, 2
Fev, A, 3
Mars, B, 1
];

table_mois:
mapping LOAD * INLINE [
Mois, NumMois
Jan, 1
Fev, 2
Mars, 3
];

table_type:
LOAD * INLINE [
Type,
A,
B
];

//map Mois using table_mois;

table_tmp: // genere un produit cartésien type/mois
load distinct applymap('table_mois', Mois) as NumMois, Mois resident table_données;
join load Type resident table_type;

// récupère pour les croisements existants la valeur de Nb
left join load
Mois, Type, Nb
resident table_données;

// Calcule le cumul sur le champ nb
table:
load
Mois,
Type,
Nb,
If(Type=Previous(Type), if(isnull(Nb),0,Nb)+Peek( 'Cumul' ),if(isnull(Nb),0,Nb)) as Cumul
resident table_tmp
order by Type, NumMois;

drop table table_tmp;
drop table table_données;

La preuve par l'image dans le fichier joint, promis sans tricher ...

Dites mois si ça fonctionne bien chez vous
Fichier attaché :
Nom de fichier : cumul.jpg
Taille de fichier : 9633
 
 
Dernière édition: 09-10-2008 à 23:22 Par rhooft.
  L'administrateur a désactivé l'accès public en écriture.
Revenir en haut Répondre
Développé par FireBoardObtenir les derniers messages directement sur votre PC
Joomla Template by Joomlashack
Joomla Templates by JoomlaShack Joomla Templates