# TP 1 Synthèse de l'activité bancaire Créer un tableau de bord complet à partir de données issues d’une application bancaire (comptes, transactions, titularisation…), en utilisant des fonctions d’agrégation SQL et un outil de visualisation (Grafana). ## Installation de l'environnement de travail Nous allons construire un environnement de travail pour étudier les interactions entre les différents élements. Git est un outil qui permet de garder l’historique complet d’un projet (code, schémas, configs…). Il permet de travailler à plusieurs personnes de travailler en même temps ou en parallèle sur un même projet. ```shell git clone https://sources.neotech.fr/Universite/tp.git ``` ```shell cd tp ``` Docker est une technologie pour emballer une application, ses dépendances et sa configuration dans un conteneur : un mini-système isolé, reproductible et portable. ```shell docker build -t iut/pgsql:2025-13 -f postgresql.Dockerfile . ``` ```shell git clone https://sources.neotech.fr/Universite/sql_bank.git ``` ```shell cd sql_bank ``` ```shell docker network create tp_net ``` ```shell docker run --detach --name pgsql ^ --network tp_net ^ -p "5432:5432" ^ -e "POSTGRES_INITDB_ARGS=--locale-provider=icu --icu-locale=fr-FR" ^ -e "POSTGRES_PASSWORD=geii2025" ^ -e "POSTGRES_USER=iut" ^ -v pgsql_data:/var/lib/postgresql ^ -v "./:/docker-entrypoint-initdb.d" ^ iut/pgsql:2025-13 ``` Vérifier avec DBeaver que la base de données est bien présente ### Grafana ```shell docker pull grafana/grafana:12.1 ``` ```shell docker run --detach --name grafana ^ --network tp_net ^ -p "3000:3000" ^ -e "GF_SECURITY_ADMIN_USER=admin" ^ -e "GF_SECURITY_ADMIN_PASSWORD=geii2025" ^ -e "GF_USERS_ALLOW_SIGN_UP=false" ^ -e "GF_USERS_DEFAULT_THEME=system" ^ --label "caddy=grafana.localhost" ^ --label "caddy.reverse_proxy={{upstreams 3000}}" ^ --label "caddy.tls=internal" ^ grafana/grafana:12.1 ``` ### Création d’un tableau ou d’un panneau #### Nombre total de comptes ```sql select count(*) from account ``` - Nombre total de titulaires - Solde total dans la banque - Cours des devises #### Volume total des transactions par tranche de 5 minutes ```sql select transaction_date temps, count(*) over (order by transaction_date range between interval '5 minutes' preceding and current row) from transaction ``` - Solde moyen par compte - Montant moyen des transactions ### Tâches planifiée Nous allons générer des données aléatoire dans le temps ```sql SELECT cron.schedule('* * * * *', $$call add_depot(6, (floor(random() * 100) + 50)::decimal);$$); SELECT cron.schedule('*/2 * * * *', $$call add_retrait(6, (floor(random() * 200) + 100)::decimal);$$); ``` ### Afficher le cours des devises Ajouter un graphie timeseries - `$__timeFrom()` - `$__timeTo()` - `$__timeFilter(date)` - (${currency:sqlstring}) ### Construire un histogramme avec les soldes : < 0 € 0 – 100 € 100 – 500 € 500 – 1 000 € > 1 000 €