Number.Abs : obtenir la valeur absolue dans Power Query
Une fonction sans surprise, utilisée à contretemps dans neuf analyses d’écart sur dix.
Number.Abs retire le signe d’un nombre : -42 devient 42, 42 reste 42. Sur une valeur nulle, elle rend null. Il n’y a rien d’autre à savoir sur son fonctionnement, ce qui rend d’autant plus utile de parler de son usage.
Un paramètre, rien d’autre
Number.Abs(number as nullable number) as nullable number
Number.Abs(-123.456) // 123.456
Number.Abs(123.456) // 123.456
Number.Abs(null) // null
Sur une colonne entière, on l’applique sans écrire de fonction anonyme, puisqu’elle prend exactement un argument :
Table.TransformColumns(Source, {{"Écart", Number.Abs, type number}})
Ne remplacez jamais l’écart signé par l’écart absolu
C’est l’erreur que nous corrigeons le plus souvent sur les tableaux de bord de suivi budgétaire. Un écart de moins 40 000 euros et un écart de plus 40 000 euros racontent deux histoires opposées. Écrasés en valeur absolue, ils deviennent la même ligne.
La valeur absolue sert à classer par ampleur, pas à mesurer. Le bon réflexe consiste donc à garder les deux colonnes.
let
Ecart = Table.AddColumn(Source, "Écart", each [Réel] - [Budget], type number),
Ampleur = Table.AddColumn(Ecart, "Ampleur", each Number.Abs([Écart]), type number),
Classe = Table.Sort(Ampleur, {{"Ampleur", Order.Descending}})
in
Classe
Le rapport trie alors sur « Ampleur » et affiche « Écart ». Les vingt postes qui bougent le plus remontent en tête, qu’ils dérapent ou qu’ils s’améliorent, et le lecteur voit immédiatement dans quel sens.
Deuxième usage légitime : les contrôles de cohérence. Un rapprochement qui devrait tomber à zéro se teste sur l’écart absolu, avec une tolérance, plutôt que sur une égalité stricte que les arrondis mettent en défaut.
Table.SelectRows(Source, each Number.Abs([Débit] - [Crédit]) > 0.01)
Cette ligne isole les écritures non équilibrées de plus d’un centime, sans faire remonter le bruit des arrondis.
Ce qu’on nous demande sur Number.Abs
Que renvoie Number.Abs sur une cellule vide ?
null, et non zéro. La nuance compte : une valeur absente n’est pas une valeur nulle, et les confondre fausse les moyennes. Si l’absence doit être traitée comme un zéro, écrivez-le explicitement avec each Number.Abs([Colonne] ?? 0).
Comment obtenir la valeur absolue en DAX ?
Avec ABS(), qui fait la même chose côté mesure. Le choix suit la règle habituelle : en Power Query quand la valeur absolue fait partie de la donnée chargée, en DAX quand elle dépend du contexte de filtre du visuel.
Number.Abs fonctionne-t-elle sur du texte ?
Non, elle attend un nombre. Sur une colonne encore typée en texte, convertissez d’abord avec Number.From, faute de quoi la fonction remonte une erreur ligne à ligne.
Les fonctions qu’on utilise avec
Number.Round: arrondir, avec son piège d’arrondi au pair.Table.FindText: retrouver une valeur dans toute une table.- La référence complète Power Query et DAX.
Un suivi budgétaire qui ne montre pas les bons écarts ?
Nous reprenons la structure des tableaux de suivi pour que les dérapages remontent en tête, avec leur sens. Premier retour sous cinq jours ouvrés.