# ネイキッド項目参照

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

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

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

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

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

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

![2 つのテーブル。1 つは最大値 (請求書日付) が単一の値であることを表示し、もう 1 つは請求書日付が値の配列であることを表示します。](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-nakedfield-table1.png)

集計関数の項目 [請求書日付] を囲んで、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. the 式 icon 記号をクリックします。  
   数式エディタが開きます。
4. If( [Invoice Date]&gt;= Date(41323), 'After', 'Before' ) を入力します。
5. [適用] をクリックします。

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

![参照日で分割された請求書日付を表示するテーブル。](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-nakedfield-table2.png)

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

詳細については、「[if - スクリプトとチャート関数](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ConditionalFunctions/if.htm)」を参照してください

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

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

If([Invoice Date]&gt;= Date(41323) 'After', 'Before')

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

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

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

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

If([Invoice Date]&gt;= Date(41323), Sum(Sales))

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

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

次の手順を実行します。

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

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

![年、各年の売上の合計、数式の結果を表示するテーブル](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-nakedfield-table3.png)

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

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

If(Max([Invoice Date])&gt;= Date(41323), Sum(Sales))

次の手順を実行します。

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

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

![年、各年の売上の合計、さまざまな数式の結果を表示するテーブル](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-nakedfield-table4.png)

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

Sum(If([Invoice Date]&gt;= Date(41323), Sales) )

次の手順を実行します。

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

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

![年、各年の売上の合計、さまざまな数式の結果を表示するテーブル](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Resources/Images/tutorial-nakedfield-table5.png)

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