[Base] Présentation de données sous forme d'analyse croisée

Venez découvrir tous les tutoriels, modèles et autres foires aux questions afin de maîtriser rapidement votre suite bureautique favorite.

Modérateur : Vilains modOOs

Règles du forum
Aucune question dans cette section !
Cette section est faite pour présenter les tutoriels. Si vous avez une question sur l'installation, le fonctionnement ou l'utilisation, vous devez poster dans la section du module où se produit le problème.

Ce tutoriel vous a t-il aidé à résoudre votre problème ?

Oui
5
100%
Non
0
Aucun vote
En partie
0
Aucun vote
Je ne sais pas
0
Aucun vote
 
Nombre total de votes : 5

Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 19:07
Localisation : Guyane

[Base] Présentation de données sous forme d'analyse croisée

Message par Piaf »

L'idée de départ et la procédure à suivre sont de Bernard Andruccioli dans Son tutoriel
sur OpenOffice.Base que l'on peut récupérer Ici
Les données choisies pour l'exemple sont limitées.
Elles ne servent qu'à illustrer la procédure à suivre pour obtenir le résultat escompté.
On dispose donc d'un certain nombre de vendeurs avec leur chiffre de vente quotidien.
  • Macheprot Claude 03/01/12 50,00 €
    Macheprot Claude 04/01/12 75,00 €
    Macheprot Claude 26/01/12 35,00 €
    Macheprot Claude 08/02/12 60,00 €
    Macheprot Claude 22/02/12 20,00 €
    Macheprot Claude 25/02/12 100,00 €
    Macheprot Claude 05/03/12 25,00 €
    Macheprot Claude 06/03/12 30,00 €
    Macheprot Claude 07/03/12 18,00 €
    Duguidon Antoine 10/01/12 25,00 €
    Duguidon Antoine 18/01/12 60,00 €
    Duguidon Antoine 26/01/12 35,00 €
    Duguidon Antoine 14/02/12 80,00 €
    Duguidon Antoine 23/02/12 20,00 €
    Duguidon Antoine 28/02/12 50,00 €
    Duguidon Antoine 05/03/12 35,00 €
    Duguidon Antoine 06/03/12 45,00 €
    Duguidon Antoine 07/03/12 45,00 €
    Aymé Marcel 09/01/12 40,00 €
    Aymé Marcel 14/01/12 20,00 €
    Aymé Marcel 24/01/12 35,00 €
    Aymé Marcel 07/02/12 70,00 €
    Aymé Marcel 17/02/12 30,00 €
    Aymé Marcel 21/02/12 35,00 €
    Aymé Marcel 05/03/12 80,00 €
    Aymé Marcel 06/03/12 25,00 €
    Aymé Marcel 08/03/12 35,00 €
Dans un premier temps, on crée une requête par mois calculant la somme des ventes par vendeur.
Limité pour l'exemple aux trois premiers mois de l'année.
Pour la requête rTotalJanvier
RequêteTotalJanvier.png
Les noms prénoms sont concaténés

Code : Tout sélectionner

CONCAT( CONCAT( [tVendeurs].[Prenom], ' ' ), [tVendeurs].[Nom] )
le regroupement et le critère sur le mois

Code : Tout sélectionner

MONTHNAME( [tCa].[Date] )
La fonction MONTHNAME est choisie pour que ce soit plus parlant visuellement, la fonction MONTH ferait tout aussi bien l'affaire.
L'astuce consiste à donner comme Alias de "Ca" le nom du mois concernant la requête, on utilisera cet Alias comme titre de colonne.
Même manip pour Février et Mars.
Une fois terminé on dispose de trois requêtes que l'on va utiliser dans une quatrième pour l'analyse.
RequêteAnalyse.png
On met en relation les trois requêtes sur le nom des vendeurs.
Cette façon de faire ne fonctionne qu'à partir du moment où il existe au moins une entrée par mois pour chaque vendeur.
En espérant que ça puisse être utile.
Pièces jointes
AnalyseCroisees.odb
(23.34 Kio) Téléchargé 633 fois
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 19:07
Localisation : Guyane

Re: [Base] Analyse croisée SQL direct

Message par Piaf »

Bonjour
En complément au message précédent, il est possible d'obtenir le même résultat avec une requête en SQL direct.
L'instruction SQL
SQLdirect.png
Résultats dans un formulaire.
Form.png
A+
Pièces jointes
AnalyseCroisees2.odb
(40.46 Kio) Téléchargé 400 fois
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Piaf
GourOOu
GourOOu
Messages : 5622
Inscription : 25 nov. 2011 19:07
Localisation : Guyane

Re: [Base] Analyse croisée SQL direct 2

Message par Piaf »

Bonjour
Une autre façon (plus simple :) ) d'obtenir le même résultat.
Pour HSQL

Code : Tout sélectionner

SELECT CONCAT( CONCAT( "Nom", ' ' ), "Prenom" ) "Vendeur",
SUM( CASE WHEN MONTH( "tCa"."Date" ) = 1 THEN "Ca" ELSE 0 END ) "Janvier",
SUM( CASE WHEN MONTH( "tCa"."Date" ) = 2 THEN "Ca" ELSE 0 END ) "Février",
SUM( CASE WHEN MONTH( "tCa"."Date" ) = 3 THEN "Ca" ELSE 0 END ) "Mars",
SUM( CASE WHEN MONTH( "tCa"."Date" ) = 4 THEN "Ca" ELSE 0 END ) "Avril",
SUM( "Ca" ) "Total lignes"
FROM "tCa", "tVendeurs" WHERE "tCa"."IdVendeur" = "tVendeurs"."IdVendeur" GROUP BY CONCAT( CONCAT( "Nom", ' ' ), "Prenom" )
Pour FB

Code : Tout sélectionner

SELECT COALESCE ( "tVendeurs"."Prenom" || ' ' || "tVendeurs"."Nom", "Prenom", "Nom" ) "Vendeur",
SUM( CASE WHEN EXTRACT( MONTH FROM "Date" ) = 1 THEN "Ca" ELSE 0 END ) "Janvier",
SUM( CASE WHEN EXTRACT( MONTH FROM "Date" ) = 2 THEN "Ca" ELSE 0 END ) "Février",
SUM( CASE WHEN EXTRACT( MONTH FROM "Date" ) = 3 THEN "Ca" ELSE 0 END ) "Mars",
SUM( CASE WHEN EXTRACT( MONTH FROM "Date" ) = 4 THEN "Ca" ELSE 0 END ) "Avril", SUM( "tCa"."Ca" ) "Total lignes"
FROM "tCa", "tVendeurs" WHERE "tCa"."IdVendeur" = "tVendeurs"."IdVendeur" GROUP BY "Vendeur"
En créant une vue à partir de cette requête, il est possible d'obtenir la somme par colonne, une requête UNION

Code : Tout sélectionner

SELECT * FROM "Vue1"
UNION
SELECT 'Total Colonnes', SUM( "Janvier" ) "SJ", SUM( "Février" ) "SF", SUM( "Mars" ) "SM", SUM( "Avril" ) "SA", SUM( "Total lignes" ) "ST" FROM "Vue1"
permet donc d'obtenir
Analyse.png
A+
Pièces jointes
AnalyseHSQL.odb
(40.12 Kio) Téléchargé 284 fois
Libre Office Version: 6.1.6 et Apache OpenOffice 4.1.6 Sur Xubuntu 18.04 AMD64
Répondre