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

POWER Discussion :

Power Query - List.alternate - comportement différent entre 1er item sélectionné et suivants


Sujet :

POWER

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 026
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 026
    Billets dans le blog
    45
    Par défaut Power Query - List.alternate - comportement différent entre 1er item sélectionné et suivants
    Bonjour,

    J'essaie de comprendre la fonction List.Alternate(list as list, count as number, optional repeatInterval as nullable number, optional offset as nullable number) as list

    Exemple 1

    = List.Alternate( { 1..10 },1,5) donne {2,3,4,5,6,8,9,10}

    count = 1 correspond au décalage appliqué à chaque index de la la liste ( tableau) dont on va considérer que l'index commence à 0 (peut-être 1 mais pas d'impact sur la démo)
    repeatInterval = 5 correspond à la plage d'index gardés à partir de chaque index sélectionné après décalage

    Mais j'ai une incompréhension sur les valeurs 2 et 8

    Rappel j'ai considéré que l'index du tableau commençait à 0

    La valeur 2 => Index 0 + 1
    {2,3,4,5,6} => 5 index à partir de l'index sélectionné {index 1 =valeur 2, 2=3, 3=4, 4=5, 5=6}


    Le prochain item sélectionné est 8 donc l'index à été décalé de 2 par rapport à l'index de la valeur 6 ce que je ne trouve pas logique par rapport au premier index sélectionné (index 1 = valeur 2)

    Question subsidiaire
    Je ne comprends pas le 4ième paramètre offset

  2. #2
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 275
    Par défaut
    Bonjour

    Prenons l'alphabet List.Alternate({"A".."Z"},[count],[repeat],[offset]).

    [count] = nombre d'éléments écarté à chaque fois
    [repeat] = nombre d'éléments conservé à chaque fois
    [offset] = nombre d'éléments conservé au début de la liste

    plusieurs hypothèses pour ces 3 paramètres :

    - si 1,5 pas de offset, on ne conserve rien au début donc on écarte A, on garde B,C,D,E,F, on écarte G, on garde H,I,J,K,L, on écarte M, ...
    - si 1,5,2 on conserve les 2 premiers éléments A et B puis même principe on écarte C, on garde D,E,F,G,H on écarte I, on garde J,K,L,M,N ...
    - si 2,5,3 on conserve A,B,C, on écarte D,E, on conserve F,G,H,I,J, on écarte K,L, on conserve M,N,O,P,Q ...

    Est-ce plus clair ?
    Stéphane

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 026
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 026
    Billets dans le blog
    45
    Par défaut
    Bonjour Stéphane

    Merci pour tes explications très claires.

    Autant avec l'OFFSET, je trouve cohérent la constitution de la liste de sortie. Le dernier item de la plage N-1 est pris comme item à partir duquel le COUNT est appliqué. Et je comprends le résultat avec List.Alternate({"A".."Z"},1,5,2) => Conserve les 2 premiers éléments (A,B) => saute C => conserve (D,E,F,G,H) => saute I => conserve (J,K,L,M,N) ...

    Ce que je ne comprends pas c'est la sélection de B comme 2ième item de la lsite avec sélecList.Alternate({"A".."Z"},1,5)[/CODE]

    Car dans l'exemple List.Alternate({"A".."Z"},1,5,2) => Conserve sous-plage (A,B) puis décalage de 1 avec index de B comme référence => saute C puis conserve sous-plage de 5 items D compris (D,E,F,G,H) puis décalage de 1 avec H comme référence => saute I => garde (J, K,L,M,N) ....

    Donc l''index du premier item des sous plages après la sous-plage de l'OFFSET est l'index du dernier item de la plage précédente décalé de 2

    Donc selon ce principe pour List.Alternate({"A".."Z"},1,5), l'index de A devrait être l'index de référence => saute index de B => conserve C sauf si ????


    Mauvaise compréhension de ma part ?

  4. #4
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 275
    Par défaut
    Il n'y a pas d'histoire d'index de référence,
    List.Alternate({une liste}, a, b, c), on garde c éléments de la liste, on retire les a suivants, on garde les b suivants, on retire les a suivants, on garde les b suivants...

    L'absence de valeur c équivaut à c=0,

    dans vote logique, si c = 2, alors B est la valeur de référence, si c = 1 alors A est la valeur de référence, mais si c = 0 alors il n'y a pas de valeur de référence, ce n'est pas A, c'est l'élément virtuel avant A

    Stéphane

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 026
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 026
    Billets dans le blog
    45
    Par défaut
    Considérons qu'une liste est un tableau à 2 dimensions indexé à partir de 0

    Nom : listalternate11.JPG
Affichages : 66
Taille : 25,0 Ko

    List.Alternate({"A".."Z"},1,1,1) c= 1 indique que l'index 0 est l'index du premier item de la liste de sortie (A) puis saute l'index 1 (B) car b = 1 et conserve 1 item après l'index B soit l'index 2 qui correspond à C (Voir ci-dessous) puis saute l'index 3 (D) et conserve l'index 4 (E) ....

    Nom : listalternate111.JPG
Affichages : 63
Taille : 15,2 Ko

    Nom : Captu111.JPG
Affichages : 64
Taille : 46,2 Ko




    Comme List.Alternate({"A".."Z"},1,1) = List.Alternate({"A".."Z"},1,1,0), à quoi correspond 0 ?


    Nom : listalternate11.-110JPG.JPG
Affichages : 64
Taille : 31,6 Ko

  6. #6
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 275
    Par défaut
    Bonjour

    si c=0, il n'y a pas de colonne verte, les colonnes bleues avec les éléments exclus sont donc décalées d'un cran vers la gauche (A, C, E... sont exclus et B, D, F... conservés)

    Stéphane

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 026
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 026
    Billets dans le blog
    45
    Par défaut
    Merci Raccourcix pour ton aide

    Je comprends que la logique est que si c = O => Saut directement sur le 1er item.

    Faut juste rentrer dans la logique du langage

    Merci encore

  8. #8
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 275
    Par défaut
    Bonjour
    Pour moi la logique de la formule est que le 4e argument indique l'indice du 1er élément exclu
    - si c=0 ou absent alors on retire l'élément d'index 0
    - si c=1 alors on conserve l'élément d'index 0 et on retire celui d'index 1

    cela revient à dire qu'on conserve tous les éléments d'index inférieur strictement à "c" et qu'on applique ensuite la règle : exclure "a" éléments, conserver les "b" suivants, ...

    Stéphane

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Power Query] Nombre de jours ouvrés entre deux dates
    Par USER_POWERBI dans le forum POWER
    Réponses: 3
    Dernier message: 07/07/2022, 09h17
  2. [Power Query] Liste de valeurs saisie dans Query
    Par LG-69 dans le forum POWER
    Réponses: 2
    Dernier message: 19/05/2022, 16h31
  3. Réponses: 14
    Dernier message: 28/03/2021, 16h47
  4. Power Query, alternative efficace et dynamique au filtre avancé d'Excel
    Par Pierre Fauconnier dans le forum Contribuez
    Réponses: 12
    Dernier message: 18/09/2020, 13h50
  5. calcul de jours ouvrés entre 2 périodes sous power query
    Par tourniermanu dans le forum Excel
    Réponses: 2
    Dernier message: 11/02/2020, 12h40

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