Toutes mes réponses sur les forums

15 sujets de 196 à 210 (sur un total de 283)
  • Auteur
    Messages
  • en réponse à : Problème avec visuel “Matrice” #85976
    Stéphane Lorin
    Participant

    Bonsoir

    Avec Power Query je dépivote d’abord les autres colonnes que la première avec Table.UnpivotOtherColumns

    Puis je sépare la colonne attribut avec le caractère _ en utilisant Table.SplitColumn
    pour avoir d’un coté le imp et Mnt et de l’autre M, M-1 et M-2

    Enfin je pivote la colonne la colonne “imp/Mnt” avec Table.Pivot

    Voir la pièce jointe en remplaçant l’extension .xlsx par .pbix avant.

    Cordialement

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Calculer le délai de travail entre deux dates Power BI (DAX) #85966
    Stéphane Lorin
    Participant

    Bonjour

    Voici une solution avec Power Query

    J’ai une table avec une référence (“Id”) et une date/heure de “Début” et une date/heure de “Fin”
    Ainsi qu’un planning d’ouverture pour chaque jour “H_Début” et “H_Fin” (via une table de correspondance)

    Avec la fonction List.Dates je crée une liste des jours entre “Début” et “Fin”
    Je développe en lignes puis je fusionne pour récupérer les “H_Début” et “H_Fin” de chaque jour
    Ensuite la durée de mon “Id” sur chacune de ces journée “Date” est donnée par la différence si elle est positive de
    MIN(“Fin” , “Date + H_Fin”)-MAX(“Début” , “Date + H_Début)

    Il ne reste plus qu’à regrouper la table en sommant ces durées quotidiennes

    Voir exemple Excel ci-joint

    Cordialement

    Stéphane

    Attachments:
    You must be logged in to view attached files.
    en réponse à : requête redondante #85680
    Stéphane Lorin
    Participant

    Bonjour

    Après actualisation du TCD, pour afficher uniquement les composants des OF il faut ajouter un champ Valeur dans le TCD (somme ou nombre de composants par exemple). Par contre les OF fils sans composant ne sont pas affichés.

    Pour la seconde question, il faut créer une table inversée par le menu Données/Connexions existantes puis l’onglet “Tables”.

    Cordialement

    Stéphane

    en réponse à : Format date #85665
    Stéphane Lorin
    Participant

    Bonjour

    En quoi est-ce un problème ? Que voulez vous faire avec ces dates et avec cette formule LIREDONNEESTABCROISDYNAMIQUE ?

    Si vous voulez paramétrer cette formule pour rendre la dynamique suivant une date inscrite en cellule G1 par exemple vous pouvez modifier votre formule ainsi :

    =LIREDONNEESTABCROISDYNAMIQUE(“[Measures].[Somme de montant total]”;$A$6;”[Commandes].[date d’encaissement]”;”[Commandes].[date d’encaissement].&[“&TEXTE(G1;”aaaa-mm-jj”)&”T00:00:00]”)

    Stéphane

    en réponse à : requête redondante #85659
    Stéphane Lorin
    Participant

    Bonjour

    Pour bien commencer ce premier post de l’année, je vous adresse tous mes voeux pour 2021 et en particulier à Sophie qui nous apprends toujours beaucoup de choses. Merci !

    Je reviens sur ce sujet laissé avant les fêtes de fin d’année.

    J’ai testé rapidement des solutions via des fonctions Power Query qui s’appelle elle-même ou un List.Generate.
    Le résultat était correct mais le temps de réponse dès qu’il y avait plus de 3 ou 4 niveaux était trop long.

    J’ai donc essayé la fonction PATH en DAX. Cette fonction est très pratique pour remonter les ascendants dans une relation Père/Fils. A partir d’un élément la recherche du père, du grand-père… est très rapide.
    Ainsi pour connaître les descendants, il suffit de filtrer sur tous les éléments dont un des ascendants est l’OF que l’on cherche.

    Dans mon exemple j’ai donc 2 tables : “Choix” avec le n° de l’OF dont on cherche les descendants et “Liste” qui est la liste des relations Père/Fils (999 OF dans mon exemple)

    Trois colonnes calculées dans la table “Liste”
    Ascendance=PATH([N° Ordre];[N° Ordre père])
    Position dans ascendance=FIND(CONCATENATEX(Choix;[Choix];””);[Ascendance];;0)
    Rang=IF([Position dans ascendance]>0;(FIND([N° Ordre];[Ascendance])-[Position dans ascendance])/8)

    Pour trouver tous les OF qui dépendent d’un autre on commence par créer la liste de tous les ascendants de tous les OF avec la fonction PATH qui renvoie le résultat sous la forme : OF00001 | OF00002 | OF00006
    La fonction CONCATENATEX renvoie l’OF recherché format texte
    La fonction FIND cherche ce texte dans l’ascendance et renvoie la position du texte ou 0 si non trouvé
    Pour obtenir le rang on calcule l’écart entre la position de l’élément en cours (qui est en dernier) et de celui qu’on recherche.
    Comme le nombre de caractères de l’OF est 7 et qu’il y a un séparateur, on obtient l’écart de position en divisant par 8.
    Résultat = (vide) si ce n’est pas un descendant, 0 pour l’OF lui-même, puis 1 pour les fils, 2 pour les petit-fils…

    A chaque changement d’OF, il faut actualiser le TCD. (ajouter une macro événementielle pour automatiser ce dernier point au besoin)

    Cordialement

    Stéphane

    Attachments:
    You must be logged in to view attached files.
    en réponse à : requête redondante #85392
    Stéphane Lorin
    Participant

    Re-bonjour

    J’ai peu de temps pour répondre, je ferme le PC pour l’année 2020 dans quelques minutes !

    Donc la fonction renvoie une liste pour pouvoir facilement développer les lignes ensuite (c’est plus simple qu’une table)

    Oui, j’ai ajouté le try… otherwise à la main pour gérer le cas où la fonction est alimenté par un null ce qui génère une erreur. J’aurai pu faire une condition du style if [niveaux]<>null then fonction else null

    Désolé, j’ai “bidouillé” une solution ce matin en quelques minutes, ce n’est peut être pas très “propre” mais c’est pour donner une piste (c’est l’objet d’un forum)

    La fonction n’est pas créé à la main, c’est une requête avec un paramètre que je transforme en fonction (par clic droit), c’est plus facile pour modifier ensuite cette fonction car la requête et la fonction sont “liées”

    Enfin, pas de boucle type while à ma connaissance dans Power Query, mais il existe des fonctions récursives voir l’aide Microsoft, il faut ajouter un @ devant la fonction.
    https://docs.microsoft.com/fr-fr/powerquery-m/m-spec-functions

    Bon courage et bonne fin d’année

    Stéphane

    en réponse à : requête redondante #85382
    Stéphane Lorin
    Participant

    Bonjour

    Vous n’avez pas joint de fichier comme indiqué dans votre message

    Je vous propose une solution en pièce jointe avec une fonction qui filtre la liste Père/Fils sur le champ “Père” suivant un paramètre et renvoie la liste des “Fils” associés

    J’applique cette fonction 5 fois avec comme départ le ou les père(s) choisi(s) par l’utilisateur afin d’avoir les 5 niveaux en gérant les null avec un try … otherwise puis je décroise la table pour obtenir l’ensemble des descendants avec leur niveau respectif.

    Il est peut être possible d’utiliser les fonctions récursives de Power Query avec le @ mais je n’ai pas testé.

    Cordialement

    Stéphane

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Retraitement de données #85321
    Stéphane Lorin
    Participant

    Bonjour

    Difficile de répondre ne connaissant pas vos données sources ni vos modifications.
    Il faut tester les solutions !

    Personnellement c’est souvent un mix des deux.
    En général une fonction d’import pour mettre les données sources au propre
    Puis un traitement en masse de l’ensemble des données qui ont été combinées.

    Par exemple si vous devez fusionner vos données avec une autre table, il me semble qu’il vaut mieux le faire dans la seconde étape car sinon je pense que vous allez charger cette table fusionnée autant de fois que vous exécutez la fonction.

    Stéphane

    en réponse à : Répartir des valeurs selon une clé de répartition automatique #85254
    Stéphane Lorin
    Participant

    Bonjour

    Voici une proposition avec Power Query

    – Calcul de la base à répartir par fusion, filtre sur HQ et List.Sum sur la colonne € pour obtenir les -600
    – Calcul de la répartition par fusion, filtre hors HQ, regroupement (somme pour obtenir les 5500 de base et toutes les lignes), développement, division de la valeur de chaque ligne par les 5500 pour la clé de répartition puis multiplication par le calcul précédent pour la contribution de chacun
    – Ajout de la table initiale filtrée hors HQ avec la table du calcul de la répartition

    Cette table est ajoutée au modèle de données pour générer le TCD en orange.

    Sûrement transposable en DAX mais ça dépasse mes compétences

    Stéphane

    Attachments:
    You must be logged in to view attached files.
    en réponse à : SUM Powerpivot #85246
    Stéphane Lorin
    Participant

    Bonjour

    Il faut retirer le filtrer sur la colonne [Sun Opth Id] avec la fonction ALL
    Test 1 qty > 15:=if(SUMX(ALL(Tableau1[Sun Opth Id]);CALCULATE([Somme de Invoice QTY];Tableau1[Brands SAM]=”oui”))>=16;1;0)

    Stéphane

    en réponse à : Ajout de données par requête dans Power Query #85103
    Stéphane Lorin
    Participant

    Bonjour

    Voici une proposition pour votre problématique

    A partir de la table initiale, je construis une table projetée sur 12 mois avec la dernière valeur connue

    – regroupement par devise + valeur max du mois : afin de connaitre le dernier mois de chaque devise
    – fusion de cette table avec la table initiale sur la devise et le mois afin de récupérer la valeur du dernier mois
    – ajout d’une colonne personnalisée avec une liste {1..12}
    – extraction de cette liste en ligne. Chaque triplet devise/dernier mois/dernière valeur est répétée 12 fois
    – utilisation de la fonction Date.AddMonths pour ajouter x mois au dernier mois
    – sélection des colonnes voulues

    Il suffit de modifier le 12 pour avoir plus de mois.
    De cette façon, le dernier mois connu de chaque devise peut ne pas être le même.

    Enfin on ajoute la table initiale et la projection.

    Voir le fichier exemple joint

    Cordialement

    Stéphane

    Attachments:
    You must be logged in to view attached files.
    en réponse à : requete “décaler” #85093
    Stéphane Lorin
    Participant

    Depuis votre fichier de destination, il faut donc vous connecter au fichier Excel source, lire les données de l’onglet et remplir vers le bas la seconde colonne comme l’indiquait Sophie
    Stéphane

    en réponse à : requete “décaler” #85091
    Stéphane Lorin
    Participant

    désolé, j’ai mal compris la question. et ma réponse s’est croisée avec celle de Sophie
    Stéphane

    en réponse à : requete “décaler” #85090
    Stéphane Lorin
    Participant

    Bonjour

    Votre question n’est pas très précise : voulez-vous traiter vos données à l’intérieur de votre fichier ou dans un autre fichier ?

    Si c’est à l’intérieur de votre fichier, la fonction “Excel.CurrentWorkbook()” ne permet de lire que les tableaux. Ce n’est donc pas possible directement comme vous précisez que c’est une feuille et non un tableau

    Il faut donc passer un classeur externe et lire le contenu de votre fichier REQUETEX
    Vous importez votre fichier via le menu, vous sélectionnez l’onglet, vous modifiez la requête et sélectionnez vos colonnes.

    Vous allez avoir une requête qui va ressembler à
    let
    Source = Excel.Workbook(File.Contents(“Votre dossier\REQUETEX.xlsx”), null, true),
    Feuil1_Sheet = Source{[Item=”Feuil1″,Kind=”Sheet”]}[Data],
    #”Autres colonnes supprimées” = Table.SelectColumns(Feuil1_Sheet,{“Column4”, “Column5″})
    in
    #”Autres colonnes supprimées”

    A noter que les premières lignes et colonnes vides sont automatiquement retirées.
    Vos données sont en colonnes F et G mais comme vos colonnes A et B sont vides, il faut bien prendre les “Column4” et “Column5” dans la requête.

    Il est même possible d’exécuter exactement la requête à l’intérieur de votre fichier source mais il faudra l’enregistrer pour prendre en compte les modifications de votre liste en vert.
    En effet, “Excel.CurrentWorkbook” analyse les données du classeur en cours même ce qui n’est pas enregistré
    Par contre, “Excel.Workbook” nécessite d’enregistrer les modifications pour les prendre en compte.

    Cordialement

    Stéphane

    en réponse à : formule LIREDONNEESTABCROISDYNAMIQUE PowerPivot #85057
    Stéphane Lorin
    Participant

    Bonjour

    Vous ne dites pas quelle est la valeur de la cellule E13
    Mais si vous avez 2019 en E13 il faut remplacer “[Periode].[Période].&[2019]” par “[Periode].[Période].&[“&E13&”]”

    Stéphane

15 sujets de 196 à 210 (sur un total de 283)