Toutes mes réponses sur les forums
-
AuteurMessages
-
3 septembre 2022 à 12 h 08 min en réponse à : PBI – créer une table à partir de deux tables existantes #106941
Daniel
ParticipantBonjour Ina, Le Forum,
J’aurais tendance à utiliser Power Query pour arriver à constituer cette table de numéro de commandes uniques et ce à partir des requêtes déjà existantes des deux tables contenant vos données. En effet, on peut ajouter des données à la 1ère table à partir des données de la seconde table avec le menu Accueil Ajouter des requêtes, Ajouter des requêtes comme étant Nouvelles (choisir la 1ère table, puis la seconde), Il est important que les colonnes aient le même nom pour qu’elles soient ajouter correctement sinon cela créera des nouvelles colonnes, de toute façon cela va créer une troisième requête d’où vous pourrez supprimer les colonnes non nécessaires et ensuite supprimer les doublons de la colonne désirée.
N’étant pas suffisamment compétent en DAX, je ne sais pas si cela est possible de combiner deux tables existantes en une seule pour ensuite parvenir au résultat escompté.
Cordialement
DanielDaniel
ParticipantBonjour Magali, Le Forum,
Je n’ai malheureusement pas pu trouver une solution/idée pour résoudre ce problème d’accent. Je suis aussi passé par le Notepad++ et j’ai essayé différents types d’encodage (je ne suis pas un expert) sans arriver à retrouver les caractères accentués correctement. Je pense qu’il faudrait regarder comment ont été extraites ces données et voir si on ne peut pas faire quelque chose à ce niveau. D’autres colonnes sont aussi impactées par ce problème (Consignor Name, Consignee Name, Client Name MDM par exemple). Cela se concentre sur trois destinations (Czech, Latvia et Romania mais avec une seule source Rakotrans), si tu reçois un fichier par source, ce serait bien d’investiguer de ce côté pour voir si il est possible de modifier l’import de cette source.
J’espère que tu auras plus de chances avec le Notepad++ que moi avec lui.
Cordialement
DanielDaniel
ParticipantBonjour Magali, Le Forum,
Est-ce que le fichier excel reprend aussi les points d’interrogation ? Je pense que cela vient d’un problème d’encodage surtout si la source de ce fichier provient d’un fichier CSV. Est-ce que tu peux vérifier si l’enregistrement sous excel est bien dans le bon format d’encodage (Fichier, Enregistrer sous, Outils, Option Web, Codage là on peut changer le format d’encodage.
Pas certain que cela règle ton soucis, mais c’est une piste à explorer.
Cordialement
DanielDaniel
ParticipantBonjour Deltacta, Le Forum,
Alors puisque j’ai bien compris, ma proposition fait ce que tu souhaites reproduire depuis Excel mais en Power Query.
Value.Type([Data]) retourne le type de données contenue dans la colonne D, exemple : SOL10 est de type Text, 10 est de type numérique
Number.Type correspond à une valeur numérique
donc si la colonne D contient 10 : Value.Type([Data])=Number.Type retourne TRUE, d’ou le IF Value.Type([Data])=Number.Type then “GARE” else (cas des valeurs texte)Text.Upper(Text.Start(_,3))
Text.Start prend les trois premiers caractères de la chaîne de texte contenu dans la colonne D et Text.Upper les passent en majuscules.
Espérant avoir pu t’aider à résoudre ton problème.
Cordialement
DanielDaniel
ParticipantBonjour Deltacta, Stephane, Le Forum,
Autre façon de faire, si l’on accepte que les données de la colonne d’origine soient directement modifiées, l’utilisation de la fonction Table.TransformColumns fait aussi le job avec les mêmes fonctions de transformations et de test.
= Table.TransformColumns( #”Personnalisée ajoutée”, {{“Data”, each if Value.Type(_)=Number.Type then “GARE” else Text.Upper(Text.Start(_,3))}})
Cordialement
DanielDaniel
ParticipantBonjour Deltacta, Stephane, Le Forum,
Si j’ai bien compris les valeurs numériques doivent êtes transformées en “GARE” et les autres valeurs on doit prendre les trois premiers caractères et les transformés en Majuscules, si c’est bien cela le code suivant fera le job.
Début du code de la requête
let
Source = Excel.CurrentWorkbook(){[Name=”Tableau1″]}[Content],
#”Type modifié” = Table.TransformColumnTypes(Source,{{“Data”, type any}, {“Result visé”, type text}}),
#”Personnalisée ajoutée” = Table.AddColumn(#”Type modifié”, “Result Power Query”, each if Value.Type([Data])=Number.Type then “GARE” else Text.Upper(Text.Start([Data],3)))
in
#”Personnalisée ajoutée”
Fin du code de la requêteCordialement
DanielDaniel
ParticipantMagali, Le Forum,
Je pense que pour ce qui est de la France, on peut se servir de l’arrondissement pour créer le code postal Insee 75120 pour le 20ème arrondissement et ensuite faire le lien avec le fichier de correspondance pour avoir 75020, ce sera à faire avec les villes comportant des arrondissements (Lyon, Marseille, …). Je n’ai pas trouvé d’autres sites évitant cette manipulation pour avoir nos codes postaux, les autres pays sont certainement dans le même cas.
Cordialement
DanielDaniel
ParticipantBonjour Magali, Le Forum,
Effectivement, il faut traduire le code Insee en code postal et avec le lien ci-après ce sera possible au moins pour la France.
https://public.opendatasoft.com/explore/dataset/correspondance-code-insee-code-postal/table/?flg=fr
Cordialement
DanielDaniel
ParticipantMagali,
Le fichier n’est pas passé, je retente en format CSV, ai supprimé quelques lignes afin de respecter la taille de 2MO
Cordialement
DanielAttachments:
You must be logged in to view attached files.Daniel
ParticipantBonjour Magali, Le Forum,
J’ai fait un essai sur la France à partir du site cité dans mon post précédent et je te livre en pièce jointe le résultat, à toi de voir si il y a des manques ou si cela peut servir dans le cadre de ton projet.
Cordialement
DanielDaniel
ParticipantBonjour Magali, Le Forum,
En cherchant sur le Net, j’ai trouvé ce site https://download.geonames.org/export/dump/ qui pourrait répondre moyennant certaines transformations des données à ta demande (pas certain que toutes les villes soient reprises mais il y en a déjà beaucoup). Un fichier ZIP par pays contenant un fichier txt et un fichier Readme.txt et il y a aussi un fichier AllCountries.
Attention, la colonne Admin4col correspond au code ISO postal et non au code postal connu, mais il a moyen d’ajouter une autre colonne en trouvant la correspondance entre ces deux codes.
Cordialement
Daniel5 août 2022 à 12 h 35 min en réponse à : Fonction pour remplacer des caractères dans le texte d’une colonne #106198Daniel
ParticipantBonjour Magali, Le Forum,
Je reviens sur ma dernière proposition qui fonctionne correctement, j’ai cherché d’autres solutions que je te propose dans le fichier joint.
J’ai essayé de mettre quelques explications en espérant que cela t’aidera.
Cordialement
DanielAttachments:
You must be logged in to view attached files.31 juillet 2022 à 15 h 12 min en réponse à : Fonction pour remplacer des caractères dans le texte d’une colonne #106121Daniel
ParticipantBonjour Magali, Le Forum,
Je reviens sur la requête envoyée dans mon premier post, je l’ai modifié afin de répondre à ta dernière question (par contre ne connaissant pas les modifications que tu as pu apporter entre-temps, tu seras obligée de les refaire).
J’ai gardé la fonction fnEnleverAccents et j’ai ajouté des étapes pour remplacer les “Ste” en “Sainte” et “St” en “Saint” (tu les trouveras dans l’étape nommée “ListeDeListes”, et tu pourras en ajouter d’autres si besoin). J’ai aussi utilisé la fonction Power Query “Text.Trim” qui supprime les espaces devant et derrière une chaîne de caractères (voir étape “MettreVillesEnListe”) en complément de la fonction Text.Split qui découpe la chaîne de caractères en fonction d’un séparateur (en l’occurrence l’espace).
Dans l’étape “RemplacementsAFaire”, j’ai remis le tiret comme séparateur mais si tu le souhaites tu peux le remplacer par un espace.Code de la requête
let
Source = Excel.CurrentWorkbook(){[Name=”Tableau1″]}[Content],
RenommerColonneVilles = Table.RenameColumns(Source,{{“Villes”, “Villes Origine”}}),
AjoutColonneVillesTmp = Table.AddColumn(RenommerColonneVilles, “Villes_tmp”, each fnEnleverAccents([Villes Origine])),
ListeDeListes = {
{“Ste”,”Sainte”},
{“St”,”Saint”}
},
MesVilles = AjoutColonneVillesTmp,
MettreVillesEnListe = Table.AddColumn(MesVilles, “Custom”, each Text.Split(Text.Trim([Villes_tmp]), “-“)),
RemplacementsAFaire = Table.AddColumn(MettreVillesEnListe, “Villes”, each Text.Combine(List.ReplaceMatchingItems([Custom],ListeDeListes),”-“)),
SuppressionAutresColonnes = Table.SelectColumns(RemplacementsAFaire,{“Villes”})
in
SuppressionAutresColonnes
Fin du code de la requêteEn espérant avoir répondu correctement à ta demande
Cordialement
Daniel30 juillet 2022 à 11 h 49 min en réponse à : Fonction pour remplacer des caractères dans le texte d’une colonne #106109Daniel
ParticipantBonjour Magali, Le Forum,
Et en utilisant la fonction Text.Proper sur la colonne Villes, est-ce que ton problème est résolu ?
Pour bien comprendre comment souhaiterais-tu que soit écrit “La Seyne-sur-Mer”, est-ce que c’est comme cela que tu le souhaites “La seyne-sur-mer”. Aurais-tu des exemples ?
Cordialement
Bon Week-end à tous
Daniel28 juillet 2022 à 12 h 56 min en réponse à : Fonction pour remplacer des caractères dans le texte d’une colonne #106051Daniel
ParticipantBonjour Magali,
Ayant déjà été confronté à ce problème, je l’ai résolu par une fonction qui peut me servir pour d’autres tâches de ce type, cela fonctionne mais il y a certainement d’autres manières de faire.
En pièce jointe, l’exemple et bien sur la fonction utilisée.Début Fonction
let
Source = (MonTexte as text) =>
let
ListeAccents =
{
{“à”,”a”},
{“á”,”a”},
{“â”,”a”},
{“ã”,”a”},
{“ä”,”a”},
{“å”,”a”},
{“è”,”e”},
{“é”,”e”},
{“ê”,”e”},
{“ë”,”e”},
{“ì”,”i”},
{“í”,”i”},
{“î”,”i”},
{“ï”,”i”},
{“ò”,”o”},
{“ó”,”o”},
{“ô”,”o”},
{“õ”,”o”},
{“ö”,”o”},
{“ø”,”o”},
{“ù”,”u”},
{“ú”,”u”},
{“û”,”u”},
{“ü”,”u”},
{“ů”,”u”},
{“È”,”E”},
{“É”,”E”},
{“Ê”,”E”},
{“Ë”,”E”}
}
in
Text.Combine(List.ReplaceMatchingItems(Text.ToList(MonTexte), ListeAccents))
in
SourceFin Fonction
Ensuite créer une colonne personnalisée et écrire fnEnleverAccents([Ville Origine]) ou fnEnleverAccents est le nom de la fonction et [Ville Origine] est le nom de la colonne qui contient les caractères accentués.
Text.ToList(MonTexte) : crée une liste contenant chaque caractères de la ville
List.ReplaceMatchingItems(Text.ToList(MonTexte), ListeAccents) : remplace les différents caractères de Text.ToList(MonTexte] par les items de ListeAccents
et Text.Combine : remet les différentes parties du teste en un seul motPas certain d’avoir été clair dans mes explications, mais cela fonctionne correctement pour moi.
Cordialement
DanielAttachments:
You must be logged in to view attached files. -
AuteurMessages