
# Vues

Les vues sont des configurations enregistrées et nommées décrivant comment les enregistrements d'une table sont filtrés, triés, regroupés et projetés. Ajoutez-les sous le tableau `views` d'une table. Une vue fonctionne dans l'un de deux modes : **mode config JSON** (filtres/tris/champs/regroupement déclaratifs) ou **mode SQL** (une `query` PostgreSQL brute).

## Propriétés des vues

| Propriété            | Description                                                                                                                   |
| -------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `id`                 | Identifiant unique de la vue.                                                                                                 |
| `name`               | Nom lisible de la vue.                                                                                                        |
| `isDefault`          | Booléen. Lorsqu'il vaut `true`, la configuration de cette vue s'applique lorsqu'aucune vue spécifique n'est demandée.         |
| `filters`            | Conditions de filtre (mode config JSON). Voir ci-dessous.                                                                     |
| `sorts`              | Tableau de règles de tri `{ field, direction }` (mode config JSON). `direction` vaut `asc` ou `desc`.                         |
| `fields`             | Tableau de noms de champs à inclure, dans l'ordre d'affichage (mode config JSON).                                             |
| `groupBy`            | Configuration de regroupement `{ field, direction? }` (mode config JSON).                                                     |
| `query`              | SQL brut pour une `VIEW` PostgreSQL (mode SQL). Lorsqu'elle est définie, les propriétés de config JSON ne sont pas utilisées. |
| `materialized`       | Booléen. Avec `query`, crée une `MATERIALIZED VIEW` qui met les résultats en cache. Mode SQL uniquement.                      |
| `refreshOnMigration` | Booléen. Avec `materialized`, rafraîchit la vue matérialisée lors des migrations.                                             |

## Mode config JSON

Déclaratif — filtrez, triez, regroupez et choisissez des colonnes sans écrire de SQL.

```yaml
views:
  - id: active_high_priority
    name: Active — High Priority
    isDefault: true
    filters:
      and:
        - { field: status, operator: equals, value: active }
        - { field: priority, operator: equals, value: high }
    sorts:
      - { field: created_at, direction: desc }
    fields: [title, status, priority, assigned_to]
    groupBy: { field: status, direction: asc }
```

### Filtres

Un filtre est soit une condition unique `{ field, operator, value }`, soit un groupe booléen combinant des conditions avec `and` / `or` (pouvant s'imbriquer) :

```yaml
filters:
  or:
    - { field: priority, operator: equals, value: high }
    - { field: priority, operator: equals, value: urgent }
```

Les opérateurs courants incluent `equals`, `greaterThan`, `lessThan` et des opérateurs de comparaison similaires. Voir [Validation](/fr/docs/table-validation) pour la façon dont les champs de filtre sont vérifiés par rapport à la table.

## Mode SQL

Pour les rapports avancés, fournissez une `query` brute. Définissez `materialized: true` pour mettre les résultats en cache, et `refreshOnMigration: true` pour maintenir le cache à jour à travers les migrations de schéma.

```yaml
views:
  - id: monthly_revenue
    name: Monthly Revenue
    query: >
      SELECT date_trunc('month', created_at) AS month, SUM(amount) AS revenue
      FROM orders GROUP BY 1 ORDER BY 1
    materialized: true
    refreshOnMigration: true
```

:::callout
**Vue par défaut.** Marquez exactement une vue par table avec `isDefault: true` pour contrôler quels enregistrements apparaissent lorsqu'un consommateur demande la table sans nommer de vue. Les identifiants de vue et la règle de vue par défaut unique sont validés au moment de la configuration.
:::
