jeudi 6 avril 2017

Table de pilote des dépenses

Je vais construire dans LibreOffice Calc un tableau croisé dynamique (table de pilote) basé sur la table dépenses de ma base de données PostgreSQL bdtest.
Il faut bien sûr au niveau de LibreOffice Base avoir créé un fichier bdtest.odb qui permette la connexion de LibreOffice à cette base de données.
Dans LibreOffice Calc, CTRL-MAJ-F4 affiche les sources de données.  Si bdtest.odb n'y figure pas, il faut l'ajouter via Outils=> Options => Libreoffice Base => Base de données=> Nouveau.
La structure de la table dépenses est celle-ci :

           Table "public.dépenses"
  Column   |         Type          | Modifiers 
-----------+-----------------------+-----------
 référence | character(9)          | not null
 date_exec | date                  | 
 montant   | numeric(13,2)         | 
 détails   | character varying(50) | 
 code_u    | character(2)          | 

La signification de code_u se trouve dans la table utilisations :

            Table "public.utilisations"
    Column     |         Type          | Modifiers 
---------------+-----------------------+-----------
 code_u        | character(2)          | not null
 signification | character varying(20) | 

Il existe une relation d’intégrité référentielle basée sur code_u entre les 2 tables. Les seules valeurs de code_u qui peuvent exister dans dépenses doivent être définies dans utilisations (ou alors code_u dans dépenses ne doit contenir aucune valeur, c'est à dire être à la valeur NULL).
(La table dépenses est celle dont il est question dans le message précédent, et les données y sont les mêmes)

Afin de faciliter la construction du tableau croisé dynamique, je vais dans LibreOffice Base créer une requête en mode SQL. Dans l'éditeur qui surgit, je saisis :

select a.référence, a.date_exec, a.montant,
a.détails, b.signification as usage
from dépenses a, utilisations b
where a.code_u = b.code_u 

et je sauvegarde cette requête sous le nom dépensesr.
Ensuite j'ouvre LibreOffice Calc et clique sur l'icône adéquate :


Avant de sélectionner la source :


Ensuite il reste à glisser ce qui convient là où ça convient :


Je sélectionne l'ensemble des dates dans le tableau créé :


et CTRL-1 me permet de choisir le format dans les quelles ces dates seront affichées.
Procédant de même je peux également choisir le format d’affichage des montants.

Une date étant sélectionnée, un appui sur F12 donne la possibilité d'effectuer différents groupements :


Je choisis un groupement par Années et par Mois.


Je clique droit sur le tableau et dans le menu contextuel qui surgit, je sélectionne : Éditer la mise en page :


Puis je double clique sur Années car je veux des sous totaux :




Via le bouton Options (à gauche du bouton OK) je pourrais aussi choisir les années à afficher dans le tableau.

Le tableau peut facilement être actualisé par clic droit puis choisir Actualiser.

On pourrait procéder de manière indirecte : importer les données PostgreSQL dans ce qui deviendra la plage active source de la future table de pilote.
J'ai déjà exposé cette méthode ici.
Après appui sur CTRL-MAJ-F4 et choix de la requête dépensesr (de la base de données bdtest), je sélectionne l'ensemble des données (en cliquant sur le rectangle gris du coin supérieur gauche) et j'insère celles-ci dans le tableur via l'icône "Données dans le texte".

Condensé en image :


Au moment de choisir la source de la table de pilote, prendre cette fois Sélection active :


Avant d'actualiser le tableau croisé dynamique (table de pilote) produit de cette manière, il faut d'abord sélectionner puis actualiser la plage.
Attention : si la plage active s'agrandit (ajout de données), ce n'est pas répercuté dans la table de pilote.
On doit adapter manuellement celle-ci en passant par Éditer la mise en page :


Voilà pour les inconvénients de cette méthode qui présente cependant quelques avantages.
Notamment le menu contextuel obtenu en cliquant droit sur le tableau est plus riche de l'option Filtrer qui conduit à ce panneau :