ネイキッド項目参照
集計関数で囲まれていない項目は、ネイキッドとみなされます。
ネイキッド項目参照は配列であり、複数の値を含んでいる可能性があります。そうであれば、Qlik Sense はそれを NULL として評価しますが、どの値が必要なのかを判別できません。
数式で常に集計関数を使用
数式による評価が正しくない場合は、集計関数がない可能性が大です。
数式内の項目参照は、値の配列です。例:
集計関数の項目 [請求書日付] を囲んで、1 つの値に集約する必要があります。
数式で集計関数を使用しない場合、Qlik Sense はデフォルトで Only() 関数を使用します。項目参照が複数の値を返す場合、項目は Qlik Sense により、NULL として解釈されます。
If() 関数を使用した請求書日付の分割
If() 関数は、条件付き集計によく使用されます。関数内の条件が True または False のどちらに評価されるかによって異なる値を返します。
アプリ内の Naked field references シートには、Using If() on Invoice dates というタイトルのテーブルがあります。
次の手順を実行します。
-
Using If() on Invoice dates というタイトルの使用可能なテーブルを選択します。
プロパティ パネルが開きます。 - [列を追加] をクリックして、[メジャー] を選択します。
- 記号をクリックします。
数式エディタが開きます。 - 以下を入力します。 If( [Invoice Date]>= Date(41323), 'After', 'Before' )
- [適用] をクリックします。
この数式は、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) というタイトルのテーブルがあります。
次の手順を実行します。
- 使用可能な Sum(Amount) テーブルを選択します。
プロパティ パネルが開きます。 - [列を追加] をクリックして、[メジャー] を選択します。
-
記号をクリックします。
数式エディタが開きます。 - 以下を入力します。 If( [Invoice Date]>= 41323, Sum(Sales) )
- [適用] をクリックします。
各年に、参照日より後の請求書日付の配列があります。数式には集計関数がないため、NULL と評価されます。正しい数式では、If() 関数の最初のパラメーターで Min() や Max() などの集計関数を使用する必要があります。
If(Max([Invoice Date])>= Date(41323), Sum(Sales))
次の手順を実行します。
- [列を追加] をクリックして、[メジャー] を選択します。
-
記号をクリックします。
数式エディタが開きます。 - 以下を入力します。 If( [Invoice Date]>= Date(41323), Sum(Sales) )
- [適用] をクリックします。
または、If() 関数を Sum() 関数内に置くこともできます。
Sum(If([Invoice Date]>= Date(41323), Sales) )
次の手順を実行します。
- [列を追加] をクリックして、[メジャー] を選択します。
-
記号をクリックします。
数式エディタが開きます。 - 以下を入力します。 Sum( If([Invoice Date]>= Date(41323), Sales ) )
- [適用] をクリックします。
最後から 2 番目の数式で、If() 関数は、軸の値ごとに 1 度評価されました。最後の数式では、生データの行ごとに 1 回評価されます。関数の評価方法の違いにより結果は異なりますが、どちらも答えを返します。最初の数式は単に NULL と評価されます。上の画像は、2013 年 2 月 18 日を参照日として、数式の違いを表示しています。