Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
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.