Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Join us in Bucharest on Sept 18th for Qlik's AI Reality Tour! Register Now
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Modification de champ

Bonjour à tous,

Voici mon problème. J'ai une table de données que je charge à partir d'un qvd et qui peut se présenter sous la forme suivante :

Event    Code_précédent        Code_actuel

123        1010101010101        1101010001010

124        0001010101010        1100101010100

125        1011001011001        1100101011010

126        1001010100001        1000111111100

127        1110011010110        1010100101010

Ce que je dois faire c'est comparer les valeurs des champs "Code_précédent" et "Code_actuel" et ajouter un champ Flag qui est à 0 ou 1 selon mon critère de comparaison.

Le problème c'est que la comparaison consiste à vérifier si les bits à 1 dans Code_précédent sont toujours à 1 dans Code_actuel.

Pour cela j'ai utilisé un ensemble d'instruction composé de bouches For et de If, et j'arrive bien à obtenir le résultat escompté.

Mais je ne vois pas du tout comment faire pour stocker ce résultat dans un nouveau champ. Faut-il utiliser une instruction STORE dans la boucle For? Utiliser plutôt une macro? Où placer cette procédure de comparaison? 

Merci d'avance pour votre aide.

Cordialement,

1 Solution

Accepted Solutions
maxgro
MVP
MVP

un ideè

load *, WildMatch(C2, replace(C1, 0, '?'))   as Result;

LOAD text(C1) as C1, text(C2) as C2 INLINE [

    Event, C1, C2

    123, 1010101010101, 1101010001010

    124, 0001010101010, 1100101010100

    125, 1011001011001, 1100101011010

    126, 1001010100001, 1000111111100

    127, 1110011010110, 1010100101010

    200, 1110011010110, 1110011010110

    201,1,1

    202,10,11

    203,10,00

    204,10,01

    205,10,10

];

bit.jpg

View solution in original post

4 Replies
Not applicable
Author

Pour ajouter un chanp, il suffit d'appliquer une fonction sur un champ puis as xxx

LOAD x, y, z, if (x<z, 1, 0) as Flag

FROM/Resident xxxxx;

Je ne vois pas quelle fonction native permettrait de vérifier que les 1 sont toujours à la même place. Sauf à créer cette fonction dans VB. Dans ce cas, créer la fonction avec 2 paramètres, et l'appeler au cours du load.

Dans VB

Fuunction MaFonction(Param1, Param2)   (aucun type)

XXXX

MaFonction = 1 (ou 0)

End Function

Et dans le load

LOAD xxxxxx, MaFonction(Code_Precedent, Code_Actuel) as Flag

FROM/Resident XXXx

Et ensuite STORE cette table si vous souhaitez la mettre dans un QVD pour réemploi ultérieur.

Fabrice


maxgro
MVP
MVP

un ideè

load *, WildMatch(C2, replace(C1, 0, '?'))   as Result;

LOAD text(C1) as C1, text(C2) as C2 INLINE [

    Event, C1, C2

    123, 1010101010101, 1101010001010

    124, 0001010101010, 1100101010100

    125, 1011001011001, 1100101011010

    126, 1001010100001, 1000111111100

    127, 1110011010110, 1010100101010

    200, 1110011010110, 1110011010110

    201,1,1

    202,10,11

    203,10,00

    204,10,01

    205,10,10

];

bit.jpg

Not applicable
Author

Excellent Massimo !!

Fabrice

Not applicable
Author

Bonjour à tous et merci pour vos réponses.

La solution de Massimo marche parfaitement.