Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bonjour,
Je débute sur Qlikview
Voici ma structure. J'ai :
1 table FACTURE avec toutes les factures (CLIENT, DATE, QTE, ARTICLE, MONTANT FACTURE,.....)
1 table AVOIR avec tous les avoirs ((CLIENT, DATE, QTE, ARTICLE, MONTANT AVOIR,.....)
1 table CLIENT avec tous les clients (CLIENT, ADRESSE, N° TEL, VENDEUR,.......)
Donc j'ai :
CLIENT en liaison avec FACTURE et en liaison avec AVOIR avec comme clé le champ CLIENT
Le but :
Avoir un tableau regroupement la somme des MONTANT FACTURE + MONTANT AVOIR par client, vendeur, article et par année trimestre mois
Problème :
Dans mon tableau, j'utilise le champ DATE de la table FACTURE. Du coup, les données de la table AVOIR ne sont pas prises en compte.
Avez vous une façon de faire? Faut'il passer par une gestion d'un calendrier et lier les tables FACTURE et AVOIR avec ce calendrier? Si oui, comment créer ce calendrier?
Merci d'avance
Mathieu
Bonjour,
Regarde le code suivant,ça devrait t'aider.
FACTURE :
load
date(trim(DATE),'DD/MM/YYYY') as DATE,
champ2,
....
ChampN
From FACTURE ;
AVOIR :
load
date(trim(DATE),'DD/MM/YYYY') as DATE,
champ2,
....
ChampN
From AVOIR ;
// *************** CALENDRIER*******************************************
DATES_TEMP:
LOAD distinct date(trim(DATE),'DD/MM/YYYY') as DATE
RESIDENT FACTURE WHERE (len(DATE)>0);
LOAD distinct date(trim(DATE),'DD/MM/YYYY') as DATE
RESIDENT AVOIR WHERE (len(DATE)>0);
NoConcatenate
DATES:
Load distinct date(DATE) as QUERY_DATE
RESIDENT DATES_TEMP
ORDER BY KEY_DATE ASC;
drop table DATES_TEMP;
LET varMinDate = round(Num(Peek('QUERY_DATE', 0,'DATES')));
LET varMaxDate = round(Num(Peek('QUERY_DATE', -1,'DATES')));
TEMPCALENDRIER:
LOAD $(varMinDate) + rowno() - 1 AS Num,
date($(varMinDate) + rowno() - 1) AS TempDate
AUTOGENERATE $(varMaxDate) - $(varMinDate) + 1;
CALENDRIER:
LOAD distinct trim(date(TempDate)) AS DATE,
Week(TempDate) AS SEMAINE,
Year(TempDate) AS ANNEE,
Month(TempDate) AS MOIS,
Day(TempDate) AS JOUR,
Weekday(TempDate) AS JOUR_SEMAINE,
'T' & ceil(month(TempDate) / 3) AS TRIMESTRE,
MonthName(TempDate) AS MOIS_ANNEE,
Week(TempDate)&'-'&Year(TempDate) AS SEMAINE_ANNEE
RESIDENT TEMPCALENDRIER ORDER BY TempDate ASC;
La date du calendrier étant la table de référence et celle que doit prendre au niveau de ton axe d'analyse temporel.
Lorsqu'on fait une sélection au niveau de l'axe d'analyse, alors tout ce qui est en rapport avec cette selection réagit et se met à jour pour cette sélection ( Technologie associative ) . De ce fait, quand tu sélectionne une date au niveau du calendrier , c'est comme si tu avais sélectionné la même date dans tes différentes tables chargées.
Tu peux aller sur le lien http://community.qlik.com/thread/80141?tstart=0
pour avoir d'amples informations
j'ai trouvé ça hier et ça marché j espère que ça t aidera c simple et efficace : il se base sur les délclencheur :
Pour sélectionner une période entre deux dates quelconques, sans analysis set ni macro :
1. Créer deux tables DatesDebut et DatesFin, contenant les dates.
2. Ajouter un trigger sur la sélection de DatesDebut et DatesFin sélectionnant la plage correspondante dans la dimension temps principale (détail ci-dessous).
3. Ajouter deux sliders de style « Calendar » pour DatesDebut et DatesFin.
4. C'est prêt !
Je reprends en détail :
1.
DatesDebut:
LOAD date as date_debut resident calendar;
DatesFin:
LOAD date as date_fin resident calendar;
Les deux tables ne sont pas liées à d'autres.
2.
Ouvrir les propriétés du document grâce au menu « Settings > Document Properties... » et aller dans l'onglet des déclencheurs (« Triggers »).
Dans la liste « Field Event Triggers » (événements sur champs), sélectionner date_debut et ajouter une action sur le « OnSelect », de type « Select in Field ». Dans Field, mettez "date" (le nom du champ date dans la dimension temps) et dans Search String, l'expression suivante :
= if(not isnull(getfieldselections(date_debut)),
if(min(date_debut) > max(date_fin),
'=' & min(date_debut),
'>=' & min(date_debut) & '<=' & max(date_fin)))
Faites de même avec le champ date_fin, avec l'expression :
= if(not isnull(getfieldselections(date_fin)),
if(min(date_debut) > max(date_fin),
'=' & min(date_debut),
'>=' & min(date_debut) & '<=' & max(date_fin)))
Si les deux bornes sont sélectionnées et dans le bon ordre, la sélection comprendra toutes les dates entre ces deux bornes. Si une seule borne est sélectionnée, on trouvera seulement les dates situées au-dessus ou au-dessous de la borne.
3.
Avec le style « Calendar », l'utilisateur saisit une date au format jj/mm/aaaa à l'aide d'un calendrier. C'est le plus commode car le style « Slider » ne donne pas de bons résultats avec un champ date (illisible à cause de la graduation).
Une macro fait l'affaire également mais les triggers sont infiniment plus rapides.
Bonjour,
Regarde le code suivant,ça devrait t'aider.
FACTURE :
load
date(trim(DATE),'DD/MM/YYYY') as DATE,
champ2,
....
ChampN
From FACTURE ;
AVOIR :
load
date(trim(DATE),'DD/MM/YYYY') as DATE,
champ2,
....
ChampN
From AVOIR ;
// *************** CALENDRIER*******************************************
DATES_TEMP:
LOAD distinct date(trim(DATE),'DD/MM/YYYY') as DATE
RESIDENT FACTURE WHERE (len(DATE)>0);
LOAD distinct date(trim(DATE),'DD/MM/YYYY') as DATE
RESIDENT AVOIR WHERE (len(DATE)>0);
NoConcatenate
DATES:
Load distinct date(DATE) as QUERY_DATE
RESIDENT DATES_TEMP
ORDER BY KEY_DATE ASC;
drop table DATES_TEMP;
LET varMinDate = round(Num(Peek('QUERY_DATE', 0,'DATES')));
LET varMaxDate = round(Num(Peek('QUERY_DATE', -1,'DATES')));
TEMPCALENDRIER:
LOAD $(varMinDate) + rowno() - 1 AS Num,
date($(varMinDate) + rowno() - 1) AS TempDate
AUTOGENERATE $(varMaxDate) - $(varMinDate) + 1;
CALENDRIER:
LOAD distinct trim(date(TempDate)) AS DATE,
Week(TempDate) AS SEMAINE,
Year(TempDate) AS ANNEE,
Month(TempDate) AS MOIS,
Day(TempDate) AS JOUR,
Weekday(TempDate) AS JOUR_SEMAINE,
'T' & ceil(month(TempDate) / 3) AS TRIMESTRE,
MonthName(TempDate) AS MOIS_ANNEE,
Week(TempDate)&'-'&Year(TempDate) AS SEMAINE_ANNEE
RESIDENT TEMPCALENDRIER ORDER BY TempDate ASC;
La date du calendrier étant la table de référence et celle que doit prendre au niveau de ton axe d'analyse temporel.
Lorsqu'on fait une sélection au niveau de l'axe d'analyse, alors tout ce qui est en rapport avec cette selection réagit et se met à jour pour cette sélection ( Technologie associative ) . De ce fait, quand tu sélectionne une date au niveau du calendrier , c'est comme si tu avais sélectionné la même date dans tes différentes tables chargées.
Tu peux aller sur le lien http://community.qlik.com/thread/80141?tstart=0
pour avoir d'amples informations