Methode-import-sigmah

publicité
Christophe Paquette - [email protected]
12/01/2012
METHODE POUR UNE MISE A JOUR AUTOMATIQUE DE TABLEAUX DE BORD
EXCEL A PARTIR DES DONNEES SIGMAH.
Ce document présente une méthode permettant d'actualiser automatiquement un tableau de
bord sous Excel à partir des données de Sigmah. L'intérêt de cette méth ode est qu'elle ne
nécessite aucune programmation ni de Macros : les services administratifs et financiers
maîtrisent généralement bien Excel et devraient pouvoir l'appliquer sans difficultés majeures.
Les pré-requis pour créer le tableau de bord automatisé sont donc : être familiarisé avec les
notions de base de Sigmah et bien maîtriser Excel, (en particulier les Tableaux croisés
dynamiques, mais aucune Macro n’est requise). Quelques notions en matière de bases de
données sont souhaitables 1. Pour l’utilisation du tableau de bord, aucun pré-requis : une fois
qu’il est créé, les mises à jour sont automatiquement faites à l’ouverture du classeur Excel.
Autrement dit, il y a un peu de boulot pour mettre au point l’outil et ensuite tout doit être
automatique (Inch Allah).
N'étant pas moi-même informaticien, excusez mes maladresses et approximations de
vocabulaire technique.
Je précise que notre organisation est en train d’évaluer la possibilité d’utiliser Sigmah : ce
système et le tableau de bord ne sont pas actuellement en utilisation opérationnelle mais
seulement installés dans une configuration de test. Dans notre association, notre tableau de
bord des projets s’appelle « le tableau A3 » : ce nom est utilisé dans l’exemple ci-joint.
Si des collègues d’autres ONG souhaitent me contacter pour des précisions, je leur répondrais avec
plaisir (dans la limite de ma disponibilité de temps !) : [email protected]
Problématique et principe de résolution.
Notre objectif est de disposer d’un tableau Excel qui comporte une ligne par projet et une
colonne par rubrique (par exemple : Nom du projet, Responsable, Zone géographique, nom du
partenaire, Date de Début, Date de Fin, Budget, Sources de financement, m ontant des frais
administratifs).
Il est assez facile d'extraire à partir d'Excel les informations d'une base de données, au moyen
d'une « requête SQL » définie dans l'onglet "Données" d'Excel. C'est d'ailleurs ainsi que seront
extraites les "données de base" d'un projet (nom du projet, dates de début et de fin, budget
prévu, etc.), qui se trouvent dans des tables de structure fixe (une colonne "numéro du projet",
une colonne "nom du projet", une colonne « Date de Début », etc.). La difficulté provient de la
structure "flexible" de Sigmah. En effet, au moyen des "modèles de projets", chaque organisation
peut définir les informations particulières qu'elle souhaite enregistrer dans le système. Ces
informations se situent dans différentes tables liées entre elles par des numéros de référence
(c’est le principe des bases de données relationnelles) . Par exemple, si nous créons un champ
"frais administratifs", une première table (la table des libellés, appelée dans Sigmah « table
Flexible_element ») comporte dans une colonne le libellé "Frais administratifs" et dans un autre
son numéro de référence (par exemple 3824). Une autre table (la table des valeurs, appelée
dans Sigmah « table Value ») comportera dans une colonne le numéro de référence (3824) et
dans une autre la valeur (5 480,00 €, par exemple). La solution consiste à extraire l'information
"brute" dans une feuille de calcul et à l'organiser dans une autre feuille au moyen de Tableaux
croisés dynamiques et de la fonction "RecherchV".
Je suis parti sans aucune connaissance des requêtes SQL et toute ma science provient d’un site web très
basique : http://sql.1keydata.com/fr/
1
Christophe Paquette - [email protected]
12/01/2012
Etapes.
1. Dans Sigmah, identifier les données que vous souhaitez importer dans Excel .
Pour éviter d'importer dans Excel la totalité des informations "flexibles" (de nombreuses
informations ne nous intéressent pas pour le Tableau de Bord), l'astuce consiste à intégrer, lors
de la préparation d'un modèle de projet dans Sigmah, un signe distinctif dans le libellé des
champs qui nous intéressent. Par exemple, au lieu de définir un champ "Frais Administratifs"
nous pouvons l'appeler "Frais Administratifs:" (remarquer les deux points). Nous aurons donc
plusieurs champs ainsi "marqués" dans le modèle de projet ("Frais Administra tifs:", "Secteur:",
"Partenaire :", etc.). Une autre solution consisterait à faire des requêtes SQL plus longues (les
requêtes SQL permettent d’extraire des informations d’une base de données, comme expliqué
ci-dessous), cette astuce permet de simplifier.
2. Dans Excel, préparer et enregistrer une requête SQL pour importer les données qui
nous intéressent dans une première feuille.
C'est l'objet de la feuille « Données-flexibles » du classeur Excel d’exemple ci-joint.
2.1. Vérifiez si vous avez dans Excel le « fournisseur de données » pour PostgreSQL. Dans
le ruban « Données », bouton « A partir d’Autres Sources », choisir « Assistant de
connexion de données » puis « Autres/Avancées » et cliquer sur « suivant ». Dans
l’image ci-dessous, le bon fournisseur est surligné. Il n’était pas présent par défaut dans
ma version d’Excel 2007, je l’ai téléchargé sur http://pgfoundry.org/projects/oledb/ .
Christophe Paquette - [email protected]
12/01/2012
2.2. Indiquez les paramètres de connexion à votre base de
données.
Ces informations sont à demander à l’administrateur
système qui a installé Sigmah dans votre organisation.
Dans mon cas, il s’agit d’une installation de test « locale »
(mon ordinateur est à la fois serveur et client) et les
paramètres sont présentés dans l’image ci-contre.
Cliquez sur « tester la connexion » pour vérifier.
La connexion étant testée, cliquons sur « annuler », nous
reviendrons plus tard sur cette étape.
2.3. Préparer la requête SQL.
Nous avons besoin d’une requête qui importe dans une feuille de calcul des informations qui
se trouvent dans plusieurs tables de la Base de Données Sigmah : Flexible_element, Value et
User_database et nous souhaitons importer quatre informations pour chaque projet : le nom
du projet, le numéro de référence des « champs flexibles » qui nous intéressent (et donc les
champs dont le libellé comporte « : »), ce libellé et la valeur. Cette requête est la suivante :
Select public.userdatabase.name, public.flexible_element.label,
public.value.id_value, public.value.value, public.userdatabase.fullname
From public.userdatabase Inner Join
public.value On public.userdatabase.databaseid = public.value.id_project
Inner Join
public.flexible_element On public.value.id_flexible_element =
public.flexible_element.id_flexible_element
Where public.flexible_element.label Like '%:%'
Un informaticien l’aurait certainement rédigée directement, pour ma part j’ai utilise un outil
graphique (un complément à Excel) appelé “SQL Drill” et construit ma requête comme
indiqué ci-dessous.
Christophe Paquette - [email protected]
12/01/2012
Copier la requête SQL, qui sera ensuite (voir ci-dessous) collée à l’endroit approprié dans
Excel.
Si vous n’êtes pas intéressés par personnaliser votre requête (par exemple pour importer les
informations dont le libellé comporterait « ; » au lieu de « : »), vous pouvez simplement copier
la requête SQL encadrée ci-dessus.
2.4. Introduire la requête SQL dans Excel.
Retournons dans la première feuille de
notre classeur Excel (la feuille appelée
« Données-flexibles » du classeur Excel
d’exemple ci-joint) et établissons une
connexion avec la base de données
comme expliqué aux points 2.1 et 2.2 cidessus. Cliquer sur OK, puis décocher la
case
« Connexion
à
une
table
spécifique », puis cliquer sur Suivant.
Donner un nom au fichier (par exemple
« MonTableau.odc » et cocher la case
« Enregistrer le mot de passe dans le
fichier » et choisir « Oui » en réponse au
message qui apparait (« le mot de passe
sera enregistré sans chiffrement, etc ».),
puis cliquer sur « Terminer ». Dans la
fenêtre qui apparaît, choisir n’importe
quelle table et cliquer sur OK. Dans la
fenêtre « Importation de données » qui apparaît, cliquer sur le bouton « Propriétés… ».
Choisir l’onglet « Définition ». Cocher la case « Toujours utiliser le fichier de connexion et,
dans le menu déroulant « type de commande », l’option « SQL ». Dans la case « texte de la
commande » : effacer le contenu et y coller la requête SQL que nous avons copiée dans
l’étape 2.3 ci-dessus.
Puis : OK.
Le plus compliqué est fait! Nous avons à présent une feuille Excel qui extrait les informations
de la base de données Sigmah. Si vous modifiez une donnée dans Sigmah (par exemple les
« Frais administratifs » augmentent à 6 300 €), vous constaterez qu’il suffit de cliquer sur le
bouton « actualiser tout » dans l’onglet « Données d’Excel » pour que
l’information soit mise à jour dans cette feuille. Il ne reste plus qu’à
ordonner l’information.
3. Dans Excel, créer un Tableau Croisé Dynamique pour regrouper les
informations de type « flexible ».
La difficulté avec les TCD est qu’ils ne peuvent comporter dans la zone
« Valeur » que des chiffres, pas du texte, alors que nous souhaitons
avoir dans notre tableau de bord des informations telles que le nom du
partenaire. Pour contourner la difficulté, nous allons regrouper dans le
TCD non pas la valeur mais le numéro d’identifiant de cette valeur
(id_flexible).
Christophe Paquette - [email protected]
12/01/2012
Nous créons donc ce TCD dans une deuxième feuille du classeur (TCD-Flexible, dans
l’exemple ci-joint), qui va rechercher les informations dans la première feuille (Donnéesflexible) et les ordonner.
Nous obtenons un TCD qui comporte une ligne par projet, les libellés (Nom du projet, nom du
partenaire, frais administratifs, etc.) en entêtes de colonnes et des numéros de référence en
valeurs (le contenu du tableau). Il ne reste plus qu’à remplacer ces numéros de références par
les valeurs, ce qui est l’objet de l’étape suivante.
4.
Dans Excel, créer un tableau qui présente les valeurs.
Dans une nouvelle feuille du classeur (dans l’exemple, la feuille « A3 Brut »), nous utilisons la
formule « RechercheV » d’Excel, qui va rechercher dans chaque cellule du TCD le numéro de
référence, puis va rechercher dans la première feuille ce numéro et le remplacer par la valeur. La
formule de base pour la Cellule B3 de notre nouvelle feuille est : RECHERCHEV('TCDFlexible'!B3;'Donnees-flexible'!$C:$D;2;FAUX). Autrement dit, identifier dans la feuille TCDFlexible le chiffre qui se trouve dans la Cellule B3 puis rechercher dans les colonnes C et D de la
feuille Donnes-flexibles ce chiffre et rapporter la valeur de la deuxième colonne (la colonne D,
c'est-à-dire « value »).
Dans l’exemple ci-joint la formule est un peu plus compliquée simplement pour des raisons
esthétiques : si la donnée recherchée n’existe pas, le résultat est un truc du genre #NA. C’est
moche, et la formule présentée dans le classeur d’exemple permet une présentation plus
satisfaisante.
=SI(ESTNA(RECHERCHEV('TCD-Flexible'!B3;'Donnees-flexible'!$C:$D;2;FAUX));"";RECHERCHEV('TCD-Flexible'!B3;'Donneesflexible'!$C:$D;2;FAUX))
Autre petite subtilité : dans la base de donnée de Sigmah, la séparation des décimales est
enregistrée sous forme de virgule dans certaines tables, mais sous forme de points dans d’autres
tables. Nous devons donc allonger un peu notre formule pour remplacer les points par des
virgules, au moyen de la fonction SUBSTITUTE.
La formule finale devient donc :
=SI(ESTNA(RECHERCHEV('TCD-Flexible'!B3;'Donnees-flexible'!$C:$F;2;FAUX));"";SUBSTITUE(RECHERCHEV('TCDFlexible'!B3;'Donnees-flexible'!$C:$F;2;FAUX);".";","))
5.
Ajouter les informations qui nous intéressent mais qui proviennent d’autres tables de Sigmah. .
Voila notre tableau de bord «brut », qui regroupe les informations « flexibles » de Sigmah.
Cependant, d’autres informations nous intéressent, qui se trouvent dans d’autres tables. Nous
allons à présent créer de nouvelles feuilles, qui comporteront les requètes SQL permettant
d’importer ces informations dans notre classeur, puis introduire dans notre feuille « A3 Brut » les
formules appropriées pour aller piocher l’information ainsi récupérée.
5.1 Le nom complet du projet
Il se trouve déjà dans la table « données flexibles » créée à l’étape 2.4. Il suffit d’aller chercher
l’information au moyen de la formule
=SI(ESTNA(RECHERCHEV(A3;'Donnees-flexible'!$A:$F;5;FAUX));"";RECHERCHEV(A3;'Donnees-flexible'!$A:$F;5;FAUX))
5.2 Les informations de base du projet.
Les informations de base se trouvent dans des tables « fixes » et non pas « flexibles » ; en
particulier la table Project. Donc, pas besoin de TCD. Il suffit, dans une nouvelle feuille du
Christophe Paquette - [email protected]
12/01/2012
classeur, de préparer la requête SQL appropriée. Pour voir cette requête, allez sur la feuille
« Project » du classeur exemple et, dans le ruban « Données » cliquez sur « connexions » puis
sur « propriétés » de la connexion « project ». Vous verrez la requète :
Select public.userdatabase.name, public.userdatabase.startdate,
public.project.close_date, public.project.end_date,
public.project.planned_budget, public.project.received_budget,
public.project.spend_budget
From public.userdatabase Inner Join
public.project On public.userdatabase.databaseid = public.project.databaseid
Nous n’avons qu’à ajouter des colonnes à notre tableau de bord (la feuille « A3 Brut »), qui irons
« piocher » l’information voulue dans cette feuille au moyen de la fonction RechercheV.
5.3 Le nom du site.
Une démarche similaire est nécessaire pour faire figurer dans le tableau le nom du site, qui se
trouve dans une autre table (la table « Partner »).
Select public.userdatabase.name, public.partner.name, public.partner.fullname
From public.userdatabase Inner Join
public.partnerindatabase On public.userdatabase.databaseid =
public.partnerindatabase.databaseid Inner Join
public.partner On public.partnerindatabase.partnerid =
public.partner.partnerid
5.4 Le informations flexibles, mais qui proviennent d’une « liste de choix ».
Pour les informations de type « liste de choix » de Sigmah, nous devons ajouter une petite étape
supplémentaire. Par exemple, dans notre association, nous avons 4 catégories de projets :
Enfance, Tourisme, Economie et Autre. L’utilisateur de Sigmah ne doit pas saisir de texte, mais
choisir une de ces options dans un menu déroulant. La valeur de cette information dans la table
« Value » de la base de données n’est pas « Economie », mais…. un nouveau numéro
d’identification, qui fait référence à une autre table de Sigmah, la table « Question-Choice ». Nous
devons donc préparer une nouvelle feuille avec une requête SQL qui va importer cette table.
Select public.question_choice_element.id_choice,
public.question_choice_element.label
From public.question_choice_element
Dans notre tableau de bord, la formule permettant de piocher l’information « Economie » et en
faire une belle présentation est donc un peu plus sophistiquée :
=SI(ESTERREUR(RECHERCHEV(CNUM(SI(ESTNA(RECHERCHEV('TCD-Flexible'!N3;'Donneesflexible'!$C:$D;2;FAUX));"";RECHERCHEV('TCD-Flexible'!N3;'Donnees-flexible'!$C:$D;2;FAUX)));'Question
Choice'!$A:$B;2;FAUX));"";RECHERCHEV(CNUM(SI(ESTNA(RECHERCHEV('TCD-Flexible'!N3;'Donneesflexible'!$C:$D;2;FAUX));"";RECHERCHEV('TCD-Flexible'!N3;'Donnees-flexible'!$C:$D;2;FAUX)));'Question
Choice'!$A:$B;2;FAUX))
5.5 Le nom du responsable du projet
Là encore, il faut commencer par créer une nouvelle feuille de calcul, qui ira chercher le nom du
responsable au moyen de la requête :
Christophe Paquette - [email protected]
12/01/2012
Select public.userdatabase.name, public.userlogin.firstname || ' ' ||
public.userlogin.name
From public.userdatabase Inner Join
public.project On public.userdatabase.databaseid = public.project.databaseid
Inner Join
public.userlogin On public.project.id_manager = public.userlogin.userid
Il y a une petite subtilité dans cette requête car nous souhaitons concaténer le prénom et le nom.
Il est donc utilisé une fonction de SQL pour cela : la double barre verticale (sur le clavier, par alt gr
6).
Dans notre feuille « A3 Brut » nous allons donc piocher l’information au moyen de la formule :
=SI(ESTNA(RECHERCHEV($A3;Tableau_Users;2;FAUX));"";RECHERCHEV($A3;Tableau_Users;2;FAUX))
6.
Dernière étape : dans Excel, préparer le tableau de bord final.
Il ne reste plus qu’à ouvrir une dernière feuille dans ce classeur pour présenter le tableau de bord
de manière esthétique, avec les colonnes dans l’ordre voulu. Pour faire plus propre, toutes les
autres feuilles peuvent être masquées : tout est à présent automatique, aucune donnée n’est à
saisir dans Excel et seule cette feuille est utilisée pour consulter l’information. Dans l’exemple cijoint, c’est la feuille « A3 ».
Attention : si vous modifiez les modèles de projet dans Sigmah, il faudra réajuster le tableau de
bord. Il est donc préférable de mettre au point le tableau de bord une fois que l’organisation a
arrêté définitivement ses modèles de projet.
Téléchargement