Power Query Afficher N° semaine ISO dans requête Power Query

  • Initiateur de la discussion Initiateur de la discussion SPEA
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

SPEA

XLDnaute Occasionnel
Bonjour,
j'ai une requête Power query qui me permet de concatener plusieurs tables et je voudrais ajouter une colonne comportant le N° de semaine ISO pour chaque date.
La fonction Date.WeekOfYear numérote suivant le standard Americain et il n'y a apparemment pas l'équivalent pour la norme ISO 8601.

Y a t'il une astuce pour avoir le N° de semaine ISO, ou si quelqu'un a une table de temps dynamique sympa je suis preneur (N° semaine ISO, Mois, Trimestre, jours ouvrés, etc...).

Merci.
 
Bonjour,

voici pour un exemple de table dynamique de dates et numéro semaine iso, trimestre etc

Source : https://www.developpez.net/forums/d...wer-bi/modele-table-dates-code-m-num-sem-iso/

cordialement
Bonjour,

J'avais trouvé cette source mais dans ce cas il faut renseigner la date de début et la date de fin, je voudrais que ces dates se modifient dynamiquement en fonction du champs date de ma table de données.

J'ai trouvé le modèle qui me serait adapté mais c'est payant :-(
 
Bonjour,

J'ai trouvé le modèle qui me serait adapté mais c'est payant

Alors il faut vous y coller.

Voici une fonction pour la semaine iso que vous pouvez appeler en ajoutant une colonne.
VB:
(DateRef as date) =>
let
        Jeudi = Date.AddDays(DateRef, -Date.DayOfWeek(DateRef,1) + 3),
        UnJanvier = #date(Date.Year(Jeudi),1,1),
        EcartJours = Duration.Days(Duration.From(Jeudi - UnJanvier)),
        SemaineISO=  Number.RoundDown(EcartJours/7)+1
in
    SemaineISO

Créez une nouvelle requête vide, affichage 'Editeur avancé'.
Supprimez les lignes écrites automatiquement par PQ et collez le texte de la fonction ci-dessus.
Fermez et nommez votre requête 'fnNumSemaineISO'

Dans votre requête, insérez une étape avec pour formule (adapter les parties en gras à votre contexte):

=Table.AddColumn(#"Nom étape précédente", "Nom de la nouvelle colonne", each fnSemaineISO([Nom Colonne de Dates]))


Cordialement.
 
Dernière édition:
Bonjour,



Alors il faut vous y coller.

Voici une fonction pour la semaine iso que vous pouvez appeler en ajoutant une colonne.
VB:
(DateRef as date) =>
let
        Jeudi = Date.AddDays(DateRef, -Date.DayOfWeek(DateRef,1) + 3),
        UnJanvier = #date(Date.Year(Jeudi),1,1),
        EcartJours = Duration.Days(Duration.From(Jeudi - UnJanvier)),
        SemaineISO=  Number.RoundDown(EcartJours/7)+1
in
    SemaineISO

Créez une nouvelle requête vide, affichage 'Editeur avancé'.
Supprimez les lignes écrites automatiquement par PQ et collez le texte de la fonction ci-dessus.
Fermez et nommez votre requête 'fnNumSemaineISO'

Dans votre requête, insérez une étape avec pour formule (adapter les parties en gras à votre contexte):

=Table.AddColumn(#"Nom étape précédente", "Nom de la nouvelle colonne", each fnSemaineISO([Nom Colonne de Dates]))


Cordialement.
Super merci Roblochon, ca marche impec 👍
 
Bonjour Roblochon,
J'ai un problème avec ma requete Query : elle ne prend pas ma table SESSION !!!
Ci-joint mon fichier.
Je voudrais faire une requete avec les 3 tables SESSION, FORMATEUR et STAGIAIRE.
Chaque fois que je veux ajouter la table SESSION, la requete se ferme ?
Où est le problème ?
Merci de bien vouloir m'éguiller.
 

Pièces jointes

Je me suis amusé a créer le query pour employer ceci dans le datamodel...

donc voici le calendrier...

Code:
// modification simple du code trouvé 
//https://www.developpez.net/forums/d2060820/logiciels/solutions-d-entreprise/business-intelligence/microsoft-bi/power-bi/modele-table-dates-code-m-num-sem-iso/
//let
//CreateDateTable = (StartDate as date, EndDate as date, optional Culture as nullable text) as table =>
let
StartDate = Date.FromText("01/01/2005") , //Date.From(38353),
EndDate= Date.FromText("01/01/2030") , //Date.From(47848),
Culture= "en-US",
//Culture= "fr-BE",


//Calcul du nombre de jours du calendrier
DayCount = Duration.Days(Duration.From(EndDate - StartDate)),
//lister les dates pour la durée et créer la table
Source = List.Dates(StartDate,DayCount,#duration(1,0,0,0)),
TableFromList = Table.FromList(Source, Splitter.SplitByNothing()),
//Application du format date à la colonne crée et renommage
ChangedType = Table.TransformColumnTypes(TableFromList,{{"Column1", type date}}),
RenamedColumns = Table.RenameColumns(ChangedType,{{"Column1", "DateRef"}}),
//Année à 4 caractères
InsertYear = Table.AddColumn(RenamedColumns, "Annee", each Date.Year([DateRef])), ChangeType1=Table.TransformColumnTypes(InsertYear,{{"Annee", Int64.Type}}),
//Trimestre chiffre seul
InsertQuarter = Table.AddColumn(ChangeType1, "Trimestre", each
Date.QuarterOfYear([DateRef])), ChangeType2=Table.TransformColumnTypes(InsertQuarter,{{"Trimestre", Int64.Type}}),
//N° Mois (de 1 à 12)
InsertMonth = Table.AddColumn(ChangeType2, "MoisNum", each Date.Month([DateRef])), ChangeType3=Table.TransformColumnTypes(InsertMonth,{{"MoisNum", Int64.Type}}),
//Jour du mois
InsertDay = Table.AddColumn(ChangeType3, "JourMois", each Date.Day([DateRef])), ChangeType4=Table.TransformColumnTypes(InsertDay,{{"JourMois", Int64.Type}}),
//Date en nombre ISO
InsertDayInt = Table.AddColumn(ChangeType4, "DateNombreISO", each [Annee] * 10000 + [MoisNum] * 100 + [JourMois]), ChangeType7=Table.TransformColumnTypes(InsertDayInt,{{"DateNombreISO", Text.Type}}),
//Nom du mois
InsertMonthName = Table.AddColumn(ChangeType7, "MoisNom", each Date.ToText([DateRef], "MMMM", Culture)), ChangeType8=Table.TransformColumnTypes(InsertMonthName,{{"MoisNom", Text.Type}}),
//N° Mois à deux chiffres
InsertMonthNum2 = Table.AddColumn(ChangeType8, "MoisNum2", each Date.ToText([DateRef], "MM", Culture)), ChangeType9=Table.TransformColumnTypes(InsertMonthNum2,{{"MoisNum2", Text.Type}}),
//Année-Mois
InsertYearMonth = Table.AddColumn(ChangeType9, "Annee-Mois", each Date.ToText([DateRef], "yyyy-MM", Culture)), ChangeType10=Table.TransformColumnTypes(InsertYearMonth,{{"Annee-Mois", Text.Type}}),
//Nom du mois et année
InsertCalendarMonth = Table.AddColumn(ChangeType10, "MoisNomAnnee", each (try(Text.Range([MoisNom],0,4)) otherwise [MoisNom]) & " " & Number.ToText([Annee])), ChangeType11=Table.TransformColumnTypes(InsertCalendarMonth,{{"MoisNomAnnee", Text.Type}}),
//Année-Trimestre (préfixé d'un T)
InsertCalendarQtr = Table.AddColumn(ChangeType11, "Annee-Trimestre", each Number.ToText([Annee]) & " T" & Number.ToText([Trimestre])), ChangeType12=Table.TransformColumnTypes(InsertCalendarQtr,{{"Annee-Trimestre", Text.Type}}),
//Jour de la semaine (numérique)
InsertDayWeek = Table.AddColumn(ChangeType12, "JourSemaineNum", each
Date.DayOfWeek([DateRef])), ChangeType6=Table.TransformColumnTypes(InsertDayWeek,{{"JourSemaineNum", Int64.Type}}),
//Nom du Jour de la semaine (langue selon culture ou langue de Windows)
InsertDayName = Table.AddColumn(ChangeType6, "JourSemaineNom", each Date.ToText([DateRef], "dddd", Culture), type text),
//Calcul du jour de fin de semaine
InsertWeekEnding = Table.AddColumn(InsertDayName, "DateFinSemaine", each Date.EndOfWeek([DateRef]), type date),
//Calcul du jour de fin de mois
InsertMonthEnding = Table.AddColumn(InsertWeekEnding, "DateFinMois", each Date.EndOfMonth([DateRef]), type date),
//Calcul numéro de semaine ISO (Europe) en 4 étapes
//1. Determiner la date du jeudi-Thursday de la semaine en cours
InsertCurrThursday = Table.AddColumn(InsertMonthEnding, "CurrThursday", each Date.AddDays([DateRef], -Date.DayOfWeek([DateRef],1) + 3), type date),
//2. Determiner le 1er janvier de la date (cf étape 1)
InsertFirstJan = Table.AddColumn(InsertCurrThursday, "FirstJan", each
#date(Date.Year([CurrThursday]),1,1),type date),
//3. Calculer le nombre de jours entre le 1er janvier et le jeudi (cf étape 1)
InsertDuration= Table.AddColumn(InsertFirstJan, "Duration", each Duration.Days(Duration.From([CurrThursday] - [FirstJan])), type number),
//4. Diviser le nombre de jours calculé à l'étape 3 par 7, arrondir en dessous et ajouter 1
InsertISOWeekNum = Table.AddColumn(InsertDuration, "NumSemISO", each Number.RoundDown([Duration]/7)+1), ChangeType5=Table.TransformColumnTypes(InsertISOWeekNum,{{"NumSemISO", Int64.Type}}),
//Supprimer les colonnes de calculs inutiles
RemovedColumns = Table.RemoveColumns(ChangeType5, {"CurrThursday","FirstJan","Duration"})
in
RemovedColumns
//in
//CreateDateTable

pas mal comme systeme...
 
Bonjour Roblochon,
J'ai un problème avec ma requete Query : elle ne prend pas ma table SESSION !!!
Ci-joint mon fichier.
Je voudrais faire une requete avec les 3 tables SESSION, FORMATEUR et STAGIAIRE.
Chaque fois que je veux ajouter la table SESSION, la requete se ferme ?
Où est le problème ?
Merci de bien vouloir m'éguiller.
 
Bonjour,



Alors il faut vous y coller.

Voici une fonction pour la semaine iso que vous pouvez appeler en ajoutant une colonne.
VB:
(DateRef as date) =>
let
        Jeudi = Date.AddDays(DateRef, -Date.DayOfWeek(DateRef,1) + 3),
        UnJanvier = #date(Date.Year(Jeudi),1,1),
        EcartJours = Duration.Days(Duration.From(Jeudi - UnJanvier)),
        SemaineISO=  Number.RoundDown(EcartJours/7)+1
in
    SemaineISO

Créez une nouvelle requête vide, affichage 'Editeur avancé'.
Supprimez les lignes écrites automatiquement par PQ et collez le texte de la fonction ci-dessus.
Fermez et nommez votre requête 'fnNumSemaineISO'

Dans votre requête, insérez une étape avec pour formule (adapter les parties en gras à votre contexte):

=Table.AddColumn(#"Nom étape précédente", "Nom de la nouvelle colonne", each fnSemaineISO([Nom Colonne de Dates]))


Cordialement.
Bonjour,

je pense avoir bien suivi vos conseils, néanmoins la colonne ajoutée me renvoie ERROR
j'ai créé une requete qui devient une fonction suite a la copie de votre code puis j'ajoute une colonne s'appelant "Creation week" dans laquelle je tape le code :
Table.AddColumn([Personnalisée ajoutée], [Creation week] , each fnNumSemaineISO([Creation date]))

Personnalisée ajoutée etant le nom de l'etape précedente

auriez vous une idée de retour ERROR?

merci par avance pour votre aide
 
Bonjour

Le deuxième paramètre de Table.AddColumn doit être le nom de la colonne (chaîne de caractère entre guillemets)

Table.AddColumn([Personnalisée ajoutée], "Creation week" , each fnNumSemaineISO([Creation date]))

Références des fonctions (parfois obscure comme d'habitude chez microsoft mais utile) :

Cordialement
 
Bonjour

Le deuxième paramètre de Table.AddColumn doit être le nom de la colonne (chaîne de caractère entre guillemets)

Table.AddColumn([Personnalisée ajoutée], "Creation week" , each fnNumSemaineISO([Creation date]))

Références des fonctions (parfois obscure comme d'habitude chez microsoft mais utile) :


Cordialement
Bonjour,

Super cela fonctionne maintenant.
Merci bcp pour votre aide et réactivité.

Cdlt
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour