Analyse de données : interroger une base de données avec une requête SQL

L’analyse de données fait partie du quotidien des professionnels de la comptabilité et de la finance. Excel est généralement l’outil d’analyse plébiscité pour ce genre de tâches mais le langage de requête SQL (acronyme pour Structured Query Language ou langage de requête structuré) est particulièrement adapté pour réaliser les tâches d’extraction et de mise en forme des données. De nombreux SGBDR, tel ACCESS, disposent de ce langage.

La Revue Française de Comptabilité a publié il y a quelques années un article que j’ai écrit sur ce sujet.

Table de données PlanComptable

Table de données PlanComptable

En synthèse, le langage SQL permet d’effectuer des calculs plus ou moins complexes et d’extraire (SELECT) des données d’une ou plusieurs tables de données (FROM) répondant à des critères (WHERE). Le résultat de ces extractions sera utilement analysé, par exemple, à l’aide d’un tableau croisé dynamique ACCESS ou EXCEL.

Structure type d’une requête SQL :

Une requête SQL est constituée de plusieurs clauses dont a minima les clause SELECT et FROM.

Sélection (SELECT) des champs de données à extraire :

Le clause SELECT précise les champs de données à extraire des tables, FROM le nom de la table contenant les données à extraire.

Par exemple, la requête suivante :

Liste le numéro de compte (champ Compte) et le libellé des comptes (champ LibelléCompte) du plan comptable (table PlanComptable) :

RésultatRequête1

Pour sélectionner tous les champs, on utilise le joker (*).

Création de champs calculés :

La clause SELECT permet également de créer des champs de données calculés. Par exemple, ajouter un champ racine de compte sur trois positions :

La fonction Left(chaîne,longueur) extrait d’une chaîne de caractères nommée chaîne un certain nombre (longueur) de caractères les plus à gauche ; ainsi Left(‘512000’,3) renvoie 512. L’instruction AS affecte un nom au champ de données calculé (chaque champ de données devant comporter un nom). La fonction Right réalise la même chose mais par la droite.

Résultat de la requête :

RésultatRequête2

Autres fonctions utiles :

  • Len(champ) : donne le nombre de caractères compris dans le champs,
  • Val(champ) : convertit une chaîne alphanumérique en un résultat numérique intégrable dans une formule de calcul,
  • Abs(champ) : ôte le signe d’un nombre, ainsi Abs(-1) renvoie 1,
  • Year(champ au format date), Month(champ au format date) : renvoie l’année (2017), le mois (07) de la date 24/07/2017,
  • Weekday(date,1) : donne le numéro du jour de la semaine d’une date ; 1 étant le dimanche. Cette fonction existe également sous EXCEL sous le nom « JourSem », elle fonctionne de la même manière,
  • Hour(date) : fournit l’heure comprise dans un numéro de série donné (date).

Il est également possible de réaliser des calculs plus ou moins complexes mêlant fonctions, opérateurs arithmétiques (+, -, *, /), opérateurs de comparaison (<, >, =) et opérateurs booléens (AND, OR) ; exemple de calcul d’un solde comptable sur une balance générale :

RésultatRequêteBG1

Pour détaxer un montant TTC (sur la base d’un taux de TVA à 20 %) :

TTC/1.20 AS HT.

L’ordre d’exécution des calculs suit les règles de priorité généralement admises en mathématique et en informatique ; l’utilisation des parenthèses permet de changer l’ordre d’exécution.

Champ calculé conditionnel :

L’instruction iif(condition,résultat1,résultat2) renvoie résultat1 ou résultat2 en fonction de la réalisation de la condition. L’instruction iif correspond au test conditionnel IF… THEN… ELSE du langage BASIC.

Par exemple, pour calculer une remise de fin d’année de 1 % pour chaque client réalisant un chiffre d’affaires dépassant 500 K€ :

iif(CA>500000,0.01,0)*CA AS RFA.

Autres exemples :

  • pour éviter une division par zéro, la formule iif([champ1]=0,0,[champ2]/[champ1]) renvoie le résultat 0 (zéro) quand le champ [champ1] est nul, dans le cas contraire la division de [champ2] par [champ1] est effectuée.
  • la fonction IIF est également utilisée lorsqu’un champ numérique est vide. En effet, si ce champ est intégré dans une formule de calcul, le calcul ne sera pas exécuté puisque le contenu du champ n’est pas numérique. La formule iif([champ] is null,0,[champ]) remplace les champs vides par zéro.

Conditions (WHERE) :

La clause WHERE conditionne l’extraction de données au respect de critères. Dans cet exemple, ne seront listés que les comptes égaux (=) à 512100000 ou (OR) à 512200000 :

RésultatRequêteBG2

L’opérateur OR constate la réalisation de la condition si l’un des deux critères est rempli. L’opérateur AND constate la réalisation de la condition si les deux critères sont remplis. Les opérateurs de comparaison <, >, = sont également utilisables en combinaison ou non avec les opérateurs AND et OR :

WHERE (CA>=1000 AND CA<5000) OR (CA>=50000 AND CA <150000)

Les fonctions Left, Right… et les parenthèses évoquées pour la clause SELECT peuvent également être appelées pour définir les critères dans la clause WHERE.

Tri des résultats (SORT BY) :

Pour trier les résultats de la requête, il suffit de faire suivre la clause SORT BY par les champs à classer dans l’ordre ascendant (du plus petit au plus grand) :

Pour trier dans l’ordre descendant : SORT BY Compte DESC.

Le résultat d’une requête est interrogeable par une autre requête ou au sein de la même requête (dans le cadre d’une sous-requête).

Exemples pratiques :

Approfondir le sujet : Maîtriser le langage de requête SQL / les opérateurs / Analyse de données

Share Button
The following two tabs change content below.
Benoît RIVIERE
Après seize années passées en cabinet d’expertise-comptable et de commissariat aux comptes (où j’ai exercé comme expert-comptable et chef de mission audit), j’ai pris le poste de directeur comptable d’un groupe de distribution automobile en novembre 2014. Au cours de ma carrière, j’ai acquis une expérience significative en audit et en exploitation des systèmes d’information (analyse de données, automatisation des tâches, programmation informatique) au service de la production des comptes annuels et consolidés. C’est cette expérience personnelle et ma passion pour l’informatique que je partage sur ce blog. Mon CV / Réalisations personnelles et projets informatiques / Ma collection / Me contacter

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *