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: 
JenniferBettiol
Partner - Contributor II
Partner - Contributor II

Enregistrement variable dans QVD

Bonjour à tous,

J'aurais besoin d'aide pour réaliser un développement concernant une application de suivi des données. J'aimerais enregistrer la valeur d'une variable à 17h ainsi que la date du jour dans un fichier QVD afin d'avoir un historique de cette valeur tous les jours à la même heure, donc du type :

Date            | Valeur

19-04-2018 | 105,50

20-04-2018 | 120.54

21-04-2018 |  98.60

22-04-2018 | 101.01

23-04-2018 | 97.85

...


Le souci que je rencontre, c'est que ce sont les formules qui sont enregistrées et non la valeur de celles ci,  car j'ai bien conscience que la valeur de la variable en elle même n'est disponible qu'une fois l'exécution du script terminé...

NoConcatenate

StoreData:

LOAD

'$(Var1)' as [Data1],

'$(Var2)' as [Data2],

Today() as Date

AutoGenerate 1;

Je ne sais pas comment contourner ce problème...

Merci,

Jenny

11 Replies
sfatoux72
Partner - Specialist
Partner - Specialist

Peux-tu donner les expressions de Var1 et de Var2 ?

JenniferBettiol
Partner - Contributor II
Partner - Contributor II
Author

Bonjour,

Je ne sais pas si ça va aider, ce sont des expressions complexes

(le contenu s'affiche correctement dans un objet texte dans l'application )

VAR 1 :

Set vTotalHeuresTech = (sum( {< DB_SAV_Ended = {0}, Doc_Version_No = {99}, TT_IsInJPlus2 = {1}, DB_SC_Type = {1}, TT_Status = {'*'} - {4} >} TT_HoursQty) + count( distinct {< DB_SAV_Ended = {0}, Doc_Version_No = {99}, SLA_IsInJPlus2 = {1}, NbTSbyTask = {0}, isUrgent = {0}, DB_SC_Type = {1} >} Doc_No) * ( $(CoefInc)) + count( distinct {< DB_SAV_Ended = {0}, Doc_Version_No = {99}, SLA_IsInJPlus2 = {1}, NbTSbyTask = {0}, isUrgent = {1}, DB_SC_Type = {1} >} Doc_No) * ( $(CoefInc)) + sum( {< DB_SAV_Ended = {0}, NbSC_type = {1}, Doc_Version_No = {99}, TT_IsInJPlus2 = {1}, NbTSbyTask = {">0"}, DB_C_Code = {*} -{'D09','M07','S11'}, DB_SC_Type = {2}, TT_Status = {*} - {4} >} TT_HoursQty) + count( distinct {< DB_SAV_Ended = {0}, NbSC_type = {1}, Doc_Version_No = {99}, SLA_IsInJPlus2 = {1}, NbTSbyTask = {0}, DB_C_Code = {*} -{'D09','M07','S11'}, isUrgent = {0}, DB_SC_Type = {2} >} Doc_No) * ( $(CoefChg)) + count( distinct {< DB_SAV_Ended = {0}, NbSC_type = {1}, Doc_Version_No = {99}, SLA_IsInJPlus2 = {1}, NbTSbyTask = {0}, DB_C_Code = {*} -{'D09','M07','S11'}, isUrgent = {1}, DB_SC_Type = {2} >} Doc_No) * ( $(CoefChg)) + sum({< DB_EndedCall = {0}, DB_IMAC_Ended = {0}, Doc_Version_No = {99}, HeuresTechInJPlus2 = {1}, TT_Status = {*} - {4}, DB_SC_Type = {4} >} TT_HoursQty));

Set vTechNeed_Temp = $(vTotalHeuresTech) / ((count( distinct {< Res_Type = {0}, Res_ResGroupNo = {'PLTEC','PLTSE','PLAID'}/*, TT_ResNo ={'*'}-{'PIJA', 'CHBA', 'SEPE', 'CHRI', 'MASE', 'PREST-EDR-UK', 'PREST-GRAPHAX', 'PREST-HOLZER', 'PREST-KMBF', 'PREST-TECH'}*/>} Res_Name) * $(vHeureTechNeed) * $(vNbDays)) - (sum({< ProjectID = {1,2,3}, HeuresTechInJPlus2 = {1}>} TT_HoursQty)));

Set var1 = IF ( $(vTechNeed_Temp), $(vTechNeed_Temp), 0);

VAR 2 :


Set vHumanAvail_Temp = (((count( distinct {< Res_Type = {0}, Res_ResGroupNo = {'PLTEC','PLTSE','PLAID'} /*, TT_ResNo ={'*'}-{'PIJA', 'CHBA', 'SEPE', 'CHRI', 'MASE', 'PREST-EDR-UK', 'PREST-GRAPHAX', 'PREST-HOLZER', 'PREST-KMBF', 'PREST-TECH'}*/>} Res_Name) * $(vHeureTechNeed) * $(vNbDays)) - (sum({< ProjectID = {1,2,3}, HeuresTechInJPlus2 = {1}>} TT_HoursQty))) / (count( distinct {< Res_Type = {0}, Res_ResGroupNo = {'PLTEC','PLTSE','PLAID'} /*, TT_ResNo ={*}-{'PIJA', 'CHBA', 'SEPE', 'CHRI', 'MASE', 'PREST-EDR-UK', 'PREST-GRAPHAX', 'PREST-HOLZER', 'PREST-KMBF', 'PREST-TECH'}*/>} Res_Name) * $(vHeureTechNeed) * $(vNbDays)));

Set var2 = If( $(vHumanAvail_Temp),$(vHumanAvail_Temp),0);

sfatoux72
Partner - Specialist
Partner - Specialist

‌il y a 2 possibilités qui réponde à ta question, mais dans les 2 cas il y a des difficultés  :

1) Résoudre les expressions dans le script

Cette option est complexe, car t’es expressions sont complexes.

il faut faire une table par fonction d’agrégation :

sum( {< DB_SAV_Ended = {0}, Doc_Version_No = {99}, TT_IsInJPlus2 = {1}, DB_SC_Type = {1}, TT_Status = {'*'} - {4} >} TT_HoursQty)


THT_1:

LOAD

   Sum(TT_HoursQty) as TotalHeuresTech_1

Resident Table1

Where

    DB_SAV_Ended = 0

    And Doc_Version_No = 99

    And TT_IsInJPlus2 = 1

    And DB_SC_Type = 1

    And TT_Status <> 4

Ensuite tu joins tes tables pour n’en avoir plus que une et tu fait une requête dessus pour calculer VAR_1 et VAR_2

Tu concatènes ton qvd existant

Tu sauves le résultat dans ton qvd (store)

Oui, c’est compliqué  

2) Si tu utilises QlikView, tu peux créer une macro qui exportera le contenu d’un objet graphique (tableau avec tes expressions ) dans un QVD. Tu peux lancer l’exécution de ta macro par un trigger declanché à la fin du chargement.

C’est pas tout simple non plus, mais cela me semble plus facile.

JenniferBettiol
Partner - Contributor II
Partner - Contributor II
Author

Bonjour,

Merci pour ton retour, j'ai développé hier ta seconde proposition, j'ai écris une macro qui est supposée se déclencher après chaque rechargement.

- Avant 17h, je charge un QVD qui est l'historique (fictif pour l'instant)

- La variable "vExportExcel" est égale à 1 au premier rechargement après 17h, et donc l'objet graphique est sensé être exporté au format Excel (cette étape ne fonctionne pas)

- Au second rechargement après 17h, le fichier Excel créé est pris en entré pour être concaténer à l'historique existant

Voici ma macro

SUB Exporter

Set var  = ActiveDocument.GetVariable("vExportExcel")

IF var.GetContent.String = 1 THEN

NomFichier = "\\SRVQLIKVIEW\Documents Source\TechnicalNeed_HumanAvailability.xlsx"

Set fso = CreateObject("Scripting.FileSystemObject")

on error resume next

fso.DeleteFile(NomFichier)

on error goto 0

SET tmpExcel = CreateObject("Excel.Application")

SET tmpWorkBook = tmpExcel.Workbooks.ADD

tmpExcel.Visible = True

SET TABLE = ActiveDocument.GetSheetObject("CH208")

SET XLSheet = TmpExcel.Worksheets(1)

TABLE.CopyTableToClipboard true

XLSheet.Range("A1").SELECT

XLSheet.PasteSpecial

TmpWorkBook.SaveAs NomFichier

TmpExcel.Quit

END IF

END SUB


le niveau de sécurité requis : Accès système

Sécurité locale active : Autoriser les accès système

Et au niveau des déclencheurs du document :

Déclencheurs d’événements de document/ Au rechargement / Avec Action = executer une macro/ Nom de la macro : Exporter.

Je ne comprends pas pourquoi l'export ne se fait pas...

JenniferBettiol
Partner - Contributor II
Partner - Contributor II
Author

Bon et bien j'ai ma réponse :

Les types de fonctions suivants ne doivent pas être utilisés dans l'environnement du serveur QlikView, car

elles pourraient avoir des conséquences inattendues :

* Les opérations attrayant à la disposition qui ont une incidence sur les propriétés des feuilles et des

objets de feuille via SetProperties

* Les opérations modifiant les paramètres du document ou utilisateur

* Toutes les opérations liées au script, y compris Reload

* Les opérations de réduction des données, ReduceData par exemple

* Les opérations de type Enregistrer et Ouvrir le document

Je mets ici une piste que j'ai trouvé dans un autre sujet de discussion :

La solution de contournement est donc de passer par le lancement d'un programme vbs via "External programs" (System / Supporting Tasks / External programs).

Il faut donc créer un fichier .vbs et le lancer à partir de "Command line statement:" : cscript C:\MonFichier.vbs

bon, y a plus qu'à....

christophebrault
Specialist
Specialist

Bonjour,

Pourquoi ne pas, à chaque extraction de ta source de données, stockées dans un QVD dans le nom duquel tu indique la date. Chaque jour tu as un nouveau QVD.

Ensuite dans le design, tu utilise la date du QVD comme dimension pour calculer tes expressions.

Ce n'est  à priori pas une solution très complexe à mettre en œuvre.

Inscrivez vous à ma Newletter Qlik
DoNotMissQlik- Connect with me on Linkedin
JenniferBettiol
Partner - Contributor II
Partner - Contributor II
Author

Bonjour,

C'est en fait exactement ce que je fais

Seulement la prochaine étape c'est de pouvoir exporter cet objet dans lequel j'affiche mes expressions (Date du jour - Var1 -Var2) afin d'avoir dans un QVD ou un fichier Excel les données des variables Var1 et Var2. C'est ici que ça coince

sfatoux72
Partner - Specialist
Partner - Specialist

As-tu Excel installé sur ton serveur QlikView ?

Sinon, tu n'as peut-être pas la librairie nécessaire à disposition.

Je pense que la macro suivante suffit a exporter ta données dans un QVD :

SUB Exporter

    IF var.GetContent.String = 1 THEN

        NomFichier = "\\SRVQLIKVIEW\Documents Source\TechnicalNeed_HumanAvailability.qvd"

        set obj = ActiveDocument.GetSheetObject("CH208")

        obj.ExportEx NomFichier, 4

    END IF

END SUB

MauriceLudo
Creator II
Creator II

calculate result municipal elections

‌Bonjour Sébastien,

peux-tu voir cette publication.

merci davance