集計関数
集計関数と呼ばれる関数のファミリは、複数の項目値を入力として取得し、グループごとに結果を 1 つ返す関数で構成されます。グループ化はチャート軸やスクリプト構文内の group by 条件によって定義されます。
集計関数には、Sum()、Count()、Min()、Max() などがあります。
ほとんどの集計関数は、データ ロード スクリプトとチャート式の両方で使用できますが、構文が異なります。
データ ロード スクリプトでの集計関数の使用
集計関数は LOAD および SELECT ステートメントの内部でのみ使用できます。
チャート式での集計関数の使用
内部集計に TOTAL 修飾子が含まれない限り、集計関数のパラメータに集計関数を含めることはできません。 ネストされた集計関数が必要な場合、指定された軸と組み合わせて高度な関数 Aggr を使用します。
集計関数は、選択内容によって定義されたレコード セットを集計します。ただし、代替のレコード セットは、Set 分析で Set 数式を用いることで定義できます。
集計の計算方法
集計は、特定のテーブルのレコードをループして、その中のレコードを集約します。たとえば、Count (<Field>) は、<Field> が存在するテーブル内のレコード数をカウントします。個別の項目の値のみを集計する場合は、Count(distinct<Field>) などのdistinct 節を使用する必要があります。
集計関数に異なるテーブルの項目が含まれている場合、集計関数は、構成項目のテーブルのクロス積のレコードをループ処理します。 これはパフォーマンスに悪影響をおよぼすため、特に大量のデータがある場合は、このような集計を避ける必要があります。
キー項目の集計
集計の計算方法は、集計にどのテーブルを使用するかが明確でないため、キー項目を集計することができません。たとえば、項目 <Key> が 2 つのテーブルをリンクしている場合、Count (<Key>) が 1 つ目のテーブルのレコード数を返すべきか、2 つ目のテーブルのレコード数を返すべきかが明確ではありません。
ただし、distinct 節を使用することで、集約が明確に定義され、計算することができます。
したがって、distinct 節を使用せずに集約関数の中でキー項目を使用した場合、QlikView は無意味な数を返すことになります。この問題を解決するには、distinct 節を使用するか、キーのコピー (1 つのテーブルにのみ存在するコピー) を使用します。
たとえば、次のテーブルでは、ProductID がテーブル間のキーになります。
Count(ProductID) は、Products テーブル (製品ごとに 1 つのレコードのみ – ProductID が主キー) でカウントされるか、Detailsテーブル (製品ごとに複数のレコードがある可能性が高い) でカウントされます。製品数を個別にカウントする場合は、Count(distinct ProductID) を使用する必要があります。特定のテーブルの行数をカウントする場合は、キーを使用しないでください。