IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

QlikView Discussion :

Order By _ script qlik sens


Sujet :

QlikView

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 27
    Points : 14
    Points
    14
    Par défaut Order By _ script qlik sens
    Bonjour ,

    J'aimerai ordonner les données que j'ai importer en utilisant un LOAD par date mais je n'arrive pas à le faire avec un :

    load... from .. where ...order by date

    Est ce qu'il y aurait un autre moyen de le faire ?

    J'ai une autre question , mes données sont stockées dans un fichier excel , et il y a une colonne Date sous forme : jj/mm/aaaa hh:mm , je souhaite extraire le jour de la date , j'ai essayé avec Day (Date ) mais sans aucun résultats .

    Merci

  2. #2
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut
    Si votre date est stockée en tant que date, le "ORDER BY date" doit fonctionner.
    Si votre date est stockée en tant que chaine de caractères, alors vu le format que vous utilisez, il est normal que le ORDER BY ne fonctionne pas (les jours sont en premier).

    Vous pouvez utiliser la fonction "timestamp#(expression [ , format-code ])" qui vous permettra de transformer une chaîne de caractères en véritable date. Vous pourrez alors trier selon l'ordre qu'il vous plait ou ne prendre que le jour en prenant uniquement la partie entière.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    J'ai essayé avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Load* Resident Table1 order by [TRANSACTION_DATE];
    mais le probablement c'est que je dois obligatoirement faire un order by date avant de calculer le maximum de mes identifiants unique qui sont groupé par une clé , et là il ne prend pas en considération le order by car group by vient toujours avant order by
    voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Table1:
     
    LOAD *,
     
      AutoNumber( ACTION &DATE &montant & reference) as Key;
     
    LOAD
     
      RecNo()as id,ACTION,mcode,DATE,montant,reference,message
     
    FROM [lib://Documents/données.CSV]
     
    (txt, codepage is 28591, embedded labels, delimiter is ';', msq)
     
    Where  [mcode] <>'1913'  and [mcode]<>'2001' ;
     
    NoConcatenate
     
    Table2:
     
    Load*
     
    Resident Table1 order by [DATE];
     
    drop table Table1;
     
    Outer Join(Table2)
     
    LOAD
     
    Key,
     
    max(id) as MaxId
     
    RESIDENT Table2
     
    GROUP BY Key;
     
    FinalTable:
     
    Load*,
     
    If(((id = MaxId) and ([message] = 'ERROR'OR [message] = 'ACCEPTED' or [message] = 'REFUSED' or [message] = 'CANCELLED'))or([message] = 'ACCEPTED') , 1, 0) as DB
     
    Resident Table2
     
    Order By id  ;
     
    drop Table Table2;

  4. #4
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Je n'arrive pas à comprendre votre problème.
    Si vous faites un "group by", vous êtes censé avoir 1 seule ligne par clé à la fin.

    Vous voulez que pour une même clé, les lignes soient triées par date ou pour l'ensemble de votre table ?

    Si c'est pour l'ensemble de votre table, pourquoi ne pas faire un ORDER BY dans un chargement juste après ?


    Pouvez-vous donner une exemple simple avec un LOAD INLINE, afin de bien comprendre le problème et ce que vous attendez ?

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    J'ai un fichier CSV qui contient l'historique des transactions mais les dates ne sont pas ordonnées .
    j'ai crée un id unique pour chaque ligne afin de pouvoir calculer la dernière transaction sur le même numéro de carte (CB) , donc les dates doivent être ordonnée pour que je puisse calculer l'id max ( la dernière transaction est celle qui a le plus grand id)

  6. #6
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut
    Question bête : pourquoi ne faites vous pas votre "MAX" directement sur la date, au lieu de l'ID ?

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    c'était exactement ce que je voulais faire au début , mais je n'arrive pas à calculer le max de la date.

  8. #8
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par PhunkyBob Voir le message
    Vous pouvez utiliser la fonction "timestamp#(expression [ , format-code ])" qui vous permettra de transformer une chaîne de caractères en véritable date.
    Une fois en date, vous pouvez utiliser la fonction "max".

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    J'ai essayé avec ça mais sans résultats :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Timestamp(Timestamp#(DATE,'DD/MM/YYYY hh:mm:ss.[fff] TT'),'DD/MM/YYYY hh:mm:ss') AS DATE
    Nom : Capture.PNG
Affichages : 646
Taille : 574 octets

    Mes dates sont déjà sous forme : "DD/MM/YYYY hh:mm:ss" mais qu'on j'applique le max ça ne marche pas

  10. #10
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut
    Si j'ai ces données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    data:
    LOAD 
    id,
    '' & text(replace(ma_date, '_', ' ')) & '' AS ma_date	// Le format est du texte.
    ;
    LOAD * INLINE [
    id, ma_date
    1, 01/01/2018_12:30:00
    1, 28/02/2018_16:30:00
    1, 15/01/2018_12:30:00
    2, 03/03/2018_00:00:00
    2, 08/03/2018_14:00:00
    2, 07/02/2018_00:00:00
    ];
    j'ai bien un champ TEXTE pour "ma_date".

    Avec cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    data2:
    NOCONCATENATE LOAD 
    id,
    Timestamp#(ma_date, 'DD/MM/YYYY hh:mm:ss') AS ma_date2
    RESIDENT data;
    DROP TABLE data;
    j'ai "ma_date2" au format DATE (donc un DUAL qui contient à la fois une valeur numérique et une représentation texte qui est au format par défaut de mon application).



    Donc avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    LEFT JOIN (data2)
    LOAD 
    	id,
    	max(ma_date2) AS ma_date2,
    	1 AS is_max
    RESIDENT data2
    GROUP BY id;
    j'identifie bien toutes mes lignes qui correspondent à la date max.

    Le plus important est que vous trouviez comment son chargées vos dates : en tant que DATE (il n'y a donc rien à faire) ou en tant que TEXTE (il faudra donc utiliser "timestamp#()" pour convertir en DATE).

    Pour savoir quel est le format après le chargement de votre fichier, ne faites aucun traitement, ajoutez une liste de sélection et voyez si le texte est aligné à gauche (c'est du texte) ou à droite (c'est une date).

  11. #11
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    cela fonctionne très bien mais j'ai un petit problème.
    Dans mon cas j'ai crée une clé permettant de sélectionner des critères à comparer en utilisant autonumber,pour les lignes qui ont la même clé je dois calculer le max de la date et ensuite affecter "1"
    ex :
    Nom : Capture.PNG
Affichages : 638
Taille : 4,4 Ko


    Mais avec ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    max(ma_date2) AS ma_date2,1 AS is_max
    je ne vois pas trop l'idée

  12. #12
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut
    Si vous ne comprenez pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    LEFT JOIN (data2)
    LOAD 
    	id,
    	max(ma_date2) AS ma_date2,
    	1 AS is_max
    RESIDENT data2
    GROUP BY id;
    faites
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    LEFT JOIN (data2)
    LOAD 
    	id,
    	max(ma_date2) AS max_ma_date2
    RESIDENT data2
    GROUP BY id;
     
    data3:
    NOCONCATENATE
    LOAD 
    	id,
    	ma_date2,
    	1 AS mon_champ_1
    RESIDENT data2
    WHERE ma_date2 = max_ma_date2
    ;
    c'est exactement pareil...

  13. #13
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Je pense que c'est compliqué de faire ça surtout que j'ai plein de condition et malheuereusement je ne suis pas expert qlik

    y a pas une idée pour ordonner mes données par date et ensuite créer un id unique pour chaque ligne ? ( car mon script fonctionne super bien sauf que je dois faire le trie par date directement sur le fichier csv )

  14. #14
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut
    J'ai du mal à comprendre pourquoi "ORDER BY ma_date2" ne fonctionnerait pas dans votre cas...

  15. #15
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Au début je croyais que ça marche pas mais après je me suis rendu compte que je dois faire order by avant de créer l'id.
    donc là je me trouve perdu :
    voici mon code si vous pourriez m'aider :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Table1:
     
    LOAD *,
     
      AutoNumber( ACTION &DATE &montant & reference) as Key;
     
    LOAD
     
      RecNo()as id,ACTION,mcode,DATE,montant,reference,message
     
    FROM [lib://Documents/données.CSV]
     
    (txt, codepage is 28591, embedded labels, delimiter is ';', msq)
     
    Where  [mcode]<>'1913'  and [mcode]<>'2001' ;
     
    NoConcatenate
     
    Table2:
     
    Load*
     
    Resident Table1 order by [DATE];
     
    drop table Table1;
     
    Outer Join(Table2)
     
    LOAD
     
    Key,
     
    max(id) as MaxId
     
    RESIDENT Table2
     
    GROUP BY Key;
     
    FinalTable:
     
    Load*,
     
    If(((id = MaxId) and ([message] = 'ERROR'OR [message] = 'ACCEPTED' or [message] = 'REFUSED' or [message] = 'CANCELLED'))or([message] = 'ACCEPTED') , 1, 0) as DB
     
    Resident Table2
     
    Order By id  ;
     
    drop Table Table2;

  16. #16
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut
    Vous créez une identifiant "id" basé sur l'ordre des lignes du fichier.
    Ensuite vous faites une "max(id)". Ca va vous donner l'identifiant de la ligne qui a l'identifiant le plus grand. Mais aucune preuve que c'est celle qui a la date la plus grande !

    Le seul moment où vous faites une "order by date", non seulement on ne sait pas si ce sont vraiment des dates (vous aviez l'air de dire que c'était du texte, donc ça n'a pas de sens de faire un tri dessus) mais en plus ça ne change pas les "id" que vous avez DEJA chargé.

  17. #17
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    avec mon script est sans trié le fichier csv par date j'ai le résultat suivant :

    Nom : test1.PNG
Affichages : 670
Taille : 13,0 Ko

    Mais si je fais le trie sur le fichier le script fonctionne très bien :
    Nom : test2.PNG
Affichages : 629
Taille : 4,9 Ko

    c'est pour cela , je veux faire un order by date avant de créer l'id

  18. #18
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut
    Désolé, j'ai l'impression de tourner en rond.
    Si vous ne voulez pas trier par date en transformant votre champ TEXTE en DATE et avant d'utiliser le numéro de ligne, je ne sais pas comment vous pouvez faire.

    J'espère que d'autres personnes pourront vous aider.

    Vous pouvez utiliser la fonction "timestamp#(expression [ , format-code ])" qui vous permettra de transformer une chaîne de caractères en véritable date.

  19. #19
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Je veux bien, seulement je ne sais pas comment faire c'est ça le problème

  20. #20
    Modérateur

    Inscrit en
    Octobre 2006
    Messages
    1 649
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 649
    Points : 2 529
    Points
    2 529
    Billets dans le blog
    6
    Par défaut
    Timestamp#(ma_date, 'DD/MM/YYYY hh:mm:ss') AS ma_date2

Discussions similaires

  1. Gestionnaire de données Qlik sens
    Par Jouly05 dans le forum QlikView
    Réponses: 5
    Dernier message: 16/05/2018, 09h49
  2. Qlik sens dédoublonnage
    Par Jouly05 dans le forum QlikView
    Réponses: 9
    Dernier message: 09/05/2018, 15h44
  3. qlikview vs qlik sense: changement du script
    Par khaoulagammoudi dans le forum QlikView
    Réponses: 1
    Dernier message: 18/12/2016, 20h38
  4. sens de "exec tail -n +3 $0" script bash
    Par xavierdestev dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 24/07/2013, 16h23
  5. Qlik View Script - Modification & Rechargement
    Par drixon dans le forum QlikView
    Réponses: 6
    Dernier message: 07/02/2013, 11h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo