Microsoft 365 TCD : impossible conserver mise en forme étiquette lignes après actualisation TCD

bencheuch

XLDnaute Nouveau
Bonjour à tous,

J'utilise Office 365.
J'ai un problème sur un TCD que je n'arrive pas à résoudre, malgré de nombreuses recherches sur Google. Pour mon entreprise, je dois créer une statistique qui mélange des données au mois et à l'année, que je vais requêter en SQL. Je ne peux pas utiliser les valeurs de TCD pour présenter mes résultats sinon j'obtiens des sommes non voulues et cela fausse mes calculs : j'utilise donc uniquement des champs en lignes.

Jusque là tout va bien mais la seule chose que je n'arrive pas à faire c'est appliquer aux champs en lignes un format de Cellule (Monétaire ou Pourcentage) qui persiste après actualisation du TCD. J'ai bien coché "Conserver la mise en forme lors de la mise à jour" et décoché "Ajuster automatiquement la largeur des colonnes lors de la mise à jour", mais la mise en forme ne persiste pas après actualisation.
De plus si je clique sur le triangle noir du champs en lignes, le bouton "Format de Nombre" n'est pas disponible, alors qu'il l'est pour les champs en valeurs (c'est logique je suis d'accord).

A noter que j'ai essayé en utilisant des champs en valeur et cela fonctionne correctement : la mise en forme persiste.

Existe-t-il une solution à mon problème ?


Je joins un petit fichier test avec 2 TCD :
  • 1 en lignes : la conservation de la mise en forme ne fonctionne pas
  • 1 en valeurs : la conservation de la mise en forme fonctionne


Tant que j'en suis à parler de TCD j'en profite aussi pour poser une question que je me pose depuis longtemps : pourquoi Excel rajoute-t-il systématiquement une valeur à "vide" quand je créé un TCD ?

Merci d'avance pour vos réponses.
 

Pièces jointes

  • 221101-FICHIER_TEST_MEF_TCD.xlsx
    16.4 KB · Affichages: 6
Dernière édition:

bencheuch

XLDnaute Nouveau
Bonjour,

@merinos et @chris : merci infiniment pour vos réponses et vos exemples. Je découvre donc PowerQuery et ça répond exactement à ce que je veux bien (@chris je comprends mieux ta signature du coup !).

En fait, je commence à me former dessus et lire/regarder des tutoriels et je constate qu'on peut sélectionner plusieurs sources de données (fichiers, requête SQL vers base de données) et en fait je suis en train de me dire que je vais revoir la structure même de la construction de nos statistiques.
Il m'apparait aujourd'hui bien plus pertinent que je me crée des grosses tables principales à partir de fichiers comme par exemple :
  • Clients et leurs Infos spécifiques
  • Lignes Factures
  • Lignes Avoirs

et que je les imbrique après dans des tableaux différents selon nos besoins, en piochant uniquement les données qui m'intéressent.

Cela me permettrait de ne construire qu'une seule requête par type de données, au lieu de multiplier les requêtes pour chaque tableau attendu et ainsi multiplier les risques d'erreur.
En plus cela pourrait nous permettre de régler pas mal de problème d'automatisation de MAJ de nos données.

Est-ce que c'est selon vous une bonne pratique ? Existe-t-il à votre connaissance des méthodes pertinentes qui partent un peu dans cette optique ?

Je commence d'ores et déjà mon apprentissage de Power Query pour construire la stat dont j'ai parlé, avec vos modèles et vos conseils.

Mille mercis pour la découverte !
 

merinos-BernardEtang

XLDnaute Accro
Salut @bencheuch ,

Cela me permettrait de ne construire qu'une seule requête par type de données, au lieu de multiplier les requêtes pour chaque tableau attendu et ainsi multiplier les risques d'erreur.
En plus cela pourrait nous permettre de régler pas mal de problème d'automatisation de MAJ de nos données.

Effectivement c'est tout le concept:

Quelques tables bien contruites contiennent tout. Les mises a jour se font en une fois et sont complètes.

Toute la "magie" se fait au niveau des mesures. Et après il ne reste qu'a présenter les résultats. Désolé d'avoir poussé un peu pour faire passer ma vision, mais j'étais persuadé qu'il fallait élargir le tableau.
 

bencheuch

XLDnaute Nouveau
Bonjour à tous,

j'ai commencé un peu mon apprentissage de Power QUery/Pivot et j'ai essayé de faire ce que je souhaite avec les exemples données par @merinos et @chris mais je bute encore.
L'une des spécificités de mon travail c'est que nous fonctionnons par catalogues (2 par an). Les statistiques attendues ne se comptent pas en année civile, mais en périodes catalogues c'est à dire du 1er octobre au 30 septembre de l'année suivante.

Ce que je voudrais faire :
Avoir un TCD issu de Power Query qui me permette d'obtenir pour tous les clients de ma liste (même ceux qui n'ont pas commandé) :
  • les chiffres CA / Marge / Marge % de l'année N
  • les chiffres CA / Marge / Marge % de l'année N-1
Et sur en face de chaque mois d'un catalogue :
  • le TOTAL CA par catalogue
  • le TOTAL CA par catalogue N-1
Le tout trié par catalogue, avec les mois dans le bon ordre (de Octobre à Septembre de l'année d'après donc).


Ce que j'ai fait :
Créer les tables :
  • SQL : données sql (issues des factures et avoirs)
  • CLIENTS : infos spécifiques clients
  • CALENDRIER : Table de dates pour jouer avec le CALCULATE PARALLELPERIOD
  • MOIS_TRI : sert à réarranger les mois dans l'ordre des catalogues

  • CATALOGUE : table "finale" dans laquelle :
  • je récupère les combinaisons unique MOIS + NUM_CATALOGUE
  • que je left join avec l'index des mois (key : "Nom du mois")
  • que je left join avec les données SQL (key : "Nom du mois", "CATALOGUE")

En mettant une valeur par défaut en cas de CA = 0
VB:
= VAR CA = SUM ( CATALOGUE[PRIX_VENTE_FINAL] ) RETURN IF ( CA > 0, CA, 0 )
et en sélectionnant les lignes de Clients depuis ma table Clients, j'arrive bien à avoir tous mes clients, même s'ils n'ont pas généré de CA.

En revanche je n'arrive pas à ordonner correctement les mois en fonction de leur ordre/index dans le catalogue, ni à afficher le bon total N-1 quand je classe par catalogue (le reste du temps ça fonctionne).

Pour construire ma table CATALOGUE j'ai fait les étapes suivantes :
  • Ajouter le nom du mois dans DONNEES_SQL pour fusionner les tables plus tard
  • Recopier la table DONNEES_SQL dans un nouveau tableau CATALOGUE
  • Conserver uniquement les mois et les numéros de catalogue
  • Fusionner avec les Période pour les numéros de catalogues et le tri des mois par index

J'en suis à cette étape, un peu bloqué car je n'arrive pas à aller plus loin.
Je ne sais pas comment organiser proprement mon modèle de données, ni lequel des champs "Nom de mois" je suis censé utiliser pour obtenir ce que je souhaite


J'en profite également pour vous demander s'il est possible de réaliser le calcul CA par Client par Catalogue à l'aide d'une MESURE ? J'ai pu réussir à le faire en utilisant l'action "Regrouper Par" de Power Query mais je me demande si c'est la bonne marche à suivre. D'autant que ça ne fonctionne pas avec le tri par Catalogue (donc je l'ai supprimé de mon fichier).

Je joins mon fichier d'exemple.
J'espère que j'ai été assez clair, ce n'est pas toujours facile à expliquer par écrit :)


Merci d'avance pour vos réponses, je continue par là-même mon apprentissage Power Query :p
 

Pièces jointes

  • 221114-POWERPIVOT_CA.xlsx
    770.6 KB · Affichages: 1

merinos-BernardEtang

XLDnaute Accro
Salut @bencheuch
En mettant une valeur par défaut en cas de CA = 0
VB:
= VAR CA = SUM ( CATALOGUE[PRIX_VENTE_FINAL] ) RETURN IF ( CA > 0, CA, 0 )
et en sélectionnant les lignes de Clients depuis ma table Clients, j'arrive bien à avoir tous mes clients, même s'ils n'ont pas généré de CA.

il y a plus facile: SUM ( CATALOGUE[PRIX_VENTE_FINAL] ) +0

Pour le calendrier...
VB:
let
    Source = {44000..51000},  //crée une liste
    #"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", "Date"}}),
    #"Inserted Text Between Delimiters" = Table.AddColumn(#"Renamed Columns", "mois", each Text.BetweenDelimiters(Text.From([Date], "fr-BE"), "-", "-"), type text),
    #"Inserted Year" = Table.AddColumn(#"Inserted Text Between Delimiters", "année", each Date.Year([Date]), Int64.Type),
    #"Changed Type1" = Table.TransformColumnTypes(#"Inserted Year",{{"année", type text}}),
    #"Nom du mois inséré" = Table.AddColumn(#"Changed Type1", "Nom du mois", each Date.MonthName([Date]), type text)
in
    #"Nom du mois inséré"


pour le classement des mois: c'est du texte... donc tu dois classer a la main.


CA_N-1 : j'ai pas compris... cela marche bien. même filtré

A+

Merinos
 

Pièces jointes

  • 221114-POWERPIVOT_CA.xlsx
    846.3 KB · Affichages: 3

Discussions similaires

Statistiques des forums

Discussions
315 094
Messages
2 116 145
Membres
112 669
dernier inscrit
Guigui2502