集計関数
集計関数と呼ばれる関数のファミリは、複数の項目値を入力として取得し、グループごとに結果を 1 つ返す関数で構成されます。グループ化はチャート軸やスクリプト ステートメント内の group by 条件によって定義されます。
集計関数には、Sum()、Count()、Min()、Max() などがあります。
ほとんどの集計関数は、データ ロード スクリプトとチャートの数式の両方で使用できますが、構文が異なります。
制限事項:
内部集計に TOTAL 修飾子が含まれない限り、集計関数のパラメーターに他の集計関数を含めることはできません。 ネストされた集計関数が必要な場合、指定された軸と組み合わせて高度な関数 Aggr を使用します。
エンティティに名前を付けるときは、同じ名前を複数の項目、変数、またはメジャーに割り当てないでください。同じ名前のエンティティ間の競合を解決するには、厳密な優先順位があります。この順序は、これらのエンティティが使用されるすべてのオブジェクトまたはコンテキストに反映されます。この優先順位次のとおりです。
-
集計の内部では、項目は変数よりも優先されます。メジャー ラベルは、集計内では関係がなく、優先されません。
-
集計の外部では、メジャー ラベルは変数よりも優先され、変数は項目名よりも優先されます。
-
さらに、集計の外部では、ラベルが実際には計算されたものである場合を除き、メジャー ラベルを参照することによりメジャーを再使用することができます。この状況では、自己参照のリスクを低減するためにメジャーの重要性は低下し、この場合、名前は メジャーラベルとして常に最初に解釈され、2 番目に項目名、3 番目に変数名として解釈されます。
データ ロード スクリプトでの集計関数の使用
集計関数は LOAD および SELECT ステートメントの内部でのみ使用できます。
チャートの数式での集計関数の使用
内部集計に TOTAL 修飾子が含まれない限り、集計関数のパラメーターに他の集計関数を含めることはできません。 ネストされた集計関数が必要な場合、指定された軸と組み合わせて高度な関数 Aggr を使用します。
集計関数は、選択内容によって定義されたレコード セットを集計します。ただし、代替のレコード セットは、Set 分析で Set 数式を用いることで定義できます。
参照先: set 分析
集計の計算方法
集約は、特定のテーブルのレコードをループし、そのテーブル内のレコードを集約します。例えば、Count (<Field>) は、<Field> が存在するテーブル内のレコードの数をカウントします。固有の項目値のみを集計する場合は、Count (distinct <Field>) などの distinct 句を使用する必要があります。
集計関数に異なるテーブルの項目が含まれている場合、集計関数は、構成項目のテーブルの外積のレコードをループします。これにはパフォーマンスの低下があります。このため、特に大量のデータがある場合は、このような集計を回避する必要があります。
キー項目の集約
集計の計算方法は、集計に使用するテーブルが明確でないため、キー項目を集計できないことを意味します。例えば、項目 <Key> が 2 つのテーブルをリンクしている場合、Count(<Key>) が最初のテーブルまたは 2 番目のテーブルのレコード数を返す必要があるかどうかは明確ではありません。
ただし、distinct 句を使用する場合、集計は明確に定義されており、2 つのテーブルにリンクされたキー 項目に対して計算できます。
distinct 句を指定せずに集計関数内でキー項目を使用すると、Qlik Sense は意味のない数値を返します。解決策は、distinct 句を使用するか、キーのコピー (1 つのテーブルにのみ存在するコピー) を使用することです。
次のテーブルに対する例では、テーブル間のキーは ProductId です。
Count(ProductId) は Products テーブル (製品ごとに1つのレコードしかない– ProductId が主キー)、または Details テーブル (製品ごとに複数のレコードがあるものが多い) でカウントされます。個別の製品の数をカウントする場合は、Count(distinct ProductId) を使用する必要があります。特定のテーブルの行数をカウントする場合は、キーを使用しないでください。
3 以上のテーブルに含まれたキー項目の集計
distinct プレフィックスは、最大 2 つのテーブルをリンクするキー項目でのみ正常に機能します。3 つ以上のテーブルに存在するキー項目をグループ化する場合、項目の頻度情報を必要とする操作はすべて NULL を返します。キー項目が 3 つ以上のテーブルにリンクしている場合、項目の非キー コピーを代わりに使用する必要があります。