Toutes mes réponses sur les forums
-
AuteurMessages
-
Stéphane Lorin
ParticipantBonjour
Voici les étapes que j’essaierai (non testé, pas Excel sous la main)
List.Transform(Text.Split([Dates_tournées],”,”), Date.Month) pour obtenir la liste des n° de mois
ensuite
List.MatchesAny(Etape_précédente, each _ <= 4)
List.MatchesAny(Etape_précédente, each _ >= 5 and _ <=8)
List.MatchesAny(Etape_précédente, each _ >= 9)autre possibilité
List.ContainsAny(Etape_précédente,{1, 2, 3, 4})
List.ContainsAny(Etape_précédente,{5, 6, 7, 8})
List.ContainsAny(Etape_précédente,{9, 10, 11, 12})Stéphane
Stéphane Lorin
ParticipantBonjour
En ouvrant votre fichier Excel avec un lecteur zip on peut voir le code source (un fichier xlsx est un fichier zip).
Les chaînes de caractères sont stockées dans sharedStrings.xml
En ouvrant ce fichier sous un éditeur de texte vous verrez les caractères �
Ainsi je pense que le fichier lui-même ne contient pas les lettres spécifiques à l’alphabet tchèque.
Il faudrait revoir la source du fichierStéphane
Stéphane Lorin
ParticipantBonjour
On peut peut-être s’en sortir avec une combinaison de Text.FromBinary et Text.ToBinary.
le second paramètre de ces fonctions permet de préciser le type d’encodage
voir
– https://docs.microsoft.com/fr-fr/powerquery-m/textencoding-type
– https://docs.microsoft.com/fr-fr/powerquery-m/text-frombinary
– https://docs.microsoft.com/fr-fr/powerquery-m/text-tobinaryPourriez vous joindre un fichier Excel avec quelques noms de cette liste pour faire des tests ?
Stéphane
Stéphane Lorin
ParticipantBonjour
Vous “regroupez par” la ou les colonnes et vous faites “Somme” de votre colonne que vous voulez concaténer.
Evidemment vous aurez un message d’erreur car List.Sum de texte n’est pas possible
Vous remplacez alors List.Sum par Text.Combine et vous pourrez spécifier le caractère de séparation “,” ou “-” ou “#(cr)” pour un retour à la ligne
votre code ressemblera à
…each Text.Combine([Test],”-“), type text…Stéphane
Stéphane Lorin
ParticipantBonjour
Il manque une , à la fin de la ligne 5 et en ligne 6 un = entre le nom de l’étape et le Table.Groupil faut aussi un “in” + nom de la dernière étape à la fin de la requête
Stéphane
Stéphane Lorin
ParticipantBonjour
c’est possible dans Power Query avec le regroupement
Table.Group(étape_précédente, {“transporteur_id”}, {{“Département_id”, each Text.Combine([Département_id],”,”)}})
attention, votre champ Département_id doit être typé “text”
cette possibilité avec Text.Combine n’est pas proposée par défaut dans la boîte de dialogue du regroupement, il faut demander la somme par exemple puis modifier le code à la main
Stéphane
Stéphane Lorin
ParticipantBonjour
Voici une proposition de code M
let
Source = Excel.CurrentWorkbook(){[Name=”gareorigine”]}[Content],
Type_text = Table.TransformColumnTypes(Source,{{“Emplacement”, type text}}),
Condition = Table.AddColumn(Type_text, “gareN”, each
if Text.StartsWith([Emplacement],”sol”) then “SOL” else
if Text.StartsWith([Emplacement],”PAP”) then “PAP” else
if Text.Length([Emplacement]) > 0 then “GARE” else null)
in
ConditionStéphane
Stéphane Lorin
ParticipantBonjour
Je n’ai pas Excel sous la main, je n’ai donc pas ouvert la pièce jointe
Quelques remarques cependant à la lecture du codeJe ne vois pas l’intérêt d’une fonction
Ensuite Power Query est sensible à la casse donc SOL est différent de sol
Avez vous typé votre colonne en texte ? Si “any” le 9 sera aligné à droite et vous aurez une erreur avec Text.Lenght
Pourquoi pas un enchaînement de trois if then else ?
Stéphane
Stéphane Lorin
ParticipantBonjour
Dans votre TCD : mettre le champ mois en colonnes, ajouter les Codes et les Noms en lignes
enfin, les 4 ratios en valeur et déplacer ces valeurs en lignes et non en colonnes par défautrépéter les étiquettes d’éléments, retirer les totaux
vous obtiendrez le résultat attendu
Stéphane
Attachments:
You must be logged in to view attached files.Stéphane Lorin
ParticipantBonjour
oui, il faut aller dans le filtre du champ date, puis filtre chronologique, Mois, En coursLa formule devrait ressembler à
Table.SelectRows(#”Etape_précédente”, each Date.IsInCurrentMonth([Champ Date]))il faut que votre champ “Mois” soit au format “date” ou “datetime” pas du texte “juin” ou “2022_06”
Stéphane
Stéphane Lorin
ParticipantBonjour
A ma connaissance il n’y a aucune option pour modifier la taille de l’affichage des onglets.
Je ne vois pas non plus de possibilité par macro.Pour naviguer facilement dans les onglets vous pouvez faire un clic droit sur les flèches de navigation en bas à gauche, vous aurez la liste de tous les onglets visibles.
Stéphane
9 mai 2022 à 9 h 04 min en réponse à : Promouvoir ligne en en-tête autre que la ligne 1 et + #103830Stéphane Lorin
ParticipantBonjour
pour “fusionner” les 2 premières lignes dans une seule , une autre approche consiste à ne transposer, à recopier vers le bas, à combiner les colonnes et à re-transposer que ces 2 premières lignes
puis à combiner avec la table de base (j’ai manuellement indiqué “source” comme 2eme argument de la liste).voici le code
let
Source = Excel.CurrentWorkbook(){[Name=”Campus”]}[Content],
#”Conserver les premières lignes” = Table.FirstN(Source,2),
#”Table transposée” = Table.Transpose(#”Conserver les premières lignes”),
#”Rempli vers le bas” = Table.FillDown(#”Table transposée”,{“Column1″}),
#”Colonnes fusionnées” = Table.CombineColumns(#”Rempli vers le bas”,{“Column1”, “Column2″},Combiner.CombineTextByDelimiter(” “, QuoteStyle.None),”Titre”),
#”Table transposée1″ = Table.Transpose(#”Colonnes fusionnées”),
#”Requête ajoutée” = Table.Combine({#”Table transposée1″, Source}),
#”En-têtes promus” = Table.PromoteHeaders(#”Requête ajoutée”, [PromoteAllScalars=true]),
#”Premières lignes supprimées” = Table.Skip(#”En-têtes promus”,2)
in
#”Premières lignes supprimées”Stéphane
2 mai 2022 à 3 h 01 min en réponse à : Changement date malgré dans Power Query fonction DateTime.FixedLocalNow #103741Stéphane Lorin
ParticipantBonjour
Lors de l’actualisation d’une requête, différents appels à la fonction DateTime.FixedLocalNow renverront toujours la même heure
Alors que DateTime.LocalNow renverra des heures différentes lors des différents appels à la fonction.
Mais si on actualise plusieurs fois la requête on aura à chaque fois une heure différente.Stéphane
Stéphane Lorin
ParticipantBonjour
pour générer une liste de dates il faut utiliser la fonction List.Dates
pour transformer cette liste suivant le format demandé vous pouvez utiliser List.Transform et Date.ToText
Cela donnera quelque chose du style := List.Transform(
List.Dates(
Date.From(DateTime.LocalNow()),
14,
#duration(1,0,0,0)),
each Date.ToText(_,[Format=”yyyy-MM-dd”]))il suffira ensuite d’intégrer cette liste dans votre requête
= Table.ExpandTableColumn(#”Requêtes fusionnées6″, “DimTravail.1”, Liste_Dates, Liste_Dates)
Stéphane
Stéphane Lorin
ParticipantBonjour
vous fractionnez votre colonne Segment suivant les “-” en ligne
vous supprimez les doublons
enfin, vous regroupez suivant les N°DC et vous combinez les segments avec Text.Combine(…,”-“)Stéphane
exemple de code
let
Source = Excel.CurrentWorkbook(){[Name=”Tableau1″]}[Content],
#”Fractionner la colonne par délimiteur” = Table.ExpandListColumn(Table.TransformColumns(Source, {{“Segment”, Splitter.SplitTextByDelimiter(“-“, QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), “Segment”),
#”Doublons supprimés” = Table.Distinct(#”Fractionner la colonne par délimiteur”),
#”Lignes groupées” = Table.Group(#”Doublons supprimés”, {“N° DC”}, {{“Liste”, each Text.Combine(_[Segment],”-“), type text}})
in
#”Lignes groupées” -
AuteurMessages