🎉 Projet Power BI : Reproduire des rapports financiers OHADA sur Power BI ! 🎉
- Soro Lassina
- 27 oct. 2024
- 7 min de lecture
Ces derniers temps, j'ai relevé un défi de taille : reproduire des rapports d'états financiers selon les normes OHADA sur Power BI. À noter que tous les chiffres sont factices, et les clients sélectionnés ne sont pas étrangers à mon quotidien (merci à Carrefour pour les courses et à Microsoft pour les outils ! 😉). Contrairement à un tableau de bord, ce projet met en avant un rapport financier complexe, riche en détails et en structure.
Voici les principaux challenges rencontrés :
1️⃣ Format A4 pour un rendu imprimable : Comment adapter le format portrait A4 à Power BI ? J'ai ajusté les dimensions du canvas (3058x2480) pour donner un rendu qui se rapproche d'une feuille A4.
2️⃣ Page de couverture : Sur Excel, reproduire un design de page de garde est assez intuitif grâce aux cellules, mais Power BI nécessite une approche différente. Pour un rendu visuellement cohérent, j’ai opté pour une image de fond complétée par des visuels cartes.
3️⃣ Tableau des états financiers : Le challenge ici était d'incorporer plusieurs mesures et colonnes provenant de tables diverses, en gardant un bon contexte de filtre. La structure du modèle de données a été essentielle pour obtenir des soldes exacts sur les lignes appropriées.
🔍 Étapes clés de la solution 🔍
Sélection des filtres dynamiques : J'ai ajouté des segments de données pour sélectionner le client et l’année, puis les ai synchronisés sur toutes les pages pour une navigation fluide.
Modélisation des données : J'ai commencé par établir un fichier Excel de référence, définissant mes tables. Ensuite, j’ai construit un modèle en tenant compte des critères spécifiques à chaque rubrique, par exemple en fonction du nombre de chiffres et du solde (débit ou crédit).
Structure simplifiée pour les templates : Au lieu d’ajouter de nombreux templates, j’ai créé une seule table, flexible grâce aux filtres sur les rubriques, ce qui permet d'ajuster les numéros de compte dans chaque rubrique en fonction des besoins du rapport.
Calculs des soldes : J'ai conçu un modèle de données fonctionnel et logique, illustré dans le schéma ci-dessous. J’ai choisi d’utiliser une fonction de filtre personnalisée pour les soldes afin de contourner les limitations du modèle standard Power BI, notamment en utilisant une seule table de correspondance.
💡 Leçon principale :
Pour réussir un projet complexe sous Power BI, la compréhension du contexte de filtre et de ligne est primordiale. Une bonne maîtrise de ces notions aide à éviter les erreurs de modèle et simplifie les formules DAX.
En conclusion, ce projet Power BI m’a permis de repousser les limites de l'outil pour reproduire un format de rapport financier complet. Un apprentissage précieux, et j’ai hâte de voir ce que l’avenir me réserve dans le domaine de l'analyse de données !
La fonction qui me permet de récupérer le solde brut de mes comptes pour le bilan, il suffit d'en changer les paramètres pour qu'il s'adapte pour d'autres mesure.
Par exemple si je veux récupérer le solde Brute N-1, il me suffit de changer la variable "Exercice" en lui attribuant l'id de l'exercice N-1.
Brute N =
VAR Exercice = [_IDExercice_comptable]
VAR Criteres=[ListCritere]
VAR RefEnCours = SELECTEDVALUE(Table_init_Correspondance[Ref])
VAR RubriqueEnCours = SELECTEDVALUE(Table_init_Correspondance[Rubriques])
VAR LibelleEnCours = SELECTEDVALUE('Table_init_Correspondance'[Libelles])
-- Filtrer la table Correspondance pour obtenir les lignes correspondant au libellé en cours
VAR CorrespondanceFiltre =
FILTER(
ALL(Table_Correspondance_Traite),
Table_Correspondance_Traite[Ref] = RefEnCours && Table_Correspondance_Traite[Libelles]=LibelleEnCours && Table_Correspondance_Traite[Rubriques]=RubriqueEnCours
)
-- Récupérer les valeurs uniques de la colonne 'Criteres' dans CorrespondanceFiltre
VAR ListeCriteres =
DISTINCT(
SELECTCOLUMNS(
CorrespondanceFiltre,
"Critere", Table_Correspondance_Traite[Criteres]
)
)
--VAR Dist= CONCATENATEX(ListeCriteres,[Criteres],", ")
-- On va d'abord Filtrer notre Ligne Balance en fonction de la ListeCriteres
VAR TableFiltree =
FILTER(
ALL(Ligne_Balance),
-- Si l'une des conditions est vraie, la ligne est prise en compte
(Ligne_Balance[Critère 1] IN ListeCriteres) || -- Si Critère 1 est dans la liste
(Ligne_Balance[Critère 2] IN ListeCriteres) || -- Ou si Critère 2 est dans la liste
(Ligne_Balance[Critère 3] IN ListeCriteres) -- Ou si Critère 3 est dans la liste
)
-- On calcule le solde avec la table filtrée en exluant les comptes 4 et 5 ayant des soldes Positifs
VAR Solde =
CALCULATE(
[Solde],
FILTER(
TableFiltree,
Ligne_Balance[idbalance] = Exercice && [Solde]>0
)
)
-- Retourner le résultat concaténé
RETURN If(Solde=0,0,Solde) 🔍 Simplifier les Filtres Complexes dans Power BI : Mon Expérience avec le Contexte de Filtre 🔍
Dans mon projet de reproduction de rapports financiers OHADA sur Power BI, j'ai été confronté à un défi majeur : la gestion de filtres complexes sur des données comptables. Chaque rubrique avait des critères très spécifiques, qui devaient être appliqués à des colonnes précises dans ma table de balance, et cela nécessitait une approche de filtrage bien plus avancée que ce que j'avais anticipé.
🎢 Les Défis des Filtres Complexes : 1️⃣ Multiples Colonnes pour les Critères : Étant donné que chaque critère dépendait d'une colonne particulière de ma table, je ne pouvais pas me contenter d'une simple connexion entre ma table de correspondance et la table balance. Cela aurait nécessité plusieurs relations complexes pour correspondre aux différents critères des rubriques.
2️⃣ USERELATIONSHIP : Au départ, j'ai utilisé la fonction USERELATIONSHIP pour activer les relations selon le besoin, mais rapidement, cette approche s'est avérée trop rigide pour gérer la complexité des relations dans mon modèle de données.
3️⃣ TREATAS pour des Liaisons Virtuelles : Ensuite, j’ai exploré TREATAS, qui permet de créer des relations virtuelles et semblait mieux gérer les critères complexes. Cependant, cela rendait mes fonctions de calcul assez complexes, ce qui nuisait à la maintenance et à la lisibilité de mon code.
🌟 La Solution : Simplification avec LOOKUPVALUE Face à cette complexité, j'ai décidé d'opter pour une approche plus directe avec LOOKUPVALUE. Cette solution m'a permis de regrouper l'ensemble des critères pour chaque rubrique en un seul bloc, ce qui simplifie considérablement le filtrage. Par exemple, pour les immobilisations brutes (comme les comptes commençant par 2, à l'exception de 28 et 29), au lieu de jongler avec plusieurs colonnes et critères, j'ai injecté tous les critères en une fois dans ma table balance, ce qui permet un filtrage et un calcul plus efficace de la somme des montants.
✨ Leçons Retenues :
Parfois, simplifier l'approche est la meilleure solution, même avec un outil puissant comme Power BI.
LOOKUPVALUE peut s'avérer plus efficace pour gérer des critères multiples en un seul calcul, en évitant la complexité des relations.
Comprendre les subtilités des fonctions DAX est essentiel pour choisir la bonne approche en fonction des besoins du projet.
Cette expérience m'a vraiment fait comprendre l'importance de bien maîtriser le contexte de filtre et de toujours viser des solutions efficaces et faciles à entretenir.
➡️ Et vous, avez-vous rencontré des défis similaires dans Power BI ? Comment avez-vous simplifié des relations complexes ?
Comprendre le Contexte de Filtre dans Power BI : Ma Perspective Simplifiée
Aujourd'hui, je souhaite partager avec vous ma compréhension du contexte de filtre et de ligne dans Power BI, éléments essentiels pour tirer pleinement parti de ce puissant outil d'analyse. Pour rendre le concept plus clair, commençons par une distinction simple entre ces deux notions, illustrée par un exemple concret.
Contexte de Filtre vs. Contexte de Ligne
Prenons un scénario où vous avez un segment de filtre pour sélectionner un client, et sur la même page, un visuel de type tableau avec les colonnes suivantes : Produits achetés, Quantité, Prix, Vente et % Vente. Ce tableau extrait les données d’une table de ventes (en supposant que toutes les relations entre les tables sont correctement définies dans le modèle).
Quels sont les filtres appliqués ici ?
Le segment de filtre, qui limite les données au client sélectionné.
Les lignes du tableau, qui, pour chaque ligne, représentent un produit spécifique.
Pour Power BI, le contexte de filtre pour chaque ligne de produit est donc défini par le client sélectionné et par la ligne de produit elle-même.
Contexte de Ligne : Appliqué aux Calculs
Regardons maintenant les colonnes Calculées : Quantité, Prix, Vente et % Vente. Alors que Quantité et Prix sont tirés directement des données source, les colonnes Vente et % Vente nécessitent des calculs.
Vente est une mesure que l’on calcule via l'expression Vente = Prix * Quantité. Ce calcul est effectué ligne par ligne dans le tableau, c’est-à-dire pour chaque produit. C’est cela le contexte de ligne : Power BI applique ce calcul indépendamment pour chaque ligne du tableau, en itérant sur chaque produit.
C’est aussi pourquoi les fonctions se terminant par X (comme SUMX, AVERAGEX) sont associées au contexte de ligne, car elles évaluent des expressions dans le contexte de chaque ligne d'une table.
Contexte de Filtre et Contexte de Ligne : Comment Ils Fonctionnent Ensemble
Il est important de noter que le contexte de filtre et le contexte de ligne ne fonctionnent pas de manière isolée. Avant que Power BI n’applique le contexte de ligne, il considère d'abord le contexte de filtre. Ainsi, si le client 1 est sélectionné dans le segment de filtre, le calcul de Vente s'appliquera uniquement aux lignes correspondant au client 1.
Un exemple de mesure pour calculer la vente totale avec SUMX dans le contexte de ligne serait :
DAXVente = SUMX(TableVente, Prix * Quantité)Modifier le Contexte avec CALCULATE
Supposons maintenant que vous souhaitiez calculer la vente d’un autre client (par exemple, Client 2) sans modifier le segment de filtre actuel. C'est là que la fonction CALCULATE entre en jeu pour ajuster ou remplacer le contexte de filtre.
En effet, CALCULATE permet d'ajouter ou de modifier un filtre sur le calcul :
DAXVente_Client2 = CALCULATE(SUMX(TableVente, Prix * Quantité), FILTER(TableClient, NomClient = "Client 2"))Dans cet exemple, CALCULATE modifie le contexte en remplaçant le filtre actuel (sélection client dans le segment) par Client 2.
Supprimer des Filtres avec ALL
Enfin, supposons que vous souhaitiez calculer la vente totale de tous les clients, indépendamment de la sélection de client dans le segment. Dans ce cas, vous pouvez utiliser ALL pour dé-filtrer votre table :
DAXVente_Totale = CALCULATE(SUMX(TableVente, Prix * Quantité), ALL(TableVente))Ici, ALL supprime le filtre appliqué par le segment client, permettant à la mesure de considérer toutes les ventes, tous clients confondus.
Conclusion
Ma plus grande leçon dans l'utilisation de Power BI est la compréhension des notions de contexte de filtre et de contexte de ligne avant de maîtriser les formules complexes. Une fois que l'on comprend comment Power BI applique les filtres et les calculs, on peut éviter des erreurs fréquentes et structurer des rapports plus précis et performants.



Commentaires