SQL の一般的なルール、さらには Looker では、集計関数(Looker では measure)の結果でクエリをグループ化することはできません。グループ化は、集計されていないフィールド(Looker ではディメンション)でのみ行うことができます。Looker で measure を集計しようとすると、次のエラーが表示されます。
Measures with Looker aggregations (sum, average, min, max, list types) may not reference other measures.
measure(COUNT、SUM、AVG、MAX など)をディメンションに変換し、グループ化して集計する必要がある場合(COUNT の SUM や SUM の AVG など)や、フィルタリング(HAVING 句ではなく WHERE 句で)、あるいは Explore でピボットする必要がある場合は、どうすればよいでしょうか。
派生テーブルを使用して measure をディメンション化する
Looker の内部では、このソリューションを「measure のディメンション化」と呼びます。これは、measure をディメンションとして再定義するためです。これを行うには、ディメンション化する measure をその SQL 定義に含める派生テーブルを作成します。
プロセス
次の例は、サンプルの e コマース データセットに基づいています。この例の目標は、既存の総収益 type: sum
measure に基づいて type: average
measure を作成することです。
次の手順では、SQL ベースの派生テーブルを生成する方法を概説します。SQL の代わりとして、LookML ベースの派生テーブル(ネイティブ派生テーブル(NDT))を作成することもできます。
- まず、Explore クエリを設定します。ディメンション化する measure を含む適切なフィールドを選択します。 このユースケースの例では、Explore の [Data] テーブルに [Total Revenue] を表示し、[Users State] と [Users ID] でグループ化しています。
- [Data] テーブルの [SQL] タブで [Open in SQL Runner] を選択し、SQL Runner でクエリを開きます。
-
SQL Runner でクエリを実行([Run] ボタンをクリック)して結果を確認した後、SQL Runner の歯車メニューから [Add to Project] オプションを選択します。[Add to Project] ポップアップが表示されます。この時点で、派生テーブル SQL の任意の行制限句を削除して、目的の結果がすべてクエリに含まれるようにする必要があります。
メニューから [Get Derived Table LookML] を選択し、生成された LookML を手動でコピーしてプロジェクトに貼り付けることもできます。
- [Add to Project] ポップアップで、[Project] プルダウンからプロジェクト名を選択し、派生テーブルビュー ファイルの名前を入力して、[Add] を選択します。
-
派生テーブルがビューファイルに追加されたので、ディメンション化された measure を集計する measure を作成できます。たとえば、新しい総収益ディメンション
order_items_total_revenue
に対するtype: average
measure を作成できるようになります。dimension: order_items_total_revenue { type: number sql: ${TABLE}.order_items.total_revenue ;; value_format_name: usd } measure: average_revenue { type: average sql: ${order_items_total_revenue} ;; value_format_name: usd }
- 派生テーブルで主キーが定義されていることを再確認します。
- 新しいビューを元の Explore に結合(または新しい Explore を作成)して、新しいフィールドでクエリとコンテンツを作成できるようにします。
まとめ
Looker の派生テーブルで measure をディメンション化すると、新しい機能が利用できるようになり、データをさらに分析しやすくなります。ディメンション化された measure でグループ化することで、HAVING ではなく WHERE 句でフィルタしてピボット処理し、それに基づいて他のディメンションを作成できます。この機能により、Explore のクエリとコンテンツを次のディメンションに持ち込むことが可能です。
派生テーブルの作成と使用に関する詳細、考慮事項とパフォーマンスの最適化のヒントについては、派生テーブルのドキュメント ページをご覧ください。