Toutes mes réponses sur les forums
-
AuteurMessages
-
Stéphane Lorin
ParticipantBonjour
Votre fonction renvoie la somme pour des conditions dans l’ordre dans lequel elles apparaissent dans vos critères
Donc le 1er élément de CritèreVendeur avec le 1er élément de CritèreRegion
+ 2eme élément de Critère Vendeur avec le 2e élément de Critère Region
Ainsi de suiteDonc pas le croisement vendeur A avec région Nord car il s’agit du 1er élément des vendeurs avec le 2d élément de la région
Ajoutez donc en troisième ligne A + Nord et vous obtiendrez 768
Stéphane
27 novembre 2020 à 8 h 14 min en réponse à : Augmentation annuelle progressive à partir d’une date #84656Stéphane Lorin
ParticipantBonjour
Pour déterminer le nombre d’années entières entre une date de départ et une autre date vous pouvez utiliser la formule :
=ANNEE(date en cours)-ANNEE(date départ)-(MOIS(date en cours)<MOIS(date départ))Ainsi à partir d’un salaire de base “SB” et d’une augmentation annuelle au moins anniversaire de x% vous pouvez déterminer le salaire du mois par la formule
=SB*(1+x)^(ANNEE(date en cours)-ANNEE(date départ)-(MOIS(date en cours)<MOIS(date départ)))
ou encore
=SB*PUISSANCE(1+x;ANNEE(date en cours)-ANNEE(date départ)-(MOIS(date en cours)<MOIS(date départ)))
Cordialement
Stéphane
Stéphane Lorin
ParticipantBonjour
Votre question n’est pas précise.
En titre vous évoquez la valeur de la ligne supérieure et dans le texte les articles qui sont vendus ensemble.En regardant uniquement la ligne précédente de la commande, si j’en ai une première commande avec les produits A, B et C et une autre avec D, B et A vous ne verrez pas que A et B ont été vendu simultanément les 2 fois.
A mon sens, il faut regarder les produits qui sont associés dans la même commande.
Avec Power Query, vous fusionnez la table avec elle même sur le champ commande, vous développez les lignes avec les articles comme ça vous avez tous les couples qui existent.
Vous supprimez les lignes avec les articles similaires (le produit A est toujours vendu avec lui-même) et enfin vous regroupez les couples articles en comptant les lignes.Avec DAX, j’avoue sécher malgré quelques essais.
Peut être faut-il créer une table calculée pour sélectionner toutes les commandes qui contiennent au moins une fois votre article ABC123 ?
Quelque chose comme
Table_résultat = FILTER(Table_source,
Table_source[N°Cde] IN SELECTCOLUMNS(
FILTER(Table_source, Table_source[ID Product] = “ABC123”),
“N°Cde”, Table_source[N°Cde]))
et filtrer les lignes avec le code produit <>”ABC123″Cordialement
StéphaneStéphane Lorin
ParticipantBonsoir
Vu le nombre de conditions à tester il faut trouver une autre façon de procéder.
Votre image n’est pas claire, les conditions 1 et 2 semblent similaires.
Avec un exemple (une base simplifiée avec quelques conditions “types”) nous pourrions vous faire des suggestions.Stéphane
13 novembre 2020 à 12 h 20 min en réponse à : Power Query – Données ne commençant pas à la ligne 1 #83939Stéphane Lorin
ParticipantBonjour
Nous n’avons pas d’exemple de votre fichier source et votre dossier n’existe évidemment pas chez moi. Donc votre fichier n’est pas exploitable en l’état.
Néanmoins c’est en effet Table.Skip qu’il faut ajouter dans votre fonction suivi d’un Table.PromoteHeaders afin de récupérer les en-têtes. Il y a des boutons dans le menu “Accueil” pour ce faire
L’image n’a pas d’impact.Le plus simple est de créer d’abord une requête sur un fichier exemple, d’intégrer des paramètres dans cette requête, puis de transformer la requête en fonction (avec le clic droit). La requête et la fonction seront “liées” et les modifications de la fonction plus aisées.
Cordialement
StéphaneStéphane Lorin
ParticipantBonjour
Une possibilité est de regrouper votre tableau par clé avec les agrégats : Somme et “Toutes les lignes”
Ensuite vous créez une colonne conditionnelle sur la somme (positive ou négative)
Enfin, vous développer la table pour récupérer les montants initiaux.
Dans mon exemple ci joint j’ai ajouté en amont un index pour pouvoir trier à la fin dans l’ordre initial.Une autre possibilité “plus naturelle” est de créer une table en regroupant sur la clé, puis de fusionner la table initiale avec cette table secondaire et enfin de gérer avec une colonne conditionnelle les clés positives ou négatives. Je préfère la première solution qui ne nécessite pas de table intermédiaire.
Bonne découverte de Power Query !
Stéphane
Attachments:
You must be logged in to view attached files.11 novembre 2020 à 11 h 58 min en réponse à : Calcul du nombre de jours ouvrés entre 2 dates de relevé #83810Stéphane Lorin
ParticipantBonjour
En complément, votre première mesure devrait être correcte si vous supprimer le lien entre la table de date et votre table.
En conservant le lien entre table, la seconde avec le ALL ne donnera pas le bon résultat car vous ne tenez pas compte de la date du jour.
il faut ajouter une condition : Calendrier[Date]<=NOW()Mesure Countrow:=COUNTROWS(FILTER(ALL(Calendrier);Calendrier[Date]<=NOW()&&Calendrier[Date]>=min([Date de fin])&& Calendrier[Jours ouvrés] = 1))
Stéphane
10 novembre 2020 à 8 h 45 min en réponse à : Calcul du nombre de jours ouvrés entre 2 dates de relevé #83709Stéphane Lorin
ParticipantBonjour
en ajoutant un ALL devant la table Calendrier dans votre seconde mesure j’obtiens le résultat souhaité
Mesure Countrow:=COUNTROWS(FILTER(ALL(Calendrier);Calendrier[Date]>=min([Date de fin])&& Calendrier[Jours ouvrés] = 1))
mise à part que votre table de date s’arrête au 30 octobre et qu’il y a quelques jours ouvrés de plus au 10 novembre.
cordialement
Stéphane10 novembre 2020 à 8 h 26 min en réponse à : Power Query – Extraire les données de fichiers excel protégés. #83681Stéphane Lorin
ParticipantBonjour
Personnellement je reçois également des fichiers csv zippés que je gère directement dans Power Query via le code proposé ici
http://sql10.blogspot.com/2016/06/reading-zip-files-in-powerquery-m.htmlCette fonction personnelle permet d’extraire les csv dans Power Query avant de traiter les données elles-mêmes.
Ça fonctionne très bien et très rapidement.
J’utilise également cette fonction combinée avec Xlm.Document pour lire à l’intérieur de fichier Excel non protégés afin de récupérer des infos sur la mise à jour des Tableaux Croisés Dynamiques (date de dernière mise à jour et par qui). C’est équivalent des propriétés RefreshDate et RefreshName des PivotCaches dans VBA mais via PowerQuery.
Cordialement
Stéphane
Stéphane Lorin
ParticipantBonjour
Faites une boucle sur tous les fichiers Excel ouverts et utilisez l’instruction “Like” qui permet d’utiliser les jokers “?” et “*”For Each Classeur In Application.Workbooks
If Classeur.Name Like “DayTrade_-_Transactions*” Then Classeur.Activate
Next ClasseurVous n’avez pas besoin de l’instruction “Windows” car vous parcourez la liste des “Workbooks”
Stéphane
Stéphane Lorin
ParticipantBonjour
vous ne mettez pas de fichier exemple simplifié et c’est donc un peu compliqué de vous répondre.
néanmoins, vous trouverez joint un fichier excel contenant une table qui correspond à ce que j’ai compris de votre problème :
des véhicules appartenant à des regroupements, qui parcourent une distance en consommant un certain volume de carburant.
dans mon modèle de données j’ai créé différentes formules DAX simples pour calculer :
– la conso (Volume/Distance)
– les totaux du groupe avec la fonction ALLEXCEPT afin de retirer le filtre sur le regroupement
– puis l’écart à la conso en valeur et en %
ce n’est peut-être pas la “meilleure” solution, mais c’est une piste pour votre problème.
cordialementStéphane
Attachments:
You must be logged in to view attached files.Stéphane Lorin
ParticipantEn complément pour obtenir une liste de 10 valeurs aléatoires triées par ordre croissant vous pouvez utiliser la fonction List.Random à la place de Number.Random :
= List.Sort(List.Random(10),Order.Ascending)
Stéphane
Stéphane Lorin
ParticipantBonjour
En effet, je reproduis le même problème.
Vous pouvez le contourner en utilisant la fonction Table.UnpivotOtherColumns pour dépivoter la colonne avec l’aléa.
Cela fige la valeur et permet ensuite le tri.Stéphane
Code pour trier 10 valeurs aléatoires
let
Source = {1..10},
#”Converti en table” = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#”Personnalisée ajoutée” = Table.AddColumn(#”Converti en table”, “Personnalisé”, each Number.Random()),
#”Supprimer le tableau croisé dynamique des autres colonnes” = Table.UnpivotOtherColumns(#”Personnalisée ajoutée”, {“Personnalisé”}, “Attribut”, “Valeur”),
#”Lignes triées” = Table.Sort(#”Supprimer le tableau croisé dynamique des autres colonnes”,{{“Personnalisé”, Order.Ascending}})
in
#”Lignes triées”26 octobre 2020 à 9 h 18 min en réponse à : TCD – interférences entre plusieurs TCD basés sur mêmes données #82952Stéphane Lorin
ParticipantBonjour
Pour contourner ce problème lorsque vous sélectionnez la même plage de données vous pouvez passer par l’assistant tableau croisé dynamique (celui d’Excel avant 2007).Il faut déjà ajouter cet assistant dans le ruban ou la barre d’outils “Accès rapide” :
Options/Personnaliser le ruban ou Option/Barre d’outils Accès rapide
puis “Commandes non présentes sur le ruban” et “Assistant tableau croisé dynamique”Ensuite, à l’étape 2 de l’assistant après avoir choisi votre source, Excel vous indique qu’il existe déjà un TCD sur la même source et vous propose d’utiliser les mêmes données : réponse “Oui” = économie de mémoire
ou deux TCD indépendants : réponse “Non”Cordialement
Stéphane
Stéphane Lorin
ParticipantBonjour
Voici comment je procéderai :
1. regroupement sur les champs “DATUM” et “Caller Number” et en agrégat “toutes les lignes”
vous obtenez une nouvelle colonne qui contient une table avec tous les appels de la journée pour chaque n°2. ajout d’une colonne en utilisant la fonction Table.Contains pour savoir si un des enregistrements de cette table contient le champ “Call Result” avec la valeur “ANSWERED”
Table.Contains([le nom de votre colonne de l’étape 1],[Call Result=”ANSWERED”])
la réponse sera TRUE ou FALSEEn modifiant le code M du regroupement, vous pourriez même obtenir le résultat en une seule étape
= Table.Group(Source, {“DATUM”, “Caller Number”}, {{“Appel_répondu”, each Table.Contains(_,[Call Result=”ANSWERED”]), type logical}})
Au final voici le code
let
Source = Excel.CurrentWorkbook(){[Name=”OutputTEL”]}[Content],
#”Lignes groupées” = Table.Group(Source, {“DATUM”, “Caller Number”}, {{“Appel_répondu”, each Table.Contains(_,[Call Result=”ANSWERED”]), type logical}})
in
#”Lignes groupées”puis ajoutez un filtre si vous voulez une table avec uniquement les appels non répondu sur la journée
2 points d’attention
– vous modifiez le type du “Caller Number” en entier alors qu’il y a des n° au format texte “anonymous”
– avec votre formule Excel, vous comptez plusieurs fois le même n° comme en ligne 46 et 47 ou 53 à 55.Cordialement
Stéphane
-
AuteurMessages