Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
dmap_jacky
Contributor III
Contributor III

Set Analysis une mesure qui calcul entre deux dates

Bonjour

Ma difficulté est d'avoir une mesure qui calcul la somme de l'objectif sur la période de vente

Soit deux tables

T_Obj les champs sont date_Obj , Obj_jour             / Objectif journalier du trimestre

T_Vte les champs sont date_Vte , Vente_jour          / Ventes journalier du début du trimestre à une date dans le trimestre

J'ai tenté cette solution infructeuse

Sum({<date_Obj= {"<$(Max(Date_vte))"> } Obj_jour)

1 Solution

Accepted Solutions
dmap_jacky
Contributor III
Contributor III
Author

Mes remerciements à Christophe

La solution sans avoir recours au set Analysis est de passer par un flag avec une conversion de la date en numérique.

Soit


//Ventes contient les ventes du début de l'année à la date du jour

Ventes :
LOAD
    Date_detail as Date_Vte,
    num( Date_detail) as DateN_Vte,
    ZoneQlik as Zone_Vte,
    BriqueQlik as Brique_Vte,
    ZoneQlik & '|' & BriqueQlik & '|' & Date_detail as KeyBase,
     Money(Vte,'# ##0, €') as Vte
   
FROM [lib://SourcesXLS/Ventes.xlsx]
(ooxml, embedded labels, table is Requête5);

//variable Date en nombre
Date_Temp:
LOAD
Max(DateN_Vte) as MaxDate
Resident Ventes;

Let vMaxDateVente = num(Peek('MaxDate'));
Drop Table Date_Temp;

Right Join  //la jointure permet d'éliminer les ventes avant le 1er avril


// la table objectifs contient les objectifs du T2
Objectifs :

LOAD
    num(Date_d) as Date_Obj,
    ZoneQlik as Zone_Obj,
    BriqueQlik as Brique_Obj,
    ZoneQlik & '|' & BriqueQlik & '|' & Date_d as KeyBase,
    // permet le marquage des objectifs de la période de vente du trimestre
    if(num(Date_d) <= $(vMaxDateVente),1,0) as Flag_Obj,
     Money(ObjectifJour,'# ##0, €') as ObjectifJour
   
FROM [lib://SourcesXLS/Objectif.xlsx]
(ooxml, embedded labels, table is Requête6);

-------------------------------------------------------------------------------

Pour le set Analysis, je vais tester une formule en travaillant sur le numérique de la date, en reprenant la proposition de Sunny Talwar

View solution in original post

11 Replies
sunny_talwar

May be try this

Sum({<date_Obj= {"<$(=Max(Date_vte))"}>} Obj_jour)

dmap_jacky
Contributor III
Contributor III
Author

I have a value but  it's not good, ce n'est pas bon

j'obtiens la somme de l'objectif complet

Explication

Avec toutes les dates de ventes dans les deux variables j'ai   64.102 k€

Qlik2.PNG

Sans sélection de date

Je devrais avoir  105.806k€ et  64.102k€  soit l'objectif du trimestre et l'objectif sur période des ventes

qlik3.PNG

sunny_talwar

How about this

Sum({<date_Obj= {"<$(=Date(Max(Date_vte), 'DD/MM/YYYY'))"}>} Obj_jour)

dmap_jacky
Contributor III
Contributor III
Author

Le résultat reste à 105.806k€.

la modification proposée est de forcer le format de la date.

Comment écrire directement la date. mais deux essais

Sum({<$date_Obj ={"<=07/08/2018"}>} Obj_Jour) ou

Sum({<$date_Obj ={"<=#07/08/2018#"}>} Obj_Jour) donne toujours le résultat de 105.806k€

Sorry it's not good.  I have 105.806k€  

the proposed change is to force the format of the date

How to write a formula with the date? My two test

Sum({<$date_Obj ={"<=07/08/2018"}>} Obj_Jour)  or Sum({<$date_Obj ={"<=#07/08/2018#"}>} Obj_Jour)   it's not good i have 105.806k€.

christophebrault
Specialist
Specialist

Bonjour,

Si j'ai bien compris, tu veux calculer l'objectif dont les dates sont inférieures ou égales à la date de vente. Soit, montrer un objectif au fur et à mesure que l'on avance dans le temps.

Pour cela, une solution assez simple est de mettre un flag dans le script sur le champs date_Obj.

//Tu charges ta table des ventes

Ventes:

LOAD Date_vte,

           ...

from ... ;

//Tu stocke la date max dans une variable depuis ta table

Date_Temp:

LOAD Max(Date_vte) as MaxDate

Resident Ventes;

// Tu la  récupère dans une variable

Let vMaxDateVente = Peek('MaxDate');

// Tu charge la table objectif (sans doute en la concaténant aux ventes pour avoir une table de fait ?) :

concatenate(Ventes)

LOAD date_Obj,

           Obj_jour,

     // Tu ajoutes un champs Flag_Obj en fonction de la date

          if(date_Obj <= '$(vMaxDateVente )',1,0) as Flag_Obj ,

...

From ... ;

Dans ta mesure, tu fais simplement :

Sum({$<Flag_Obj = {1}>}Obj_jour)

Sinon, j'essairai le set analysis suivant :

Sum({$<date_Obj= {"<=$(=Date(Max({$<Vente_jour = {">0"}>}Date_vte)))"}>}Obj_jour)

Inscrivez vous à ma Newletter Qlik
DoNotMissQlik- Connect with me on Linkedin
dmap_jacky
Contributor III
Contributor III
Author

Bonjour Christophe,

Et merci d'avoir regardé ma question.

Oui j'ai besoin d'avoir l'objectif de la période vente pour calculer une prévision par ObjectifpériodeVte/Objectif


Je n'ai pas fait de concatenate entre les deux tables.

J'ai crée une clé commune qui permet d'avoir une liaison.


En ce qui concerne ta proposition de formule , n' exige-t-elle pas  d'avoir des ventes tous les jours d'objectifs.

Dans mes sources, il y a des objectifs sans vente et des ventes sans objectifs.


Comme je ne suis pas parvenue à joindre dans  ce post mon exemple,

j'ai posté de nouveau ma question  avec un zip joint (deux fichiers excel, le script de load et la présentation Sense)


Je vais creuser l'idée du flag. J'avais précédemment via le gestionnaire de QlikSense utiliser une table avec un champ Objectif vente du jour tous cela préalablement fait sous Access (très simple).

Pour ajouter un champ qui ce calcul via une autre table, c'est l'option mapping du load qui faut utiliser?

dmap_jacky
Contributor III
Contributor III
Author

Je viens d'essayer la partie flag en prenant ma base école.

(deux fichiers excel).

Le résultat est un flag toujours à 0

Ventes :
LOAD
    Date_detail as Date_Vte,
    ZoneQlik as Zone_Vte,
    BriqueQlik as Brique_Vte,
    ZoneQlik & '|' & BriqueQlik & '|' & Date_detail as KeyBase,
     Money(Vte,'# ##0, €') as Vte
   
FROM [lib://SourcesXLS/Ventes.xlsx]
(ooxml, embedded labels, table is Requête5);

Date_Temp:

LOAD Max(Date_Vte) as MaxDate

Resident Ventes;

 

// Tu la  récupère dans une variable

Let vMaxDateVente = Peek('MaxDate',0,Date_Temp);


Concatenate (Ventes)
Objectifs :

LOAD
    Date_d as Date_Obj,
    ZoneQlik as Zone_Obj,
    BriqueQlik as Brique_Obj,
    ZoneQlik & '|' & BriqueQlik & '|' & Date_d as KeyBase,
    if(Date_d <= '$(vMaxDateVente )',1,0) as Flag_Obj,
     Money(ObjectifJour,'# ##0, €') as ObjectifJour
   
FROM [lib://SourcesXLS/Objectif.xlsx]
(ooxml, embedded labels, table is Requête6);

Drop Table Date_Temp


christophebrault
Specialist
Specialist

bonjour,

dans la v ariable il faut écrire :

Let vMaxDateVente = Peek('MaxDate',0,'Date_Temp');

Tu peux aussi simplement mettre :

Let vMaxDateVente = Peek('MaxDate');

Les paramètre 2 et 3 de Peek sont optionnels, et le champs MaxDate n'existe que dans une seule table, avec une seule ligne, donc pas de risque d'erreur.

Pour controler pourquoi le flag est à 0, examine le contenu de la variable aussi

Inscrivez vous à ma Newletter Qlik
DoNotMissQlik- Connect with me on Linkedin
dmap_jacky
Contributor III
Contributor III
Author

Merci Christophe pour l'usage de l'instruction Peek.

La Table Date_Temp indique  MaxDate =43258  et Date_Vte  01/01/2018

Un problème de format? Max convertir en nombre?

J'ai vérifié mes données dates dans la partie ventes et objectifs

le format est celui d'une date.

J'ai tenté de mettre les champs date _Obj et MaxDate en numerique en mettant num()

soit le code

Ventes :
LOAD
    Date_detail as Date_Vte,
    ZoneQlik as Zone_Vte,
    BriqueQlik as Brique_Vte,
    ZoneQlik & '|' & BriqueQlik & '|' & Date_detail as KeyBase,
     Money(Vte,'# ##0, €') as Vte
   
FROM [lib://SourcesXLS/Ventes.xlsx]
(ooxml, embedded labels, table is Requête5);

Date_Temp:

LOAD Max(Date_Vte) as MaxDate

Resident Ventes;

// Tu la  récupère dans une variable

Let vMaxDateVente = num(Peek('MaxDate'));

Trace $(vMaxDateVente);
Concatenate (Ventes)
Objectifs :

LOAD
    num(Date_d) as Date_Obj,
    ZoneQlik as Zone_Obj,
    BriqueQlik as Brique_Obj,
    ZoneQlik & '|' & BriqueQlik & '|' & Date_d as KeyBase,
    if(Date_d <= '$(vMaxDateVente )',1,0) as Flag_Obj,
     Money(ObjectifJour,'# ##0, €') as ObjectifJour
   
FROM [lib://SourcesXLS/Objectif.xlsx]
(ooxml, embedded labels, table is Requête6);

// Drop Table Date_Temp

Résultat infructueux

Si je remplace dans le if la variable par la valeur

  if(Date_d <= '43258',1,0) as Flag_Obj,

le marquage de 1 et o s'effectue parfaitement.

Le trace me permet de lire le contenue de la variable vMaxDateVente  = 43258

Vraiment je ne comprends pas pourquoi avec la variable je ne parviens à mettre le flag.

Ci-joint ma première version