Les précédents chapitres,
bien que basés sur des exemples, montraient surtout une
utilisation théorique de Docker. Nous allons dans ceux
qui suivent tenter de donner un tour un peu plus industriel à l’utilisation
de ces conteneurs. L’idée est de montrer ceci de manière
progressive, en partant d’une application exemple architecturée
avec plusieurs modules et en faisant évoluer progressivement
le déploiement pour qu’il soit entièrement pris
en charge par Docker.
1. Architecture
Pour la suite du livre, notre fil rouge sera
un ensemble applicatif composé de services, dans une approche
SOA (Service Oriented Architecture,
c’est-à-dire architecture orientée services).
Il ne s’agit pas d’une vraie application industrielle, car la complexité de
celle-ci rendrait la lecture plus difficile et au final brouillerait
les messages sur Docker. Il ne s’agira pas non plus d’une architecture
microservices comme l’application exemple des éditions
précédentes, car une saine découpe n’a
pas nécessairement besoin d’être très
granulaire et l’auteur souhaitait mettre l’accent sur la bonne définition
des responsabilités et le couplage lâche autorisé par
les approches standardisées. Toutefois, son architecture ainsi
que l’infrastructure supportant son développement, sa compilation
et sa mise en œuvre seront aussi proches que possible de
celles mises en œuvre par l’auteur dans le cadre
de sa profession de directeur technique d’un éditeur de
logiciels.
Pour rappel, le début de l’exercice
nécessite de se positionner sur la version 1.1.0 du projet,
de façon que le code source ne contienne pas déjà les
fichiers nécessaires pour Docker et que le lecteur soit
en situation de réaliser les manipulations par lui-même.
Positionnez-vous sur le répertoire TestOIDCBlazorWASM dans lequel le dépôt
a été cloné.
Si ce n’est pas déjà fait,
positionnez-vous sur la bonne version en tapant la commande suivante
:
git checkout v1.1.0
2. Principes de construction
Le reste du présent chapitre est
consacré au détail de comment modifier l’application
exemple de façon à la déployer dans Docker.
Nous allons pour cela utiliser l’environnement de développement
intégré Visual Studio 2022 et en particulier la
fonctionnalité de prise en charge de Docker :
Mais le but ici est bien entendu de comprendre
en profondeur les implications de cette simple commande, en décrivant
les fichiers Dockerfile et en les adaptant
si besoin. Et le fait de traiter l’application complète
nécessite aussi de penser à son déploiement
d’un seul coup, ce qui rendra nécessaire la création d’un
fichier docker-compose.yml.
Enfin, pour compléter une approche
qui se veut la plus proche possible d’un déroulement dans
un cadre professionnel, le chapitre suivant montrera l’inclusion
de tout ce travail dans une usine d’intégration et de déploiement
continu, en utilisant une cible de déploiement qui ne sera
plus une machine unique, mais un cluster Docker.
L’ordre choisi pour l’explication détaillée
des services est celui...
Se connecter aux données
Les concepts clés
Circulation des données
Comprendre la façon dont circulent
et sont stockées les données lorsque vous utilisez Power
BI Desktop peut s’avérer utile, notamment lors
du choix de la connexion, lors de l’actualisation, de la
création des colonnes ou des mesures, et de l’utilisation
même du rapport.
Reprenons le schéma du chapitre précédent :
Le premier point clé concerne le
type de connexion : la volumétrie des données,
ou le besoin de temps (quasi) réel, peuvent vous
amener à utiliser une connexion en direct sur votre base
de données (mode Direct) - dans ce cas en effet,
les données restent dans la base, qui est interrogée à chaque
manipulation dans le fichier au prix d’un effort important
sur la base.
Les
types de connexion sont précisés dans la section
suivante.
Dans ce premier cas, les données
circulent « à la demande » et
ne sont pas stockées localement. Une opération
aussi simple qu’afficher un total au bas d’un
tableau ou filtrer un graphique amène à réinterroger
la source. Les performances dépendent des performances
du système de base de données :
Dans les autres cas, l’application
sera plus performante si les données sont rapatriées localement (mode
Import) : la source de données n’est
interrogée qu’une fois, lors de l’exécution
ou de l’actualisation de la requête, puis les
données sont stockées localement, à l’intérieur
du fichier.
Dans ce cadre, Power BI repose sur un outil
très performant : le moteur de stockage tabulaire, VertiPaq,
accélère considérablement la mise en
place des visuels...
Se connecter
Power BI propose une vaste bibliothèque
de connecteurs - et encore celle-ci évolue avec chaque
nouvelle livraison du logiciel : les décrire tous
serait fastidieux, mais il est possible de dégager
les grandes lignes et le fonctionnement des principaux connecteurs.
Un premier choix essentiel consiste à définir
le type de connexion : import ou direct.
L’option
la plus fréquente consiste à importer les
données : une fois la requête lancée, Power
BI récupère et stocke en local l’ensemble
des données.
L’intérêt
majeur de ce type de connexion repose sur les performances de Power
BI lors de la création de rapports, les possibilités
de modélisation et la réactivité aux actions
de filtrage de l’utilisateur.
L’inconvénient
tient à ce que le poste sur lequel est conçu ou
utilisé le rapport doit avoir une puissance suffisante,
en termes de RAM (pour le stockage des données) et de CPU
(pour les calculs).
Un autre inconvénient possible
est la limite de taille du fichier : 1 Go pour
la version standard, 10 Go pour les versions Pro
et Premium.
Enfin, ce type de connexion implique
une actualisation manuelle ou programmée des données - par
opposition à la visualisation de données en temps
réel.
Malgré ces quelques inconvénients,
l’import des données est le mode à privilégier.
Il est également
possible de se connecter en direct à certaines
sources (bases de données).
L’intérêt...
Opérer des transformations dans l’éditeur
Power Query
L’accès aux données
et leur préparation sont considérés à juste
titre comme l’étape clé de la création
d’un bon rapport.
L’importance du travail que demande
cette étape (en termes d’efforts et de temps)
ne doit en aucun cas être sous-estimée.
Cette
phase du cycle de travail peut dans certains cas être prise
en charge par un profil purement technique (service informatique,
spécialiste des systèmes d’information,
administrateur de base de données), puisqu’elle
suppose une bonne connaissance du modèle de données,
des relations entre entités, ou encore du typage des données.
À ce titre, elle peut faire
l’objet d’une mission à part entière,
dont l’objectif est de livrer un jeu de données prêt à l’emploi,
permettant par la suite aux experts métiers de prendre
le relais et d’effectuer leurs analyses.
La préparation des données
consiste, par exemple, à :
typer la donnée
au bon format,
filtrer,
conserver ou supprimer les lignes
d’un fichier plat,
fractionner une colonne,
ajouter une colonne,
restructurer les tables,
ou encore agréger les données.
Il s’agit en tout état de
cause de préparer la requête qui est envoyée,
lors de l’actualisation du rapport, à la source
de données. Dans la plupart des cas, et jusqu’à un
certain point, c’est donc la source elle-même
qui va effectuer les opérations de transformation, garantissant
par là même un temps de traitement optimal.
Dans
le détail, les étapes de transformation des données
se répartissent en deux groupes :
- Celles...
Nettoyer les données
Voyons maintenant dans le détail
les différentes opérations de nettoyage des données. Selon
le type de la source et sa qualité, vous serez amené à effectuer
une ou plusieurs de ces opérations.
Choisir (ou supprimer) les colonnes
Cet outil permet de sélectionner
ou désélectionner rapidement les colonnes à conserver, par
le biais de cases à cocher.
La
taille maximale du fichier (1 Go pour la version gratuite,
10 Go pour la version Premium), ainsi surtout
que le volume de données manipulées (qui détermine
en grande partie les performances de l’application) incitent
fortement à ne conserver que les colonnes et lignes réellement
utiles au rapport.
Sélectionnez la table Ventes.
Sélectionnez la colonne Commentaire puis onglet Accueil - groupe Gérer les colonnes -
cliquez sur le bouton Supprimer les colonnes.
Cette étape
peut également être accomplie par clic droit sur
la colonne.
Notez la nouvelle étape Colonnes supprimées dans le
volet Paramètre d’une requête. La
croix à sa gauche permet d’annuler l’opération.
Lorsqu’une roue crantée apparaît à sa
droite, elle permet de modifier l’étape.
Réduire les lignes
Cet outil permet de conserver ou supprimer
des lignes selon certains critères courants (ligne vide,
doublon, ligne parasite). Notez que selon la taille de votre ruban,
vous pouvez voir Réduire les lignes,
ou directement Conserver les lignes et Supprimer les lignes.
Sélectionnez la table Familles et supprimez les deux dernières
lignes (TestF et ZZ), en choisissant l’option Supprimer les lignes du bas et en précisant
le nombre de lignes à supprimer...
Ajouter des colonnes
La colonne ajoutée, qu’elle
soit calculée par la source de données ou qu’elle
soit calculée par le langage M de Power BI, est physiquement
stockée dans le modèle tabulaire : autrement dit,
elle occupe de l’espace et augmente la taille du fichier.
Elle est recalculée pour chaque ligne de
la table lors de l’actualisation des données.
Dans Power BI, cette notion porte un nom bien précis, le contexte de ligne, dont nous allons
voir l’importance lorsque nous parlerons des formules en
langage DAX.
Une
mesure calculée n’est pas stockée physiquement,
et n’est évaluée (calculée)
que si elle est utilisée. Elle n’utilise donc
pas d’espace ou de RAM, mais elle consomme de la CPU.
Créer une colonne à partir
d’exemples
L’outil Colonne à partir d’exemples de
l’onglet Ajouter une colonne est
l’un de ces outils « magiques » de
Power BI pour ajouter une colonne : il consiste,
une fois la ou les colonnes originales sélectionnées, à indiquer
dans la nouvelle colonne ce que vous souhaitez voir. Power
BI va alors « deviner » le type
de transformation que vous voulez effectuer, et en déduire
la formule.
Cet
outil demande parfois de fournir plusieurs exemples de la transformation
demandée, suffisamment pour permettre à Power
BI de déduire une règle sans ambiguïté.
Sélectionnez la table Catégories.
Activez l’outil Colonne à partir d’exemples (dans
l’onglet Ajouter une colonne)
puis l’option A partir de toutes les colonnes.
Nous allons créer une nouvelle colonne Sous famille, à partir des
deux premiers caractères de la catégorie...
Deux autres exemples de transformation
Outre les transformations du contenu de la
colonne, dont nous avons vu un certain nombre dans la section précédente,
deux opérations courantes permettent de travailler sur
la structure des données.
La première consiste à utiliser
comme source un tableau croisé et à rétablir
la structure en colonnes dont a besoin Power BI (il s’agit
donc de « décroiser » ou
dépivoter le tableau). La seconde consiste à ajouter
les lignes d’une ou plusieurs tables à celle d’une autre
table ayant la même structure. Par exemple si une feuille
contient des données pour le mois de janvier, la suivante
les données du mois de février, et ainsi de suite,
vous pouvez souhaiter regrouper ces données dans une seule
table, notamment pour être en mesure de les comparer.
Dépivoter un tableau croisé
La structure sous forme de table est nécessaire à Power
BI : par table, il faut comprendre une structure reposant
sur des colonnes identifiant des champs distincts, dont chaque ligne
constitue une valeur.
Pour cette raison, l’exploitation
des données d’un tableau croisé (ou encore
TCD, ou pivot) n’est pas directement possible pour Power
BI : une opération initiale est nécessaire,
qui va permettre de restructurer les données croisées
dans un tableau en colonnes, sans perdre la moindre information.
Le fichier Tableau croisé.xlsx en
est un bon exemple. Un tableau croisé dynamique y a été créé,
qui indique les montants des ventes par trimestre (lignes) et année
(colonnes) :
Afin d’utiliser ces données
dans Power BI, il faut d’abord restructurer ce tableau
en colonnes (Année, Trimestre, Ventes) et générer...
Les outils de gestion de la requête
L’essentiel des opérations
décrites dans cette section se déroule dans le
volet Requêtes, sur
la gauche de l’écran de l’éditeur Power Query. Il s’agit de
travailler sur les caractéristiques de la requête,
ou de la source, elle-même.
Ajouter une nouvelle source
Dans un fichier, il est toujours possible
d’ajouter de nouvelles données. Elles peuvent provenir
de la base ou du fichier déjà utilisés,
ou de toute autre source.
La
question importante ici est de savoir s’il est nécessaire
et possible ou non de créer une relation entre les deux
sources. Tant que les données sont utilisées séparément
(c’est-à-dire dans des visuels distincts), la
relation (ou jointure) n’est pas nécessaire. Dans
l’autre cas, elle le devient.
Pour ajouter une nouvelle source, utilisez
le bouton Sources récentes depuis
l’onglet Accueil -
groupe Données de Power BI ou de Power Query et
vous retrouvez le processus habituel. La mise en place de la relation,
si elle est requise, se fera dans un autre écran, la vue
Modèle, dans Power BI.
Renommer, dupliquer, supprimer une requête
Les opérations de gestion courantes
des requêtes sont disponibles par clic droit sur la requête dans
le volet Requêtes de Power Query.
Renommer une
requête pour lui donner un nom plus simple ou plus parlant.
Dupliquer une
requête (c’est-à-dire créer
une copie de la table, en conservant les étapes de transformation).
Référencer une
requête revient à la dupliquer sans conserver
les étapes de la requête, autrement dit à copier
les résultats des transformations.
Supprimer une
requête qui n’est plus utile.
Propriétés...
Finaliser le modèle de données grâce à la
vue Modèle
La section Opérer des transformations
dans l’éditeur Power Query de ce chapitre a évoqué un
certain nombre de transformations incontournables lors de la connexion à une
source : il s’agissait de travailler sur la structure
des données et de préparer un ordre de requête
avant de l’envoyer à la source.
L’amélioration de la présentation
des données, une étape qui intervient après
que la source a renvoyé sa réponse, et tout au
long de la vie du rapport, concerne plus spécifiquement
la visibilité, l’affichage et l’organisation
des données et améliore « l’expérience utilisateur ».
Cette étape n’est pas toujours nécessaire,
mais offrira un avantage lorsqu’il s’agira de
construire les visuels.
Dans
cet ouvrage, nous nous limitons à des améliorations
courantes mais cette étape peut aller bien plus loin, notamment
dans une perspective d’optimisation et de performance du
modèle, par le biais des fonctions de modélisation
du langage DAX.
Afin d’illustrer quelques exemples
fréquents de transformations, nous partirons du fichier Livres.pbix.
La
vue Modèle est accessible
dans Power BI. Si vous êtes dans la fenêtre Power
Query, il faut avoir cliqué sur Fermer & appliquer pour
y accéder.
Pour ouvrir la vue Modèle,
cliquez sur l’onglet Modèle à la
gauche de l’écran :
Il est possible que s’affiche le
bandeau suivant :
Bien que cela ne change pas le travail que
nous allons faire par la suite, je vous recommande dans la mesure
du possible de faire cette mise à jour en cliquant sur
le bouton Mettre...