Amazon Web Services ブログ

Amazon QuickSight で Level Aware Aggregations を使用して、高度なインサイトを作成します

Amazon QuickSight は最近、高度で意味のあるインサイトを求めるために、データに計算を実行できるLevel Aware Aggregations (LAA) を立ち上げました。このブログ記事では、これらの計算をサンプルの売上データセットに適用する例を解説し、皆さんのニーズに合わせてこの機能をすぐに活用していただけるようにします。

Level Aware Aggregations とは?

Level Aware Aggregation は、QuickSight の全体的なクエリ評価順序で、希望のレベルで計算できる集計の計算です。QuickSight の評価順序 の詳細については、このリンクを確認してください。現時点まで、QuickSight で可能な唯一の集計タイプは、表示レベル と テーブル計算 の集計タイプでした。

  • 表示レベル集計は、QuickSight ビジュアルのフィールド ウェルに存在するディメンションとメトリックによって定義される集計です。.
  • テーブル計算は、ビジュアルの表示レベルの集計値のウィンドウ化/ロールアップによって計算されます。したがって、定義では、これらは表示レベルの集計が計算された後に計算されます。

Level Aware Aggregations で QuickSight は現在、表示レベル集計の前に値を修正できるようになりました。詳細については、Level Aware Aggregations のドキュメントを参照してください。

お客様のユースケース

存続期間中の注文による顧客の分布

顧客の質問: 1 つの注文、2 つの注文、3 つの注文などを行った顧客の数は?

この場合、最初に各顧客が行った注文の総数を集計し、その出力をビジュアルディメンションとして使用します。これは、LAA なしで計算することは可能ではありません。

LAA を使用したソリューション

1.) 顧客ごとに注文の数を計算します。

計算フィールド名:  NumberOrdersPerCustomer

計算フィールド式: countOver({order_id}, [{Customer Id}], PRE_AGG)

これは、顧客ごとの注文数を計算してから、ビジュアルの表示レベルの集計を行います。

2.) ビジュアルを作成します。

フィールドウェルの A 軸ウェルで上記のフィールド NumberOrdersPerCustomer によりビジュアルを作成します。フィールドウェルの「値」セクションに「顧客 ID」の「個別のカウント」を追加して、顧客による注文数のヒストグラムを作成します。

ご覧の通り、1 つの注文を行った約 5000 の固有の顧客、2 つ以上の注文を行った約 3500 の顧客などがいます。

存続期間中の支出に基づいて、顧客をフィルターアウトします

顧客の質問: 存続期間中の支出が 100,000 USD 未満の顧客をフィルターアウトするには? 私のビジュアルディメンション (グループ分け) とメトリックの定義は、顧客ごとの合計支出から独立しています。

前述の集計(支出)のグループディメンションがフィールドウェルのグループディメンションとまったく同じである場合、顧客は 集計フィルター機能を使用してこれを達成できます。しかし、このケースがいつも当てはまるわけではありません。顧客の質問で述べられているように、ビジュアルのディメンションはフィルターの集計と異なる場合があります。

LAA を使用したソリューション

1.) 顧客ごとの売上の合計を計算します。

計算フィールド名:  salesPerCustomer

計算フィールド式: sumOver(sales,[{customer_id}],PRE_AGG)

PRE_AGG は、表示レベルの集計の前に計算が行われなければならいことを示します。

2.) ビジュアルを作成します。

左側のビジュアルはセグメントごとの売上合計を示し、右側のビジュアルは顧客の合計数を示します。この時点では、フィルターは適用されていないことにご留意ください。

3.) salesPerCustomer のフィルターを作成します。 

上記のフィールド salesPerCustomer の上にフィルターを作成し、100,000 USD を超える項目を選択します。

4.) フィルターを適用します。

上記の画像は、100,000 USD を超える「salesPerCustomer」のフィルターを適用しているところを示します。

フィルターを適用して、ビジュアルで表示するために選択した項目にかかわらず、合計支出が 100,000 USD 未満の総支出の顧客を除外しました。

フィルターが適用されたときでも総売上の固定の割合 (%)

顧客の質問: 会社全体の利益に対する各産業の貢献 (総額の割合(%)) はいくらですか? フィルターが適用されるときに合計を再計算したくありません。

既存のテーブル計算機能 percentOfTotal は、問題を解決することができません。カテゴリのフィルターが合計の計算前に適用されるからです。percentOfTotal を使用すると、フィルターが適用されるたびに合計が再計算されます。合計を計算するときに、フィルタリングを考えないソリューションが必要です。

LAA を使用したソリューション

1.) 計算フィールド を通じてフィルタ前に総売り上げを計算します。

計算フィールド名: totalSalesBeforeFilters

計算フィールド式: sumOver(sales,[],PRE_FILTER)

PRE_FILTER は、フィルターを適用する前にこの計算を行わなければならないことを示します。

総合計を計算したいため、パーティションディメンションリスト (2 番目の引数) は空です。

2.) 総売上の固定された割合 (%) を計算します。.

計算フィールド名: fixedPercentOfTotal

計算フィールド式: sum(sales) / min(totalSalesBeforeFilters)

注: totalSalesBeforeFilters は、unaggregated data の各行に対して同じです。事後集計にそれを使いたいため、集計 min をその上に使用しています。すべての値が同じである場合、最大または平均の集計を使用することができるだけではなく、同じ目的を果たします。

3.) ビジュアルを作成します。

「産業」フィールドを「行」ウェルに追加します。「sales (SUM)」と「fixedPercentOfTotal」を「values」セクションに追加します。ここで、基礎となるディメンションまたはメジャーに基づいてデータをフィルターアウトしても、合計メトリックの割合は固定されたままになります。

ビジュアルは、上記のテーブル計算 percentOfTotal を使用して計算され、Level Aware Aggregation を使用して計算された産業ごとの売上高と合計の割合を示します。フィルターが適用されていないため、両方の合計値の割合は、現在同じです。

ビジュアルは同じメトリックスを表示しますが、産業はそれらの 5 つのみにフィルターされています。ご覧のように、「総売上高の割合」はフィルタリングされたデータのみを表すように再調整されましたが、「総売上高の固定割合」はフィルタリング後でさえも同じままです。両方のメトリックは QuickSight を通じて実現可能な貴重な顧客のユースケースです。

カテゴリの売上と産業平均との比較

顧客の質問: カテゴリの売上を産業平均と比較するには? フィルタリング後でさえも、産業平均に全カテゴリを含めたいと思います。

フィルタリング後でも産業平均を固定のままにしておきたいため、これを達成するために、 PRE_FILTER 集計が必要です。

LAA を使用したソリューション

1.) 産業平均を計算します。

計算フィールド名: IndustryAverage

計算フィールド式: avgOver(sumOver(sales,[{category}],PRE_FILTER),[],PRE_FILTER)

最初にカテゴリごとの総売上高を計算し、それをカテゴリ全体で平均します。ここでは、最初に細かいレベルの集計を計算してから、それをより粗いレベルの集計に送ることにご留意ください。

2.) IndustryAverage との差を計算します。

計算フィールド名: FixedDifferenceFromIndustryAverage

計算フィールド式: sum(sales) – min(IndustryAverage)

上記の例の 1 つで示したように、進行中にデータを保持するために、min 集計を使用します。

3.) ビジュアルを作成します。

「X軸」フィールドウェルと SUM(Sales)、IndustryAverage および FixedDifferenceFromIndustryAverage に棒グラフの値として「カテゴリ」を追加してビジュアルを作成します。

ビジュアルには、カテゴリごとの総売上高、全産業の平均、および各カテゴリの平均との差が表示されます。

このビジュアルは同じメトリックスを示していますが、カテゴリでフィルターすると、6 個のみが含まれます。これからもわかるように、産業平均はフィルタリングの前と後では同じままになり、全カテゴリ、一部のカテゴリ、1 つのカテゴリのいずれを表示した場合でも、差は同じまま維持されます。

存続期間中の支出に基づいて、顧客をカテゴリに分けます

顧客の質問: 累積売上貢献に基づいて顧客を分類するにはどうすればよいですか? その後、ビジュアルグループ化としてその分類を使用したいと思います。

ここでの目標は、カスタムサイズのビンを作成して、顧客をカテゴリに分けることです。表示レベルの集計後にこの分類を行うことはできますが、ビジュアルでは、ディメンション/グループとして使用することはできません。

LAA を使用したソリューション

1.) 顧客の売上を表示レベル集計前に計算します。

計算フィールド名:  salesPerCustomer

計算フィールド式: sumOver({sales amount},[{customer id}],PRE_AGG)

2.) 顧客をカテゴリに分けます。

計算フィールド名:  Customer Category

計算フィールド式: ifelse(salesPerCustomer < 1000, “VERY_LOW”, salesPerCustomer < 10000, “LOW”, salesPerCustomer < 100000, “MEDIUM”, “HIGH”)

3.) ビジュアルを作成します。

「顧客カテゴリ」を「Y 軸」フィールドウェルに加算し、値フィールドウェルに「顧客ID」の「個別のカウント」を加算することで、ビジュアルを作成します。

上図は顧客カテゴリごとの固有の顧客の数を示します。

その他の関連するビジュアルを構築するために、フィルタリングをこれらのカテゴリの最上部で行うことができます。カテゴリは集計前にタグ付けされるためです。

上図は顧客カテゴリごとに性別の固有の顧客の数を示します。

ご利用状況

Level Aware Aggregations は、サポートされているすべての AWS リージョンで、標準エディションとエンタープライズエディションの両方で利用できます。詳しくは、Amazon QuickSight ドキュメントを参照してください。

 


著者について

Arun Baskar はアマゾン ウェブ サービスの QuickSight のソフトウェア開発エンジニアです