メイン コンテンツをスキップする 補完的コンテンツへスキップ

ネイキッド項目参照

集計関数で囲まれていない項目は、ネイキッドとみなされます。

ネイキッド項目参照は配列であり、複数の値を含んでいる可能性があります。そうであれば、Qlik Sense はそれを NULL として評価しますが、どの値が必要なのかを判別できません。

数式で常に集計関数を使用

数式による評価が正しくない場合は、集計関数がない可能性が大です。

数式内の項目参照は、値の配列です。例:

2 つのテーブル。1 つは Max(Invoice Date) が単一の値であることを表示し、もう 1 つは Invoice Date が値の配列であることを表示します。

2 つのテーブル。1 つは最大値 (請求書日付) が単一の値であることを表示し、もう 1 つは請求書日付が値の配列であることを表示します。

集計関数の項目 [請求書日付] を囲んで、1 つの値に集約する必要があります。

数式で集計関数を使用しない場合、Qlik Sense はデフォルトで Only() 関数を使用します。項目参照が複数の値を返す場合、項目は Qlik Sense により、NULL として解釈されます。

If() 関数を使用した請求書日付の分割

If() 関数は、条件付き集計によく使用されます。関数内の条件が True または False のどちらに評価されるかによって異なる値を返します。

アプリ内の Naked field references シートには、Using If() on Invoice dates というタイトルのテーブルがあります。

  1. Using If() on Invoice dates というタイトルの使用可能なテーブルを選択します。
    プロパティ パネルが開きます。
  2. [列を追加] をクリックして、[メジャー] を選択します。
  3. 数式 記号をクリックします。
    数式エディタが開きます。
  4. 以下を入力します。 If( [Invoice Date]>= Date(41323), 'After', 'Before' )
  5. [適用] をクリックします。

参照日で分割された請求書日付を表示するテーブル。

参照日で分割された請求書日付を表示するテーブル。

この数式は、Invoice Date が参照日 2013 年 2 月 18 日より前かどうかをテストし、そうである場合は「Before」を返します。日付が参照日 2013 年 2 月 18 日以降の場合、「After」が返されます。参照日は整数 41323 で表されます。

詳細については、「if - スクリプトとチャート関数」を参照してください

ネイキッド項目参照の回避

一見すると、この数式は正しいように見えます。

If([Invoice Date]>= Date(41323) 'After', 'Before')

参照日のあとに請求書日付を評価し、「After」を返すか、そうでなければ「Before」を返すはずです。しかし、Invoice Date はネイキッド項目参照であり、集計関数を持たないため、いくつかの値を持つ配列であり、NULL として評価されます。前の例では、テーブル内の Date 値ごとに Invoice Date が 1 つしかなかったため、数式は正しく計算されました。

異なる軸の値の下で同様の数式が計算される方法と、ネイキッド項目参照の問題を解決する方法を見てみましょう。

If() 関数でのネイキッド項目参照の回避

以前と同様の数式を使用します。

If([Invoice Date]>= Date(41323), Sum(Sales))

今回は、参照日以降の売上を関数が合計します。

アプリ内の Naked field references シートには、Sum(Amount) というタイトルのテーブルがあります。

  1. 使用可能な Sum(Amount) テーブルを選択します。
    プロパティ パネルが開きます。
  2. [列を追加] をクリックして、[メジャー] を選択します。
  3. 数式 記号をクリックします。
    数式エディタが開きます。
  4. 以下を入力します。 If( [Invoice Date]>= 41323, Sum(Sales) )
  5. [適用] をクリックします。

年、各年の売上の合計、If() 関数を使用した数式の結果を表示するテーブル。

年、各年の売上の合計、数式の結果を表示するテーブル

ヒント メモ[メジャー] の [ラベル] はそのままにして、各数式の違いを表示します。金額の値を含む列では、[数値書式] を [通貨] に、[書式パターン] を [$ #,##0;-$ #,##0] に変更します。

各年に、参照日より後の請求書日付の配列があります。数式には集計関数がないため、NULL と評価されます。正しい数式では、If() 関数の最初のパラメーターで Min()Max() などの集計関数を使用する必要があります。

If(Max([Invoice Date])>= Date(41323), Sum(Sales))

  1. [列を追加] をクリックして、[メジャー] を選択します。
  2. 数式 記号をクリックします。
    数式エディタが開きます。
  3. 以下を入力します。 If( [Invoice Date]>= Date(41323), Sum(Sales) )
  4. [適用] をクリックします。

年、各年の売上の合計、If() 関数を使用したさまざまな式の結果を表示するテーブル。

年、各年の売上の合計、さまざまな数式の結果を表示するテーブル

または、If() 関数を Sum() 関数内に置くこともできます。

Sum(If([Invoice Date]>= Date(41323), Sales) )

  1. [列を追加] をクリックして、[メジャー] を選択します。
  2. 数式 記号をクリックします。
    数式エディタが開きます。
  3. 以下を入力します。 Sum( If([Invoice Date]>= Date(41323), Sales ) )
  4. [適用] をクリックします。

年、各年の売上の合計、If() 関数を使用したさまざまな式の結果を表示するテーブル。

年、各年の売上の合計、さまざまな数式の結果を表示するテーブル

最後から 2 番目の数式で、If() 関数は、軸の値ごとに 1 度評価されました。最後の数式では、生データの行ごとに 1 回評価されます。関数の評価方法の違いにより結果は異なりますが、どちらも答えを返します。最初の数式は単に NULL と評価されます。上の画像は、2013 年 2 月 18 日を参照日として、数式の違いを表示しています。

このページは役に立ちましたか?

このページまたはコンテンツに、タイポ、ステップの省略、技術的エラーなどの問題が見つかった場合は、お知らせください。改善に役立たせていただきます。