Support formation Rapports Power BI

5 | Types de données

En bref

  • Objectifs : distinguer les types du langage M et les types de colonnes proposés par l'interface ; typer des colonnes et des paramètres de fonction ; tester et convertir le type d'une valeur.
  • Prérequis : chapitre « 4 | Valeurs et expressions ».
  • Niveau : avancé.

Pourquoi ?

Le type d'une colonne détermine ce que vous pourrez en faire dans le modèle sémantique : additionner, filtrer par période, trier. En M, un type bien posé signale aussi une erreur au plus tôt : un paramètre de fonction déclaré as date refuse un texte dès l'appel, au lieu de produire un résultat faux trois étapes plus loin.

Notions clés

Types du langage et types de l'interface

Le langage M connaît un petit nombre de types de base : any, none, null, logical, number, time, date, datetime, datetimezone, duration, text, binary, type, list, record, table et function. Source

Les types de colonnes proposés par l'interface sont des précisions de ces types de base. Plusieurs d'entre eux sont tous des type number pour le langage, mais sont chargés différemment dans le modèle sémantique :

Type dans l'interfaceÉcriture en MType de base
Nombre décimaltype number ou Number.Typenumber
Nombre décimal fixeCurrency.Typenumber
Nombre entierInt64.Typenumber
PourcentagePercentage.Typenumber
Datetype datedate
Date/Heuretype datetimedatetime
Date/Heure/Fuseau horairetype datetimezonedatetimezone
Heuretype timetime
Duréetype durationduration
Textetype texttext
Vrai/Fauxtype logicallogical
Binairetype binarybinary
Anytype anyany

D'autres types précisés existent dans la bibliothèque (Int8.Type à Int32.Type, Single.Type, Double.Type, Decimal.Type, Guid.Type, Uri.Type...). Ils sont rarement utiles dans Power BI, où les quatre types numériques ci-dessus suffisent.

Types nullables

Une valeur null n'est pas un number. Un paramètre déclaré as number refuse donc null ; déclarez-le as nullable number si la colonne peut contenir des vides. Le même principe s'applique aux colonnes d'un type de table : type table [Montant = nullable number].

Typer les colonnes

L'étape Type modifié utilise Table.TransformColumnTypes, qui convertit les valeurs et produit des erreurs de cellule quand la conversion échoue :

= Table.TransformColumnTypes(Source, {{"Date", type date}, {"Quantité", Int64.Type}, {"Montant", Currency.Type}})

Un troisième argument facultatif précise les paramètres régionaux de la conversion, ce que fait l'option Utiliser les paramètres régionaux de l'interface :

= Table.TransformColumnTypes(Source, {{"Date", type date}}, "en-US")

Le quatrième argument de Table.AddColumn type une colonne calculée : Table.AddColumn(Source, "TTC", each [HT] * 1.2, type number). Source

Tester et convertir

FonctionRôleExemple
Value.Type(valeur)Renvoie le type d'une valeurValue.Type(42) renvoie type number
Value.Is(valeur, type)Teste le type d'une valeurValue.Is("abc", type text) renvoie true
Number.From, Text.From, Date.FromConvertissent une valeurNumber.From("12") renvoie 12
x as typeVérifie le type, erreur sinon"12" as number provoque une erreur
Table.Schema(table)Décrit les colonnes d'une table et leur typeContrôler le typage d'une requête

Deux tests utiles dans une colonne personnalisée :

// La valeur peut-elle être lue comme une date ?
try Value.Is(Date.From([Colonne]), type date) otherwise false
// Garder les valeurs numériques, remplacer les autres par null
try Number.From([Colonne]) otherwise null

Exemple

Requête testable : une petite table typée dès sa création, puis la description de ses colonnes.

let
    Ventes = #table(
        type table [Date = date, Produit = text, Quantité = Int64.Type, Remise = nullable number],
        {
            {#date(2026, 1, 5), "Chaise", 4, 0.1},
            {#date(2026, 1, 6), "Table", 1, null}
        }
    ),
    Schema = Table.Schema(Ventes),
    Resultat = Table.SelectColumns(Schema, {"Name", "TypeName", "IsNullable"})
in
    Resultat

Le résultat liste les quatre colonnes avec leur type (par exemple Int64.Type pour Quantité) et indique que seule Remise accepte null.

[Capture : résultat de Table.Schema, colonnes Name, TypeName et IsNullable]

Pièges et bonnes pratiques

  • Une colonne de type Any (icône ABC123) n'a pas de type défini : typez toutes les colonnes avant le chargement.
  • Number.Type (nombre décimal, à virgule flottante) peut produire de petits écarts d'arrondi sur les montants ; préférez Currency.Type (décimal fixe à 4 décimales) pour les valeurs monétaires.
  • Déclarer as number dans une fonction ne convertit pas la valeur, il vérifie seulement son type : convertissez avec Number.From si la source est du texte.
  • Le type d'une colonne personnalisée sans quatrième argument est Any, même si toutes les valeurs sont des nombres.

À retenir

  • Le langage a des types de base ; l'interface en propose des précisions (Int64.Type, Currency.Type, Percentage.Type).
  • nullable autorise les valeurs vides dans un paramètre ou une colonne.
  • Table.TransformColumnTypes convertit, avec des paramètres régionaux si besoin.
  • Value.Is, Value.Type et try ... otherwise servent à tester les valeurs.

Pour aller plus loin

  • Spécification : types. Source
  • Système de types Power Query M. Source
  • Types de données dans Power Query et matrice de conversion. Source
  • Types de données dans Power BI Desktop. Source