Loading
Salesforce から送信されるメールは、承認済ドメインからのみとなります続きを読む

計算フィールドから NULL の結果が返される

公開日: Nov 13, 2023
説明
計算フィールドから、予期した結果の代わりに NULL または空白の値が返される

Cause

  • シナリオ 1, 2, 4 について: NULL 値が数値でなく特殊な処理が必要なため、NULL を含む計算からは NULL が返されます。
  • シナリオ 3 について: Tableau では、ELSE ステートメントのない論理計算に ELSE NULL が追加されます。これは、すべての条件が False である場合に NULL が返されることを意味します。
  • シナリオ 5 について: 任意の数値をゼロで割ることは、数学的に定義されていません。一貫性のため、Tableau ではこの値が NULL として表示されます。詳細については、Wikipedia の記事「ゼロ除算」を参照してください。
解決策
クリックしてソリューションを展開する
シナリオ 1: NULL 値が入っているフィールドを含む式から NULL 値が返される場合がある
式 [Sales]+[Profit] では、1 つまたは両方のメジャーが NULL である場合、参照元データ内のどのレコードに対しても NULL が返されます。また、合計全体が NULL である場合は、SUM() などの集計で NULL 値が無視されたとしても、式 SUM([Sales])+SUM([Profit]) からも NULL が返されることがあります。

解決策: フィールドまたは集計を ZN() で囲む
ZN() 関数によって NULL 値はゼロに変換されます。

[Sales] + [Profit]ZN( [Sales] ) + ZN( [Profit] ) になります。

SUM( [Sales] ) + SUM( [Profit] )ZN( SUM( [Sales] )) + ZN( SUM( [Profit] )) になります。
クリックしてソリューションを展開する
シナリオ 2: NULL 値を含む条件から NULL 値が返される
NULL を参照するすべての条件から NULL が返されます。たとえば、[Region] = NULL からは常に NULL 値が返されます。

解決策: ISNULL() または IFNULL() を使用する
ISNULL() 関数は、フィールドまたはリテラル値が NULL であるかどうかを確認して True または False を返します。IFNULL() 関数では、NULL 値が指定した値に置換されます。

[Region] = NULL would become ISNULL( [Region] )
クリックしてソリューションを展開する
シナリオ 3: CASE または IF ステートメントを ELSE ステートメントなしで使用すると、True になる条件がない場合に NULL 値が返される
Tableau では、True になる条件が見つかるまで各条件が確認され、その値が返されます。True になる条件がない場合は、ELSE ステートメントでその値が返されます。ELSE ステートメントがない場合は、NULL が返されます。たとえば、次の計算では、"North Pole (北極)" がサンプル データ セット "Superstore (スーパーストア)" 内の地域ではないため、常に NULL が返されます。
 
IF [Region] = "North Pole"
THEN [Sales]
END
 
オプション 1: True が返されるように条件を変更します。例:

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


オプション 2: NULL 以外の値を返す ELSE ステートメントを追加します。例:

IF [Region] = "North Pole"
THEN [Sales]
ELSE 0
END
クリックしてソリューションを展開する
シナリオ 4: 複数の相互排他的な CASE または IF ステートメントを含む式から NULL 値が返される場合がある
IF または CASE ステートメントを比較する計算や、同時には絶対に True にならない複数の条件を含む計算から NULL が返される場合があります。たとえば、"Superstore (スーパーストア)" データを使用している次の例では、両方の IF ステートメントで同時に NULL 以外の値が返されるレコードが参照元データ内に存在しないため、常に NULL が返されます。 
IF [Region] = "Central" THEN [Sales] END
-
IF [Region] = "West" THEN [Sales] END

解決策: すべての式で NULL 以外の値が返されるように計算を修正する

オプション 1 

各 IF THEN ステートメントを SUM() などの集計で囲みます。
SUM( IF [Region] = "Central" THEN [Sales] END )
 - 
SUM( IF [Region] = "West" THEN [Sales] END )

: 条件付きステートメントで使用されているディメンションのいずれかがビューに含まれている場合、このオプションは機能しません。[Region] がビューに含まれている場合、上記の例は機能しません。


オプション 2

集計された各 IF THEN ステートメントを、詳細レベル (LOD) 式で囲みます。例は次のとおりです。
{ FIXED : SUM( IF [Region] = "Central" THEN [Sales] END ) }

-

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

 

: ビューからのディメンションを上記の計算 (FIXED の後) に追加することが必要になる場合があります。

オプション 3

集計された各 IF THEN ステートメントを表関数で囲みます。例は次のとおりです。
WINDOW_SUM( SUM( IF [Region] = "Central" THEN [Sales] END ))
- 
WINDOW_SUM( SUM( IF [Region] = "West" THEN [Sales] END ))
表関数を使用する別の例については、「ビュー内の 1 つのメジャーにおける 2 つの値の差を計算」を参照してください。
クリックしてソリューションを展開する
シナリオ 5: 数値以外の文字列を数字に変換する
数値以外の文字を含む文字列 (テキスト値) を数字に変換すると NULL が返されます。

解決策: 文字列を修正して数値以外の文字を削除する
たとえば、フィールド [Price] に "$4.50" という文字列が含まれる場合、次の計算では NULL が返されます。

FLOAT( [Price] )

[Price] のすべての値の先頭に「$」がある場合、計算を次のように修正できます。

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

[Price] に「$」のある文字列値とない文字列値が混在する場合、計算を次のように修正できます。

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

)
クリックしてソリューションを展開する
シナリオ 6: 式をゼロで割ると NULL が返される
Tableau では、任意の数値をゼロで割ると NULL 値が返されます。

解決策: 分母を別の値に変更する
クリックしてソリューションを展開する
シナリオ 7: DATE() または DATEPARSE() から NULL が返される場合がある
関数 DATE() または DATEPARSE() では、テキスト値の日付形式がコンピューターのロケールでサポートされていないと、NULL が返される場合があります。詳細については、「フィールドを日付フィールドに変換する」を参照してください。

関数 DATEPARSE() でも、指定された日付形式がフィールドの日付形式と一致しないと、NULL が返される場合があります。たとえば、フィールド [Order Date (注文日)] に m/d/yyyy の形式の値 ("1/13/2018" など) が含まれているとします。計算 DATEPARSE('m-d-yyyy', [Order Date] ) では、スラッシュの代わりにダッシュが使用されているため、NULL 値が返されます。

解決策: 日付形式をデータの日付形式と完全に一致するように変更する
ナレッジ記事番号

001474028

 
読み込み中
Salesforce Help | Article