# Laboratoire Pentaho Windows

{% hint style="info" %}

#### **Laboratoire Pentaho**

Pentaho Data Integration est un outil côté client couramment installé et configuré pour fonctionner sous Windows 11.

Il existe plusieurs options de licence ; pour ces ateliers nous installerons une édition Enterprise. Cela vous donnera l'occasion d'essayer de construire une solution complète - pipelines de données automatisés + analyses ..
{% endhint %}

<figure><img src="https://3016379417-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WjeDOi3MsT9tY3oU6mQ%2Fuploads%2FaO9M8NuR6rzHnWiAvgEi%2Fimage.png?alt=media&#x26;token=135c03ed-25dd-465c-9b25-6c2abe6ed093" alt=""><figcaption><p>Niveaux Pentaho</p></figcaption></figure>

{% hint style="danger" %}
Les étapes suivantes sont destinées à configurer un environnement Laboratoire Pentaho et doivent être complétées afin de terminer les ateliers.

Assurez-vous d'avoir téléchargé l'atelier--Installation&#x20;

```
cd \
git clone https://github.com/jporeilly/Workshop--Installation
```

{% endhint %}

{% tabs %}
{% tab title="Docker Desktop" %}
{% hint style="info" %}

#### Docker Desktop

Docker Desktop est une application pour Windows, macOS et Linux qui fournit une interface facile à utiliser pour développer et exécuter des applications conteneurisées. Elle regroupe le Docker Engine, le Docker CLI, Docker Compose, Kubernetes et d'autres outils essentiels dans un seul package avec une interface graphique.&#x20;

Docker Desktop simplifie la gestion des conteneurs en gérant automatiquement la virtualisation sous-jacente, permettant aux développeurs de construire, tester et déployer des applications dans des conteneurs isolés et portables sans se soucier des différences de configuration d'environnement. Il est particulièrement populaire parmi les développeurs qui souhaitent s'assurer que leurs applications s'exécutent de manière cohérente sur différents environnements, de la machine de développement locale aux serveurs de production.
{% endhint %}

{% embed url="<https://www.docker.com/products/docker-desktop/>" %}

1. Téléchargez le programme d'installation de Docker Desktop.

{% embed url="<https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe?utm_campaign=dd-smartbutton&utm_location=module&utm_medium=webreferral&utm_source=docker>" %}
Lien pour télécharger Docker Desktop
{% endembed %}

2. Accédez à : Téléchargements
3. Double-cliquez : `Docker Desktop Installer.exe` pour exécuter le programme d'installation.

Par défaut, Docker Desktop est installé à `C:\Program Files\Docker\Docker`.

{% hint style="danger" %}
Lorsque vous y êtes invité, assurez-vous que **Utiliser WSL 2 au lieu de Hyper-V** l'option sur la page de configuration est sélectionnée.

Sur les systèmes qui ne prennent en charge qu'un seul backend, Docker Desktop sélectionne automatiquement l'option disponible.
{% endhint %}

<figure><img src="https://3016379417-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WjeDOi3MsT9tY3oU6mQ%2Fuploads%2FKBG27SUuTlAYI8OCLtDk%2Fimage.png?alt=media&#x26;token=552b06bd-5966-4a9b-95ee-4b826a89781b" alt=""><figcaption><p>Utiliser WSL 2</p></figcaption></figure>

3. Fermer pour terminer le processus d'installation.

***

{% hint style="info" %}

#### **Utilisateur Docker**

Si votre compte administrateur est différent de votre compte utilisateur, vous devez ajouter l'utilisateur au groupe docker-users :
{% endhint %}

1. Exécutez Gestion de l'ordinateur en tant qu'administrateur.
2. Accédez à **Utilisateurs et groupes locaux** > **Groupes** > **docker-users**.
3. Cliquez avec le bouton droit pour ajouter l'utilisateur au groupe.

<figure><img src="https://3016379417-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WjeDOi3MsT9tY3oU6mQ%2Fuploads%2FGdGKjQIayhbbRzAmRBP8%2Fimage.png?alt=media&#x26;token=0e3f6123-f8d4-41be-b432-3621b0a19ca7" alt=""><figcaption><p>Ajouter un utilisateur au groupe docker</p></figcaption></figure>

4. Déconnectez-vous et reconnectez-vous pour que les modifications prennent effet.
   {% endtab %}

{% tab title="Conteneur MySQL" %}
{% hint style="info" %}

#### **Docker Compose - MySQL**

L'utilisateur pentaho\_admin n'a que l'autorisation LECTURE pour la base de données Steel Wheels - sampledata. Le compte administrateur a été supprimé.

Comme vous allez effectuer des opérations CRUD sur la base de données, nous devons déployer une base de données sampledata - conteneur Docker, en accordant tous les privilèges à un utilisateur admin.
{% endhint %}

{% file src="<https://3016379417-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WjeDOi3MsT9tY3oU6mQ%2Fuploads%2F6hPSoZkwDCVQoPvmTu20%2Fcopy-mysql.ps1?alt=media&token=992633e7-24c1-4b23-84f0-c14770c1164a>" %}

{% file src="<https://3016379417-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WjeDOi3MsT9tY3oU6mQ%2Fuploads%2FXnkS8JtDisS2P2nqJLvC%2Frun-docker-mysql.ps1?alt=media&token=f12b269e-427e-48bf-8b36-c55253cc81f7>" %}

{% file src="<https://3016379417-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WjeDOi3MsT9tY3oU6mQ%2Fuploads%2FlbsqipaAdqdhpvHj7FTv%2Fdocker-compose.yml?alt=media&token=fde4bc13-9715-4257-8feb-b5f70639dae4>" %}

1. Exécutez le script suivant pour créer un dossier MySQL et copier les fichiers requis.

```ps1
cd \
cd C:\Workshop--Installation\MySQL
.\copy-mysql.ps1
```

2. Vérifiez que le répertoire a été créé et que les fichiers ont été copiés.
3. Exécutez le script docker-compose pour créer le conteneur.

```powershell
cd \
cd C:\MySQL
.\run-docker-mysql.ps1
```

<figure><img src="https://3016379417-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WjeDOi3MsT9tY3oU6mQ%2Fuploads%2FHnql132ameJUQL5OGA74%2Fimage.png?alt=media&#x26;token=a242c86f-d75e-47c4-a592-bf9767243bc6" alt=""><figcaption><p>Déployer MySQL</p></figcaption></figure>

4. Vérifiez que le conteneur est opérationnel dans Docker Desktop.

<figure><img src="https://3016379417-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WjeDOi3MsT9tY3oU6mQ%2Fuploads%2FbzmptT3CVaRADQKBkjMl%2Fimage.png?alt=media&#x26;token=31182fee-8ad9-40c2-9e3e-fa1c5d9324d9" alt=""><figcaption><p>conteneurs docker mysql</p></figcaption></figure>
{% endtab %}

{% tab title="sampledata" %}
{% hint style="info" %}

#### **Données d'exemple**

La prochaine étape consiste à créer la base de données sampledata.
{% endhint %}

<figure><img src="https://3016379417-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WjeDOi3MsT9tY3oU6mQ%2Fuploads%2FfHrm1HbmPxxV8bPSDUK9%2Fimage%20(62).png?alt=media&#x26;token=4d4eb534-9ee4-49eb-80d1-17c363ada1f1" alt=""><figcaption><p>Diagramme de relations</p></figcaption></figure>

{% tabs %}
{% tab title="1. sampledata\_schema.sql" %}
{% hint style="info" %}

#### **sampledata\_schema.sql**

Ce script crée une structure de base de données relationnelle complète pour une application métier d'exemple. Il est conçu pour modéliser un système de gestion des ventes et des commandes pour une entreprise qui vend divers produits.
{% endhint %}

{% hint style="info" %}

#### **Configuration de la base de données**

* Crée une base de données nommée

  ```
  sampledata
  ```

  avec l'encodage de caractères UTF-8
* Met en place des utilisateurs avec les permissions appropriées
* Configure le mode SQL pour une meilleure intégrité des données
  {% endhint %}

{% hint style="info" %}

#### **Tables**

**BUREAUX**: Stocke les emplacements des bureaux de l'entreprise avec les détails d'adresse

**EMPLOYÉS**: Contient des informations sur les employés avec des relations aux bureaux et à la structure hiérarchique

**CLIENTS**: Stocke les informations client incluant les coordonnées et les limites de crédit

**PRODUITS**: Contient le catalogue de produits avec les informations d'inventaire et de tarification

**COMMANDES**: Suit les commandes des clients avec le statut et les dates

**DETAILS\_COMMANDE**: Contient les lignes d'articles pour chaque commande avec quantité et prix

**PAIEMENTS**: Enregistre les paiements des clients avec montants et dates

**FACT\_COMMANDE**: Une table de faits pour l'analyse des commandes

**CLIENT\_AVEC\_TER**: Informations client étendues avec territoire

**DIM\_TEMPS**: Table dimensionnelle de temps pour les rapports

**RESPONSABLES\_DEPARTEMENT**: Stocke les informations des responsables de département

**QUADRANT\_REELS**: Contient les données financières budget vs réel avec une colonne VARIANCE générée

**BALANCE\_DE\_VERSEMENT**: Données de comptabilité financière
{% endhint %}

{% hint style="info" %}

#### **Vues**

**résumé\_commandes\_client**: Résume les commandes et les dépenses par client

**performance\_produit**: Analyse les métriques de ventes des produits incluant revenus et bénéfices

**performance\_ventes\_employé**: Suit la performance des ventes par employé

**tendance\_ventes\_mensuelle**: Montre les tendances des ventes dans le temps par mois

**statut\_inventaire\_produit**: Catégorise les produits par niveaux d'inventaire

**historique\_paiements\_client**: Résume l'activité de paiement des clients et les soldes
{% endhint %}

{% hint style="info" %}

#### **Procédures stockées**

**ObtenirCommandesClient**: Récupère les commandes d'un client spécifique

**MettreAJourStockProduit**: Met à jour les niveaux d'inventaire des produits

**ObtenirVentesProduitParTrimestre**: Analyse les ventes trimestrielles par produit

**ObtenirTopClientsParRégion**: Identifie les meilleurs clients par région

**ObtenirValeurInventaireParLigneProduit**: Calcule les métriques d'inventaire par ligne de produit

**Triggers**

**avant\_insertion\_commande**: Valide les contraintes de date sur les commandes

**avant\_insertion\_paiement**: S'assure que les montants des paiements sont positifs
{% endhint %}

{% hint style="info" %}

#### **Événements**

* **maintenance\_quotidienne**: Tâche planifiée pour la maintenance de la base de données
  {% endhint %}

1. Exécutez la commande suivante pour créer le schéma.

```powershell
cd \
cd MySQL
Get-Content sampledata_schema.sql | docker exec -i mysql-database-1 mysql -u root -p"password" sampledata
```

{% hint style="info" %}
Cette commande importe des données de schéma SQL dans une base de données MySQL s'exécutant dans un conteneur Docker. Voici une répartition :

Cette commande lit le fichier SQL :

```powershell
Get-Content sampledata_schema.sql
```

Transmet (redirige) le contenu du fichier à la commande suivante :

```
|
```

Ceci exécute une commande dans un conteneur Docker en cours d'exécution :

```
docker exec -i mysql-database-1 mysql -u root -p"password" sampledata
```

{% endhint %}

2. Vous pouvez vérifier la base de données sampledata et les tables avec les commandes suivantes.

Afficher les bases de données :

```powershell
docker exec -i mysql-database-1 mysql -u root -p"password" -e "SHOW DATABASES;"
```

Afficher les tables :

```powershell
docker exec -i mysql-database-1 mysql -u root -p"password" sampledata -e "SHOW TABLES;"
```

Afficher les colonnes d'une table :

```powershell
docker exec -i mysql-database-1 mysql -u root -p"password" sampledata -e "DESCRIBE table_name;"
```

<figure><img src="https://3016379417-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WjeDOi3MsT9tY3oU6mQ%2Fuploads%2FRdQGb6Vr3qtw2ot3KsM5%2Fimage.png?alt=media&#x26;token=2909bf5d-c81f-4b4f-a447-93fc903dd48b" alt=""><figcaption><p>Vérifier la base de données et les tables</p></figcaption></figure>
{% endtab %}

{% tab title="2. sampledata\_data.sql" %}
{% hint style="info" %}

#### **sampledata\_data.sql**

Ce script peuple la base de données avec des données d'exemple pour démontrer la fonctionnalité du schéma.
{% endhint %}

{% hint style="info" %}

#### **Données de référence**

* Emplacements des bureaux à travers différentes régions
* Hiérarchie des employés avec intitulés de postes
* Catalogue de produits organisé par lignes de produits
  {% endhint %}

{% hint style="info" %}

#### **Données transactionnelles**

* Enregistrements clients avec informations de contact
* Historique des commandes avec dates et statuts
* Détails des commandes avec quantités et prix
* Enregistrements de paiements
  {% endhint %}

{% hint style="info" %}

#### **Données financières**

* Chiffres budget vs réel dans QUADRANT\_REELS
* Données de comptabilité de balance de vérification
  {% endhint %}

{% hint style="info" %}

#### **Caractéristiques des données**

* Scénarios commerciaux réalistes avec divers statuts de commande
* Catalogue de produits complet avec descriptions et tarification
* Structure hiérarchique des employés avec relations de reporting
* Données temporelles couvrant plusieurs années pour l'analyse des tendances
* Données financières adaptées à la budgétisation et à l'analyse des écarts
  {% endhint %}

{% hint style="info" %}

#### **Caractéristiques notables**

* Les données respectent les contraintes d'intégrité référentielle
* Bonne gestion des valeurs NULL lorsque c'est approprié
* Valeurs de prix et de quantités réalistes
* Les colonnes générées (comme VARIANCE) sont exclues des insertions directes
* Les commandes sont séquencées pour satisfaire les contraintes de clé étrangère
  {% endhint %}

1. Exécutez la commande suivante pour charger les données dans les tables sampledata.

```powershell
cd \
cd MySQL
Get-Content sampledata_data.sql | docker exec -i mysql-database-1 mysql -u root -p"password" sampledata
```

2. Vous pouvez utiliser les commandes suivantes pour vérifier que les données ont été chargées.

Pour compter le nombre de lignes dans une table spécifique :

```docker
docker exec -i mysql-database-1 mysql -u root -p"password" sampledata -e "SELECT COUNT(*) FROM table_name;"
```

Pour voir les premières lignes d'une table :

```docker
docker exec -i mysql-database-1 mysql -u root -p"password" sampledata -e "SELECT * FROM table_name LIMIT 10;"
```

Pour vérifier les comptes pour toutes les tables :

```docker
docker exec -i mysql-database-1 mysql -u root -p"password" sampledata -e "SELECT TABLE_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'sampledata';"
```

Pour obtenir un résumé des tables et de leur statut :

```docker
docker exec -i mysql-database-1 mysql -u root -p"password" sampledata -e "SHOW TABLE STATUS;"
```

<figure><img src="https://3016379417-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WjeDOi3MsT9tY3oU6mQ%2Fuploads%2Fe0qSyplq4BSWdMja0KmU%2Fimage.png?alt=media&#x26;token=6e535223-9a4d-4916-b8f5-a3b41128907b" alt=""><figcaption><p>informations sur les tables sampledata</p></figcaption></figure>
{% endtab %}
{% endtabs %}
{% endtab %}

{% tab title="DBeaver" %}
{% hint style="info" %}

#### DBeaver

Vous allez avoir besoin d'un outil de gestion de base de données. DBeaver Community est un outil de gestion de base de données gratuit et open-source pour les projets personnels.
{% endhint %}

1. Allez sur le site officiel [page de téléchargement de DBeaver](https://dbeaver.io/download/)

{% embed url="<https://dbeaver.io/files/dbeaver-ce-latest-x86_64-setup.exe>" %}

2. Accédez à Téléchargements et double-cliquez sur : `dbeaver-ce-25.2.5-x86_64-setup.exe`
3. Suivez les instructions d'installation.
4. Suivez les instructions à l'écran, cliquez sur « Suivant » et acceptez le contrat de licence pour continuer.
5. Choisissez vos options d'installation souhaitées (par ex., pour tous les utilisateurs ou l'utilisateur actuel).

<figure><img src="https://3016379417-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WjeDOi3MsT9tY3oU6mQ%2Fuploads%2FyqemtZhN9dE6mAXXMHOT%2Fimage.png?alt=media&#x26;token=3d12607c-5d6c-46b8-8f8e-7f5642756b20" alt=""><figcaption></figcaption></figure>

6. Terminez le processus d'installation.&#x20;

***

{% hint style="info" %}

#### **Base de données MySQL**

Si vous avez rempli les 3 exigences précédentes, vous devriez avoir un conteneur MySQL Docker, exposé sur le port :3306 avec la base de données sampledata.
{% endhint %}

1. Lancez DBeaver et sélectionnez : MySQL.

<figure><img src="https://3016379417-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WjeDOi3MsT9tY3oU6mQ%2Fuploads%2FdO4Wo4hKJzPuJW6OCI7C%2Fimage.png?alt=media&#x26;token=72d92d39-22dd-4603-a480-94495aa6a808" alt=""><figcaption><p>MySQL</p></figcaption></figure>

2. Configurez la connexion avec les propriétés suivantes :

Nom d'utilisateur : root ou pentaho\_user

Mot de passe : password

<figure><img src="https://3016379417-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WjeDOi3MsT9tY3oU6mQ%2Fuploads%2Fx4hj27wSVxKqareREN8p%2Fimage.png?alt=media&#x26;token=1268171f-8274-4cdb-87af-f0f44c3a5392" alt=""><figcaption><p>Configurer et tester la connexion MySQL - sampledata</p></figcaption></figure>

{% hint style="warning" %}
Vous devrez peut-être télécharger la version du pilote de base de données prise en charge.

Activez également : allowPublicKeyRetrieval
{% endhint %}

<figure><img src="https://3016379417-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WjeDOi3MsT9tY3oU6mQ%2Fuploads%2FMcdTFaqU0LsctCgZfC7S%2Fimage%20(56).png?alt=media&#x26;token=2a981c76-44d2-416d-a6f1-f08152c14740" alt=""><figcaption><p>Activer : allowPublicKeyRetrieval</p></figcaption></figure>

3. Testez la connexion.

<figure><img src="https://3016379417-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WjeDOi3MsT9tY3oU6mQ%2Fuploads%2FMMdsCwDdInxb5tkHhfjS%2Fimage.png?alt=media&#x26;token=420b31e7-86a7-46f6-807f-255c607e3526" alt=""><figcaption><p>Tester la connexion</p></figcaption></figure>

4. Développez : bases de données > sampledata > Tables

<figure><img src="https://3016379417-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WjeDOi3MsT9tY3oU6mQ%2Fuploads%2FE7sRaOXCFgJLUlfRmbyv%2Fimage.png?alt=media&#x26;token=ecf46ab4-f4f5-4f8c-bc48-15b85389da2a" alt=""><figcaption><p>Données client</p></figcaption></figure>

5. Ouvrez une fenêtre SQL et exécutez une requête de test.

```sql
select * from CUSTOMERS
where COUNTRY = 'USA' and CITY = 'NYC';
```

<figure><img src="https://3016379417-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F5WjeDOi3MsT9tY3oU6mQ%2Fuploads%2FEiNfAWHg3ZxaJX6INeIC%2Fimage.png?alt=media&#x26;token=bec6eaec-6e08-488e-ab04-85001312c550" alt=""><figcaption><p>Requête SQL - Clients de NYC</p></figcaption></figure>
{% endtab %}
{% endtabs %}
