Power Pivot [RÉSOLU] Utilisation de la table de date dans PowerPivot

king76

XLDnaute Nouveau
Bonjour,

Dans mon modèle PowerPivot j'ai ajouté une table DATE afin de relier des FICHES à des ACTIVITÉS dans le but de pouvoir ajouter une chronologie qui me permettrait de filtrer des SUIVIS de FICHE et d'afficher les ACTIVITÉS qui ont eux lieu durant la même période (filtrage par mois)

pp-diagramme.png


Ça fonctionne très bien pour filtrer les événements de l'année 2022, par contre dès que j'ajoute une date en 2023 dans la table SUIVIS et même dans ACTIVITÉS et bien ça n'apparait pas dans ma chronologie, pourquoi ?

Quand j'ajoute ma chronologie, je me place sur le TCD issu de la table ACTIVITÉS et voici ce qui s'affiche :

pp-inserer-chrono.png


Je choisis bien sûr : Calendar > Date

Pour toute l'année 2020, je peux filtrer depuis la chronologie tout ce qui provient de SUIVI DES FICHES et ACTIVITÉS, c'est presque un miracle sachant que j'ai relier deux tables qui n'ont pas vraiment de lien ensemble.

Je pourrais bien sur choisir de relier aussi sur Activités > Date, mais je perdrais tous les liens vers les données de Suivi des fiches.
Si je choisis Suivi des fiches > Date du suivi, ça ne marche pas avec les ACTIVITÉS, normal, vu que ce sont deux tables différentes.

Le seul cas ou ca fonctionne pour les dates des activités de 2023, c'est quand dans mon modèle, j'ai juste la table DATE avec la table ACTIVITÉS, dans ce cas la, je peux relier la chronologie à CALENDAR > Date et ca marche, je vois les entrées de 2023 d'activités.

Ce que je pense, c'est que le système doit possiblement vérifier si y'a des dates similaires à la fois dans SUIVI DES FICHES et ACTIVITÉS, qu'en dites-vous ? Toutefois pour l'année 2022, je suis pas certain que ce soit le cas. Certes il y a quelques dates en 2022, dans les deux tables, mais pas spécialement les mêmes.

Une idée ?

Merci.
 

merinos

XLDnaute Accro
Salut @king76 ,

Tu as créé ta table date comment?
Un fichier joint aiderait...

Perso je n'utilise JAMAIS la fonction automatique de création de calendrier: cela crée des problèmes comme celui que tu as.

Et en plus tu ne peux transformer ton calendrier comme tu le veux.

Ceci est mon calendrier (developpé ppour une boite dont l'année commence le 1° avril)
VB:
// Creation of a calendar from nothing

let
    Source = List.Numbers( 42000, 4000),
    // create a list of 5000 days as from day 41270 (27th Dec 2012)
    // this goes until 4th Sept 2026
    // at that time the start point should be changed or the calender should be made longer (5500 days or 6000 days)

    #"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Changed Type" = Table.TransformColumnTypes(#"Converted to Table",{{"Column1", type date}}),
    #"Renamed Columns" = Table.RenameColumns(#"Changed Type",{{"Column1", "dday"}}),
// now we have the list as calendar

    Add.Calender.Month = Table.AddColumn(#"Renamed Columns", "MMnth", each Date.Month([dday])),
    Add.Calendar.Year = Table.AddColumn(Add.Calender.Month, "yyear", each Date.Year([dday])),

//Create accounting month & year
    Add.Temp1 = Table.AddColumn(Add.Calendar.Year, "temp1", each ([MMnth]+9+12)),
    #"Added Custom3" = Table.AddColumn(Add.Temp1, "RoundDwn", each Number.RoundDown(([temp1])/12)),
    #"Added Custom4" = Table.AddColumn(#"Added Custom3", "AccMonth.Fig", each [temp1]-12*[RoundDwn]),
    #"Replaced Value" = Table.ReplaceValue(#"Added Custom4",0,12,Replacer.ReplaceValue,{"AccMonth.Fig"}),
    #"Removed Columns1" = Table.RemoveColumns(#"Replaced Value",{"temp1", "RoundDwn"}),
    //Create Acc Year
    #"Added AccYear" = Table.AddColumn(#"Removed Columns1", "AccYear", each [yyear]+ (if [AccMonth.Fig]>9 then -1 else 0)),
    #"Added AccMonth" = Table.AddColumn(#"Added AccYear", "AccMonth ", each Text.End(Number.ToText([AccMonth.Fig]+100),2),type text),
    #"Removed Columns" = Table.RemoveColumns(#"Added AccMonth",{"AccMonth.Fig"}),
    #"Changed  ToText" = Table.TransformColumnTypes(#"Removed Columns",{{"MMnth", type text}, {"yyear", type text}, {"AccYear", type text}, {"AccMonth ", type text}}),

    #"Added AccQuarter" = Table.AddColumn(#"Changed  ToText", "AccQuarter", each Number.RoundDown((Number.FromText([#"AccMonth "])-1)/3)+1,type text),
    #"Changed Type1" = Table.TransformColumnTypes(#"Added AccQuarter",{{"AccQuarter", type text}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type1", "Acc Quarter", each Text.Combine({"Q-",[AccQuarter]}),type text),
    #"Removed Columns2" = Table.RemoveColumns(#"Added Custom",{"AccQuarter"}),
    #"Added Custom1" = Table.AddColumn(#"Removed Columns2", "AccMonth#", each [#"AccMonth "]),
    #"Changed Type2" = Table.TransformColumnTypes(#"Added Custom1",{{"AccMonth#", Int64.Type}})
in
    #"Changed Type2"
 

king76

XLDnaute Nouveau
WOW ça marche avec ton calendrier, c'est trop génial, j'avais pris celui de base offert depuis l'interface de PowerPivot. Trop content, merci !

Par contre, je ne sais pas comment l'améliorer, dans le sens que ce fichier va être réinitialiser à chaque année le 1er juillet et les données seront analysés jusqu'au 30 juin de l'année d'après. Le calendrier pourrait commencer avant et aller après cette date, ça ne changera pas grand-chose pour l'utilisateur après tout ?

Sauf que si le fichier est utilisé encore 5 ans, il faudrait générer des dates pour les 5 prochaines années. Dans le premier paramètre de ton Query, je dois changer la valeur 4000, c'est bien ça ? Plus j'augmente le chiffre et plus la requête va contenir de ligne. À chaque fois qu'il faudra mettre à jour les requêtes, ça va prendre plus de temps ?

Est-il possible de changer ça à tous les ans facilement ? La date de début. Dans un des cellules si je mets le chiffre de départ ou une date, est-ce que dans la Query, on peut aller lire cette valeur pour lancer le calcul sur une seule année ?

Merci
 

king76

XLDnaute Nouveau
J'ai trouvé comment aller chercher la valeur dans une table et générer une liste de 365 jours ouf !

VB:
let
let
  Source = Excel.CurrentWorkbook(),
    ADM_annee = Source{[Name="ADM_annee"]}[Content],
    #"Type modifié" = Table.TransformColumnTypes(ADM_annee,{{"Début d'année", type date}}),
    #"Personnalisée ajoutée" = Table.AddColumn(#"Type modifié", "Date", each List.Dates([#"Début d'année"],365,#duration(1, 0, 0, 0))),
    #"Colonnes supprimées" = Table.RemoveColumns(#"Personnalisée ajoutée",{"Début d'année"}),
    #"Calendrier développé" = Table.ExpandListColumn(#"Colonnes supprimées", "Date"),
    #"Type modifié1" = Table.TransformColumnTypes(#"Calendrier développé",{{"Date", type date}})
in
    #"Type modifié1"

Voilà ça fonctionne, sauf que pour la chronologie, je suis obligé de cliquer sur TOUS (donc les connexions inactives ?) pour trouver celui de mon calendrier (Calendrier 1 > Date) et le sélectionner.

chrono-inactives.png
 
Dernière édition:

merinos

XLDnaute Accro
VB:
let
    LaList = List.Numbers( Number.From(#date(Date.Year(DateTime.LocalNow())-5,1,1)) , 7500),
    #"Converted to Table" = Table.FromList(LaList, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Changed Type" = Table.TransformColumnTypes(#"Converted to Table",{{"Column1", type date}}),
    #"Sorted Rows" = Table.Sort(#"Changed Type",{{"Column1", Order.Descending}}),
    #"Renamed Columns" = Table.RenameColumns(#"Sorted Rows",{{"Column1", "Date"}})

in #"Renamed Columns"
 
Dernière édition:

merinos

XLDnaute Accro
c'est le debut de la construction d'un clendrier de 7500 jours .
il commence le 1° janvier il y a 5 ans.

Reste à ajouter les colonnes années , mois, ... ce qu'on veut...
Bref ce calendrier suivra le temps... cela règle le probleme de calendier créé en 2012 et qui n'est plus assez long.

7500 jours c'est pas gand chose pour la memoire.
 

king76

XLDnaute Nouveau
c'est le debut de la construction d'un clendrier de 7500 jours .
il commence le 1° janvier il y a 5 ans.

Reste à ajouter les colonnes années , mois, ... ce qu'on veut...
Bref ce calendrier suivra le temps... cela règle le probleme de calendier créé en 2012 et qui n'est plus assez long.

7500 jours c'est pas gand chose pour la memoire.
Ah ok je pensais en regardant le code que tu avais fait un calendrier qui prenait l'année en cours, puis qui se positionnait sur le mois de juin pour commencer à se construire. Ca aurait pu être un algorithme intéressant pour mon cas de partir toujours du 1er Juillet automatiquement mais il aurait fallu faire un test avant, si la date du jour est entre le 1er juillet et 31 décembre, génère le calendrier à partir du 1er juillet de cette année sinon génère le calendrier à partir du premier juillet de l'année précédente.

Mais bref je vais garder mon code qui marche bien.

Merci pour ton aide
 

Discussions similaires

Réponses
1
Affichages
137
Réponses
6
Affichages
342

Statistiques des forums

Discussions
312 209
Messages
2 086 266
Membres
103 167
dernier inscrit
miriame