Skip to main content
Announcements
See why Qlik is a Leader in the 2024 Gartner® Magic Quadrant™ for Analytics & BI Platforms. Download Now
cancel
Showing results for 
Search instead for 
Did you mean: 
flochi75
Creator III
Creator III

Calculer des montants en fonction d'un nombre de jour (durée)

Bonjour,

j'aimerai identifier les séjours SSR qui ont une durée de séjour vers la fin de la Zone Forfaitaire (plateau), et pouvoir calculer les montants par jour en fonction du nombre de jour du séjour.

pour être plus clair, à parti des GMT :

Capture.JPG

pouvoir construire qqch comme ça :

Capture2.JPG

sachant que

J1 = MNT_JOUR_SZB

J2 = J1+MNT_JOUR_SZB

J3 = J2+MNT_JOUR_SZB

.

.

.

.

J9 = PRIX

J10=PRIX.

.

.

.

J29 = PRIX+MNT_JOUR_SZH

J30 = J29+MNT_JOUR_SZH

.

.

Bien sûr, les bornes "Bas" et "Haut" diffèrent d'un GMT à l'autre...

Merci d'avance

PS : je vous joins la table GMT

Florent

1 Solution

Accepted Solutions
christophebrault
Specialist
Specialist

Bonjour Florent,

Voici un script qui, à partir de ta table, construit une dimension avec  une durée (Jours) et le CODE_GMT, avec le prix en vigueur sur chaque jours.

TEMP:

LOAD

    BAS,

    CODE_GME,

    CLECODEGM,

    CODE_GMT,

    HAUT,

    LIBELLE_GMT,

    MNT_JOUR_EXH,

    MNT_JOUR_SZB,

    MNT_JOUR_SZH,

    PRIX,

    PRIX_ZB

FROM [lib://dl/PMSI_LIB_SSR_GMT.QVD]

(qvd);


TABLE:

load iterno() as Jours,

if(iterno()<=BAS,MNT_JOUR_SZB,

     if(IterNo()<=HAUT+1,PRIX,

        PRIX+MNT_JOUR_SZH)) as Tarif,

BAS,

HAUT,

CODE_GMT,

//     MNT_JOUR_EXH,

//     MNT_JOUR_SZB,

     MNT_JOUR_SZH

//     PRIX,

//     PRIX_ZB

resident TEMP

While iterno()<=100; // La durée Max est définie ici

  drop table TEMP;

 

Dim_TarifsParDurée:

LOAD Jours,

  CODE_GMT,

     Tarif,

     If(rowno()=1 or peek(CODE_GMT)<>CODE_GMT,Tarif,

     If(peek(CODE_GMT)=CODE_GMT,

        If(Jours>BAS and Jours <=HAUT,Tarif,

            If(Jours>=HAUT,Tarif+peek(CUM),

            Tarif+peek(Valorisation)

                    )

               )

           )

        )as Valorisation,

        if(Jours<HAUT,0,

        if(Jours=HAUT+1,MNT_JOUR_SZH,peek(CUM)+MNT_JOUR_SZH)) as CUM

//         If(Jours=HAUT,Tarif+MNT_JOUR_SZH,

//         if(Jours>HAUT,peek(CUM)+Tarif)) as TarifHaut

Resident TABLE

Order By CODE_GMT,Jours asc;

drop table TABLE;

Drop fields CUM,Tarif;

Inscrivez vous à ma Newletter Qlik
DoNotMissQlik- Connect with me on Linkedin

View solution in original post

9 Replies
ogautier62
Specialist II
Specialist II

Bonjour,

sauf erreur si j'ai bien compris :

le prix en fonction du nb de jours est :

rangemin(BAS,nbjours_sejour) * MNT_JOUR_SZB + rangemax(0, nbjours_sejour - HAUT) * MNT_JOUR_SZH

cdt

christophebrault
Specialist
Specialist

Bonjour Florent,

Voici un script qui, à partir de ta table, construit une dimension avec  une durée (Jours) et le CODE_GMT, avec le prix en vigueur sur chaque jours.

TEMP:

LOAD

    BAS,

    CODE_GME,

    CLECODEGM,

    CODE_GMT,

    HAUT,

    LIBELLE_GMT,

    MNT_JOUR_EXH,

    MNT_JOUR_SZB,

    MNT_JOUR_SZH,

    PRIX,

    PRIX_ZB

FROM [lib://dl/PMSI_LIB_SSR_GMT.QVD]

(qvd);


TABLE:

load iterno() as Jours,

if(iterno()<=BAS,MNT_JOUR_SZB,

     if(IterNo()<=HAUT+1,PRIX,

        PRIX+MNT_JOUR_SZH)) as Tarif,

BAS,

HAUT,

CODE_GMT,

//     MNT_JOUR_EXH,

//     MNT_JOUR_SZB,

     MNT_JOUR_SZH

//     PRIX,

//     PRIX_ZB

resident TEMP

While iterno()<=100; // La durée Max est définie ici

  drop table TEMP;

 

Dim_TarifsParDurée:

LOAD Jours,

  CODE_GMT,

     Tarif,

     If(rowno()=1 or peek(CODE_GMT)<>CODE_GMT,Tarif,

     If(peek(CODE_GMT)=CODE_GMT,

        If(Jours>BAS and Jours <=HAUT,Tarif,

            If(Jours>=HAUT,Tarif+peek(CUM),

            Tarif+peek(Valorisation)

                    )

               )

           )

        )as Valorisation,

        if(Jours<HAUT,0,

        if(Jours=HAUT+1,MNT_JOUR_SZH,peek(CUM)+MNT_JOUR_SZH)) as CUM

//         If(Jours=HAUT,Tarif+MNT_JOUR_SZH,

//         if(Jours>HAUT,peek(CUM)+Tarif)) as TarifHaut

Resident TABLE

Order By CODE_GMT,Jours asc;

drop table TABLE;

Drop fields CUM,Tarif;

Inscrivez vous à ma Newletter Qlik
DoNotMissQlik- Connect with me on Linkedin
flochi75
Creator III
Creator III
Author

Merci Olivier,

ça fonctionne parfaitement pour une durée déterminée.

je vais garder cette syntaxe pour faire une simulation.

Mais je voudrais vraiment faire la courbe, et y insérer un curseur de la moyenne de mes durées de séjours par GME pour savoir ou je me situe par rapport au plateau...

Florent

flochi75
Creator III
Creator III
Author

Bonjour Christophe,

ça fonctionne parfaitement.

Avant de valider, je voudrais pourvoir inscrire les valeurs uniquement pour BAS et HAUT

et placer un curseur (rouge) pour indiquer ou on se situe en terme de DMS...Capture.JPG

est-ce faisable ?

Merci.

Florent

christophebrault
Specialist
Specialist

Bonjour Florent,

Pour marquer les valeurs, quand tu déplies l'expression, tu ajoute ceci dans "Afficher la Valeur"

(J'ai ajouté les champs BAS et HAUT dans la dimension)

if(Jours=only(BAS) or Jours=Only(HAUT),1,0)

Pour le DMS, je ne crois pas possible de mettre une ligne sur l'abscisse avec ce graphique. Tu peux peut être mettre une autre expression sous forme de symbole, avec la couleur en condition :

comFLO.PNG

J'ai mis la valeur en dur, il faut récupérer la valeur de ton calcul de DMS et sans doute le passer par une variable pour que ça marche

Mon appli en pj

Inscrivez vous à ma Newletter Qlik
DoNotMissQlik- Connect with me on Linkedin
flochi75
Creator III
Creator III
Author

Un grand merci Christophe,

c'est déjà parfait comme ça.

Bravo.

Florent

flochi75
Creator III
Creator III
Author

Bonjour Christophe,

j'ai une bizarrerie sur certains GMT :

Capture.JPG

le calcul du tableau est faut, le plateau n'est pas correct. Pourtant c'est le cas la plupart du temps...

Merci pour ton retour.

Florent

ogautier62
Specialist II
Specialist II

Hello,

dans le load on prend prix pour le palier,

hors tes données ne sont pas cohérentes car prix <> bas * mt_szb

flochi75
Creator III
Creator III
Author

Bonjour Olivier,

effectivement, 50 (BAS) *199.70 € = 9985,00 € ce qui correspond au montant de la borne basse (BAS), et oui, le prix du plateau n'est pas de ce montant;

ce sont des données officielles, brutes, je n'ai pas la main dessus.

il doit s'agir d'une atypie.

c'est donc pour moi un point de vigilence.

Merci Olivier.