> For the complete documentation index, see [llms.txt](https://cleyrop.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cleyrop.gitbook.io/docs/v-4.5/gouvernance-de-donnees/qualite-des-donnees.md).

# Qualité des données

La Data Quality (qualité des données) permet de s’assurer que les datasets respectent des **critères précis de validation**.

Elle aide à détecter les **anomalies** et corriger les non-conformités, améliorant ainsi la fiabilité des analyses, des tableaux de bord et des modèles d’IA.

***

## Créer une règle qualité <a href="#creation-dune-regle-de-qualite" id="creation-dune-regle-de-qualite"></a>

{% hint style="warning" %}

* Tous les membres d'un projet peuvent gérer les règles d'un Dataset créé dans le projet
* Seuls les Platform Manager peuvent gérer les règles qualité d'un Dataset Catalogue
  {% endhint %}

Pour créer une règle de qualité sur un dataset :

1. Depuis la fiche du Dataset, allez sur onglet **Qualité**
2. Cliquez sur **Créer** pour ouvrir le formulaire de création
3. Renseignez les **informations** de la règle
   * Nom de la règle (obligatoire). Unique.
   * Description de la règle (facultative)
4. Configurez la règle
   * **Requête SQL** : Saisie d’une requête SQL définissant la règle. Le schéma du dataset est affiché pour faciliter la rédaction de la requête.
   * **Niveau d’alerte** : <mark style="color:$danger;background-color:red;">Critique</mark>**,** <mark style="color:orange;background-color:$warning;">Majeur</mark>**,** <mark style="color:blue;background-color:blue;">Mineur</mark>
5. **Testez la requête** puis Créer.\
   Pour valider la création, la requête doit être testée pour confirmer qu'elle est fonctionnelle. Si le test échoue, un message d’erreur précis est affiché. La requête doit respecter les règles :
   * La requête doit contenir un `SELECT` et finir par **;**
   * La requête doit utiliser le Dataset à partir duquel la règle a été créée
   * La requête peut retourner une valeur de type booléen, numérique (entier ou décimal), textuel ou date.

**Exemple de requête SQL**

```sql
/* The request will return true only if all values in the column column_name are email addresses */
SELECT COUNT(*) = 0 AS result FROM project.table_name WHERE NOT column_name RLIKE '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$';
```

Vous pouvez cliquer sur le bouton <i class="fa-copy">:copy:</i> pour copier le nom de l'identifiant unique du Dataset.

<figure><img src="/files/HsNxV2kc6Pn0Ce9sxeAp" alt=""><figcaption></figcaption></figure>

### Utiliser un template de règle <a href="#templates-de-regles-de-qualite" id="templates-de-regles-de-qualite"></a>

Des templates de requêtes SQL sont disponibles pour faciliter la création des règles. Lors de la création, sélectionnez un template dans la liste puis cliquez sur **`Appliquer le template`** pour pré-remplir la zone d’édition SQL

#### Liste des Templates <a href="#liste-des-templates" id="liste-des-templates"></a>

* Le nombre de lignes du dataset est supérieur ou égal à
* Pas de ligne dupliquée dans le dataset
* Les valeurs de la colonne sont toutes différentes
* Unicité des valeurs suivant plusieurs colonnes
* Les valeurs de la colonne sont toutes comprises entre
* La distribution entre les valeurs de la colonne est la même pour toutes les valeurs
* Les valeurs de la colonne sont toutes au format 'mail'
* Les valeurs de la colonne sont exclusivement dans la liste
* La valeur minimum de la colonne est supérieure à
* La valeur maximum de la colonne est inférieure à
* La valeur médiane de la colonne est égale à
* La valeur moyenne de la colonne est égale
* Le nombre de valeurs non nulles de la colonne est supérieur
* Le nombre de valeurs non nulles de la colonne est supérieur à (%)
* Le nombre de valeurs distinctes de la colonne est égal à

#### Exemple d'utilisation d'un template

Lorsque le template est choisi et appliqué une règle à compléter apparait :

```sql
/* the request will return true only if value of col_x are not in list */
SELECT COUNT(*) = 0 AS result FROM {{ table_name }} WHERE {{ col_x }} NOT IN ('{{ val1 }}', '{{ val2 }}')`
```

Il faut renseigner les champs et enlever les accolades :

* `{{ col_x }}` : à remplacer par le nom de la colonne. Exemple : *commande\_textile*
* `{{ table_name }}` : à remplacer par le l'Identifiant Unique du Dataset. Exemple : *project.table\_name*
* `'{{ val1 }}'` : à remplacer par les valeurs souhaitées. Exemple : *'Soie'*

### Configurer un seuil d'alerte

Selon le type de retour de votre requête, vous pouvez définir jusqu'à 3 seuils d'alerte avec des niveaux de sévérité distincts (<mark style="color:$danger;background-color:red;">Critique</mark>, <mark style="color:orange;background-color:$warning;">Majeur</mark>, <mark style="color:blue;background-color:blue;">Mineur</mark>).

Après avoir testé votre requête, la plateforme détecte automatiquement le type de retour et affiche les opérateurs disponibles. Vous pouvez également sélectionner le type manuellement.

Pour chaque seuil :

1. Choisissez un **opérateur** adapté au type de retour
2. Saisissez la **valeur de comparaison**
3. Associez un **niveau d'alerte** (Critique, Majeur ou Mineur)
4. Combinez les conditions avec **ET / OU** si nécessaire

{% hint style="info" %}
Si aucune condition n'est remplie, aucune alerte n'est générée.
{% endhint %}

#### Type numérique (entier ou décimal)

Opérateurs disponibles : inférieur à, supérieur à, égal à, inférieur ou égal à, supérieur ou égal à, différent de.

**Exemple** : compter les lignes avec un revenue négatif et déclencher une alerte selon le nombre détecté :

```sql
SELECT COUNT(*) AS result FROM project.dataset WHERE column < 0;
```

| Condition   | Niveau   |
| ----------- | -------- |
| Valeur > 10 | Critique |
| Valeur > 0  | Majeur   |

<figure><img src="/files/NGBiKonisR4QKhSBItBd" alt=""><figcaption></figcaption></figure>

#### Type textuel

Opérateurs disponibles : égal à, différent de, contient, est dans (liste de valeurs), est nul, n'est pas nul.

**Exemple** : vérifier que les catégories appartiennent à une liste de valeurs attendues :

```sql
SELECT MAX(category) AS result FROM project.dataset WHERE category NOT IN ('cat1', 'cat2', 'cat3', 'cat4');
```

| Condition            | Niveau   |
| -------------------- | -------- |
| Valeur n'est pas nul | Critique |

<figure><img src="/files/u96c9nf0Yy7NgqfXDe8U" alt=""><figcaption></figcaption></figure>

#### Type Date

Opérateurs disponibles : égal à, différent de, inférieur à, inférieur ou égal à, supérieur à, supérieur ou égal à, compris entre, non compris entre, strictement compris entre, non strictement compris entre.

**Exemple** : vérifier que les données sont suffisamment récentes :

```sql
SELECT MAX(sale_date) AS result FROM project.dataset;
```

| Condition               | Niveau   |
| ----------------------- | -------- |
| Valeur avant 2023-01-01 | Critique |
| Valeur avant 2024-01-01 | Majeur   |

<figure><img src="/files/6gsbtcLRsZTfy7abYD7n" alt=""><figcaption></figcaption></figure>

#### Type Boolean étendu

Vous pouvez associer des niveaux d'alerte distincts aux résultats `true` et `false`.

**Exemple** : vérifier qu'il n'y a pas de doublons sur un identifiant de vente :

```sql
SELECT COUNT(*) = COUNT(DISTINCT sale_id) AS result FROM project.dataset;
```

| Condition      | Niveau   |
| -------------- | -------- |
| Valeur = false | Critique |

<figure><img src="/files/VnuxjpjGQrfGm4wxG5fL" alt=""><figcaption></figcaption></figure>

## Surveiller la qualité <a href="#execution-des-regles-de-qualite" id="execution-des-regles-de-qualite"></a>

Avant sa première exécution la règle est en statut `Non exécutée`

**À chaque rafraîchissement en succès** d’un dataset, les règles de qualité sont exécutées automatiquement.

Les règles ne sont pas exécutées si le rafraîchissement est en statut Échec ou Ignoré.

### Détail au niveau d'un Dataset <a href="#resultats" id="resultats"></a>

L’ensemble des **règles** et le **statut d’alerte** de chacune, issu de leur dernière exécution, sont répertoriés dans l’onglet Qualité de la fiche Dataset.

Il est possible de filtrer les règles par **niveau d’alerte** en cliquant sur l’encart correspondant.

En cliquant sur un règle, vous pouvez voir le détail de la **requête** sous jacente et du niveau **d'alerte** associé.

<figure><img src="/files/5kHz3hCDK1MW5S6DyIGM" alt=""><figcaption></figcaption></figure>

**Alertes issues de l'exécution de la règle**

Les résultats des exécutions sont enregistrés et consultables. Chaque exécution peut retourner une alerte :

* <mark style="color:green;background-color:green;">Pas d'alerte</mark> : pas d’anomalie détectée.
* <mark style="color:$danger;background-color:red;">Critique</mark>, <mark style="color:orange;background-color:$warning;">Majeur</mark>, <mark style="color:blue;background-color:blue;">Mineur</mark> : une anomalie est détectée avec un niveau d'alerte selon métadonnée de la règle
* <mark style="background-color:$info;">Non exécutée</mark> **:** la règle n'a encore jamais été exécutée

## Modifier une règle de qualité

Il est possible de modifier une règle existante sans avoir à la supprimer et la recréer.

1. Depuis la fiche du Dataset, onglet **Qualité**
2. Cliquez sur l'icône **Modifier** à droite de la règle à modifier
3. Modifiez les éléments souhaités : nom, description, requête SQL, seuils d'alerte
4. Testez la requête puis cliquez sur **Enregistrer**

{% hint style="info" %}
Les modifications prennent effet au prochain rafraîchissement du dataset.
{% endhint %}

## Vue consolidée globale

L'onglet **Qualité** au niveau de la navigation globale offre un tableau de bord consolidé et personnalisé regroupant tous les datasets auxquels vous avez accès, issus de vos projets ou du Catalogue, ainsi que ceux dont vous êtes propriétaire. Vous pouvez ainsi surveiller efficacement à 360° sans multiplier les clics.

Par défaut, vous visualiser les données pour l'ensemble des Datasets que vous pouvez lister eu travers vos Projets et le catalogue.

#### Indicateurs présents

* Nombre total de datasets accessibles
* % de datasets avec des règles de qualité configurées
* Nombre total de règles de qualité
* % et nombre de datasets conformes (aucune alerte au dernier calcul)
* % et nombre de datasets non conformes (au moins une alerte détectée)
* Répartition des alertes par criticité
* Liste détaillée des datasets ayant au moins une règle définie. Vous pouvez cliquer sur <i class="fa-eye">:eye:</i> pour voir plus de détails sur les règles.
  * Nom du dataset
  * Projet ou catalogue où le dataset a été créé si vous avez accès au projet sinon catalogue
  * Alertes remontées
  * Date du dernier calcul des règles

<figure><img src="/files/M1YN8d9X1rNWlWJOYqs8" alt=""><figcaption></figcaption></figure>

#### Filtres disponibles

L'activation des filtres met à jour l'ensemble des données du tableau de bord

Vous pouvez activer un filtre pour avoir une vue plus ciblée :

* **Mes souscriptions :** ceux auquel vous êtes abonné
* **Mes datasets** : ceux dont vous êtes identifié comme responsable
* **Projets** : l'ensemble des datasets créés ou ajoutés aux projets auxquels vous avez accès
* **Catalogue** : l'ensemble des datasets du catalogue

Pour revenir à la vue globale, cliquez sur le filtre actif.

**Filtres avancés**

* Par niveau d'alerte
* Par classification (bronze / argent / or)
* Par sensibilité (interne / sensible / restreint)
* Par projet *disponible uniquement dans la vue générale et Mes Datasets*

## Vue consolidée - niveau projet <a href="#resultats" id="resultats"></a>

Les alertes des Datasets du projet disposant de règles de Data Quality sont répertoriées dans l’onglet **Qualité** de la **Bibliothèque**.

Il est possible de filtrer les Datasets par par État ou Origine.

<figure><img src="/files/4gXaTmBfPqsk0szcNMSp" alt=""><figcaption></figcaption></figure>

## S'abonner aux alertes Data Qualité

À la création d'une règle de qualité, une invitation à s'abonner est proposée si vous n'êtes pas encore abonné au dataset concerné.

Vous pouvez également gérer vous abonnements :

1. Depuis la liste des Datasets de votre projet ou du Catalogue
2. Cliquez sur <i class="fa-bell">:bell:</i> `S'abonner` et choisir Qualité et/ou Rafraîchissement

![](/files/KVLDiAS5ZvhOqYOTAo7f)

Vous recevrez alors une notification in-app et mail à la remonté d'une alerte ou à l'échec d'un rafraîchissement. Vous pouvez retrouver l'ensemble de vos souscriptions dans l'onglet <i class="fa-gear">:gear:</i> `Gestion des notifications`.

## Explorer les règles <a href="#resultats" id="resultats"></a>

Depuis la fiche Dataset, onglet Qualité :

* Cliquez sur le <i class="fa-info">:info:</i>pour afficher le détail de la règle

<figure><img src="/files/k6vwzqnmCgZLCrfX2hQK" alt=""><figcaption></figcaption></figure>

## Supprimer une règle de qualité <a href="#suppression-dune-regle-de-qualite" id="suppression-dune-regle-de-qualite"></a>

{% hint style="danger" %}
La suppression est définitive.
{% endhint %}

La suppression d’une règle de qualité permet de retirer définitivement une règle d’un dataset

1. Accédez à la fiche du Dataset
2. Dans la liste des règles de qualité, cliquez sur le <i class="fa-circle-info">:circle-info:</i> à droite de la règle à supprimer puis option `Supprimer` ou sur la <i class="fa-circle-trash">:circle-trash:</i>
3. Cliquez sur `Confirmer` pour valider la suppression.<br>
