Loading

Le champ calculé retourne des résultats Null

Date de publication: Nov 13, 2023
Description
Les champs calculés retournent des valeurs NULL ou vides au lieu de résultats attendus

Cause

  • Pour les scénarios 1, 2 & 4, tout calcul incluant une valeur NULL retournera NULL parce que les valeurs NULL sont des valeurs numériques et requièrent donc un traitement spécial.
  • Pour le scénario 3, Tableau ajoute ELSE NULL à tout calcul logique qui ne comporte pas une instructions ELSE. Cela signifie que, si toutes les conditions sont « False », NULL sera retourné.
  • Pour le scénario 5, tout nombre divisé par zéro est non défini mathématiquement. À des fins de cohérence, Tableau affiche la valeur en tant que valeur NULL. Pour plus d'informations, reportez-vous à l'article Wikipédia Division par zéro.
Résolution
CLIQUER POUR DÉVELOPPER LA SOLUTION
Scénario 1 : les expressions contenant un champ avec une valeur NULL peuvent renvoyer des valeurs NULL
L'expression [Sales]+[Profit] renverra la valeur NULL pour tout enregistrement dans les données sous-jacentes où l'une des mesures ou les deux sont NULL. L'expression SUM([Sales])+SUM([Profit]) peut également renvoyer la valeur NULL si la somme totale est NULL, même si les agrégations comme SUM() ignorent les valeurs NULL.

Solution : placer les champs ou les agrégations dans ZN()
La fonction ZN() convertit les valeurs NULL en zéros.

[Sales] + [Profit] deviendrait ZN( [Sales] ) + ZN( [Profit] )

SUM( [Sales] ) + SUM( [Profit] ) deviendrait ZN( SUM( [Sales] )) + ZN( SUM( [Profit] ))
CLIQUER POUR DÉVELOPPER LA SOLUTION
Scénario 2 : les conditions contenant une valeur NULL renverront des valeurs NULL
Toute condition référençant une valeur NULL renverra une valeur NULL. Par exemple, [Region] = NULL renverra toujours une valeur NULL.

Solution : utiliser ISNULL() ou IFNULL()
La fonction ISNULL() vérifiera si un champ ou une valeur littérale est NULL et retournera « True » ou « False ». La fonction IFNULL() remplacera les valeurs NULL par une valeur spécifiée.

[Region] = NULL deviendrait ISNULL( [Region] )
CLIQUER POUR DÉVELOPPER LA SOLUTION
Scénario 3 : les instructions CASE ou IF sans instruction ELSE renverront des valeurs NULL si aucune condition ne renvoie « True »
Tableau lit chaque condition jusqu'à ce que l'une soit Vrai, puis renvoie cette valeur. Si aucune condition n'est « True », Tableau retournera la valeur dans l'instruction ELSE. En l'absence d'instruction ELSE, Tableau renverra une valeur NULL. Par exemple, le calcul suivant renverra toujours une valeur NULL, car « North Pole » n'est pas une région dans l'exemple d'ensemble de données Superstore :
 
IF [Region] = "North Pole"
THEN [Ventes]
END
 
Option 1 : modifier la condition afin qu'elle renvoie True. Par exemple,

IF [Region] = "Central"
THEN [Ventes]
END


Option 2 :ajouter une instruction ELSE pour renvoyer une valeur autre que NULL. Par exemple,

IF [Region] = "North Pole"
THEN [Ventes]
ELSE 0
END
CLIQUER POUR DÉVELOPPER LA SOLUTION
Scénario 4 : les expressions comprenant plusieurs instructions CASE ou IF mutuellement exclusives peuvent renvoyer des valeurs NULL
Les calculs comparant des instructions IF ou CASE ou contenant plusieurs conditions qui ne renvoient jamais la valeur True en même temps peuvent renvoyer des valeurs NULL. Par exemple, l'exemple suivant qui utilisent des données Superstore renverra toujours une valeur NULL, car les données sous-jacentes ne contiennent aucun enregistrement pour lequel les deux instructions IF renvoient une valeur non NULL en même temps : 
IF [Region] = "Central" THEN [Sales] END
-
IF [Region] = "West" THEN [Sales] END

Solution : modifier les calculs de manière à ce que toutes les expressions renvoient des valeurs non NULL

Option 1 

Incluez chaque instruction agrégée IF THEN dans une agrégation, telle que SUM() :
SUM( IF [Region] = "Central" THEN [Sales] END )
 - 
SUM( IF [Region] = "West" THEN [Sales] END )

Remarque : cette option ne fonctionnera pas si n'importe laquelle des dimensions utilisées dans l'instruction conditionnelle est incluse dans la vue. L'exemple ci-dessus ne fonctionne pas si [Region] est inclus dans la vue.


Option 2

Incluez chaque instruction agrégée IF THEN dans une expression de niveau de détail (LOD). Par exemple :
{ FIXED : SUM( IF [Region] = "Central" THEN [Sales] END ) }

-

{ FIXED : SUM( IF [Region] = "West" THEN [Sales] END ) }

 

Remarque : il peut être nécessaire d'ajouter des dimensions à partir de la vue dans le calcul ci-dessus (après FIXED).

Option 3

Incluez chaque instruction agrégée IF THEN dans une fonction de table. Par exemple :
WINDOW_SUM( SUM( IF [Region] = "Central" THEN [Sales] END ))
- 
WINDOW_SUM( SUM( IF [Region] = "West" THEN [Sales] END ))
Pour un autre exemple utilisant des fonctions de table, consultez Calcul de la différence entre deux valeurs de la même mesure dans une vue.
CLIQUER POUR DÉVELOPPER LA SOLUTION
Scénario 5 : conversion d'une chaîne non numérique en nombre
Une chaîne (à savoir une valeur texte) contenant des caractères non numériques renverra une valeur NULL si elle est convertie en un nombre.

Solution : modifier la chaîne de manière à supprimer les caractères non numérique
Par exemple, si le champ [Price] contient la chaîne « $4.50 », le calcul suivant renvoie une valeur NULL :

FLOAT( [Price] )

Si chaque valeur dans [Price] est précédée par « $ », le calcul pourrait être modifié en

FLOAT( RIGHT( [Price], LEN( [Price] ) - 1 ))

Si [Price] contient certaines valeurs de chaîne avec un « $ » et certaines sans, le calcul pourrait être modifié en

FLOAT(
IF ISNULL( FLOAT( LEFT( [Price],1 )))
THEN RIGHT( [Price], LEN( [Price] ) - 1 )
ELSE [Price]
END

)
CLIQUER POUR DÉVELOPPER LA SOLUTION
Scénario 6 : les expressions réalisant une division par zéro renverront une valeur NULL
Tout nombre divisé par zéro renvoie une valeur NULL dans Tableau.

Solution : définir le dénominateur sur une autre valeur
CLIQUER POUR DÉVELOPPER LA SOLUTION
Scénario 7 : DATE() ou DATEPARSE() peut renvoyer une valeur NULL
Les fonctions DATE() ou DATEPARSE() peuvent renvoyer une valeur NULL si le format de date de la valeur texte n'est pas pris en charge par les paramètres régionaux de l'ordinateur. Pour plus d'informations, voir Convertir un champ en un champ Date.

La fonction DATEPARSE() peut également renvoyer une valeur NULL si le format de date spécifié ne correspond pas au format de date du champ. Par exemple, le champ [Order Date] contient des valeurs formatées en tant que m/d/yyyy, par exemple « 1/13/2018 ». Le calcul DATEPARSE('m-d-yyyy', [Order Date] ) retournera des valeurs NULL parce qu'il utilise des tirets au lieu de traits obliques.

Solution : modifier le format de date pour qu'il corresponde exactement au format de date des données
Numéro d’article de la base de connaissances

001474028

 
Chargement
Salesforce Help | Article