The importance of Only()
グループ内に可能な値が 1 つしかない場合、Only() は値を返します。この値は、集計の結果になります。集計関数が指定さ入れていない場合、Qlik Sense は Only() が既定になります。
チャートの軸とパラメーターの間に 1 対 1 の関係がある場合、Only() 関数は返される可能性のある唯一の値を返します。複数の値がある場合は、NULL を返します。たとえば、単価 = 12 の製品を検索した場合、単価が 12 の製品が複数あると、NULL が返されます。
次の画像は、1 対 1 と 1 対多の関係の相違を表しています。
Only() 関数は、集計関数です。Sum() や Count() のように、この関数は多数のレコードを入力として使用して 1 つの値のみを返します。Qlik Sense は、ほぼすべての計算で集計を使用します。チャート、ソート数式、テキスト ボックス、高度な検索、計算されたラベルの数式はすべて集計であり、集計関数を使用しないと計算できません。
しかし、明示的な集計関数がない数式をユーザーが入力した場合はどうするのでしょうか。例えば、ソート数式が Date に設定されている場合はどうでしょうか?または、= [Product Type] = 'Beer and Wine' という数式を使用してビールとワインの製品を購入した顧客の高度な検索がある場合はどうでしょうか?
このような場合、計算には、Only() 関数による影響が生じます。数式に明示的な集計関数がない場合、Qlik Sense は Only() 関数を暗黙的に使用します。上記の場合、ソート数式として Only(Date) が使用され、検索条件として Only([Product Type])='Beer and Wine' が使用されます。
新しい数式が、ユーザーが予期しない結果を返す場合があります。上記の例はどちらも、Date または Product Type の値が 1 つしかない場合は機能しますが、値が複数ある場合はどちらも機能しません。
Only() を使用したさまざまな数式
類似の関数で KPI を4 つ作成します。これにより、関数内にネイキッド項目参照がある場合、または異なる位置に Only() がある場合、選択の結果に与える影響の大きさを比較できます。
アプリ内の Importance of Only() シートには、軸が Invoice Date のフィルター パネルがあります。
次の手順を実行します。
- KPI を作成します。
- [メジャーを追加] をクリックします。 記号をクリックします。
数式エディタが開きます。 - 以下を入力します。 Month([Invoice Date])
- さらに 3 つのメジャー付きの KPIs (Month(Only([Invoice Date]))、Month(Max([Invoice Date]))、Only(Month([Invoice Date]))) を作成します。
- [適用] をクリックします。
ネイキッド項目参照がある場合、Only() 関数は最下位レベルに挿入されます。つまり、最初の 2 つの KPI、Month([Invoice Date])、Month(Only([Invoice Date])) は同じように解釈され、常に同じ結果になります。
ご覧のとおり、KPI 4 つのうち 3 つが、NULL を返します。3 番目の KPI、Month(Max([Invoice Date])) は選択されていなくても、値を返しています。
数式を作成するときは、使用する集計、または複数の値がある場合はどの値を使用するかを常に自問する必要があります。NULL を使用して複数の値を表したい場合は、関数をそのままにしておきます。数には、Sum()、Avg()、Min()、またはMax() を代わりに使用するほうがよいでしょう。文字列には、Only()、または MinString() を使用できるでしょう。
次の手順を実行します。
- シートの編集を終了します。
- フィルター パネルで、1 月の日付を選択します。
- をクリックして選択を確認します。
単一の選択が行われると、すべての KPI が正しい答えを返します。数式に Month([Invoice Date]) の数式などのネイキッド項目参照が含まれている場合でも、一意の選択を行っているため、適切な値を返すことができます。
次の手順を実行します。
- フィルター パネルで、1 月の追加の日付を選択します。
- をクリックして選択を確認します。
最初の 2 つの KPI は、NULL を返し、その他の 2 つの KPI は、1 月の適切な日付を返します。具体的には、4 番目の KPI は正しい答えを返します。これは、どちらの日付選択も 1 月の日付に対するものだからです。
次の手順を実行します。
- フィルター パネルで、1 月以外の月の追加の日付を選択します。
- をクリックして選択を確認します。
異なる月の日付を使用して複数の選択が行われた場合、3番目の KPI のみが値を返します。数式 Month(Max([Invoice Date])) に従って、行われた選択から最大の月の値を返します。Only() はネイキッド項目参照を持つ数式に自動的に挿入されるため、数式にとって最低レベルが常に適切であるとは限りません。Only() の配置は重要です。
詳細については、「only - チャート関数」を参照してください