変数を使用して子テーブルによるフィルターを行う

子テーブルからのメトリックの一部のフィルターする場合について説明します。下図にモデル例を示します。

多くの場合、ユーザーごとに寄付額を合計しようと考えます。次に、その数値と参加したイベント数を比較します。この2つのタスクは、Donations.Amount の SUM と Event ID の COUNT で簡単に実行できます。

しかし、より細かな情報が欲しい場合、たとえば、特定のイベントの参加者に関する情報が欲しいときはどうすればよいのでしょうか?基本メトリックにより、参加者数とともにユーザーテーブルに含まれるデモグラフィック情報を取得できます。しかし、そのイベントの参加社からの寄付の合計額を調べたい場合はどうすればよいのでしょうか?テーブルは直接リンクしていないため、基本メトリックを使用することはできません。

この状況においては、各ユーザーがいくつかのイベントに参加し、何回か寄付を行った可能性があります。Users と Event の間には 1:N の関係が存在するため、データモデルを変更してこのテーブルを非正規化しようとしても意味がないでしょう。

変数とメトリックフィルターを使用すれば、ダッシュボードでイベントごとにソートするフィルターを作成できます。全体的な考え方としては、各ユーザーが参加したイベント数をカウントするメトリックを作成した後、その結果についてフィルターを実行します。個人がイベントに参加した場合 (現在、フィルターされてそのアイテムのみがリストアップされています)、値1が返され、この値を使ってフィルターできます。

1番目の手順は、Variable を作成して、名前を付けることです。この例では、変数は「Event Filter」と呼ばれています。これをフィルター済みの変数として設定し、ダッシュボードに表示する Event テーブル上のフィールドを選択します。Event.EventName の使用はここで機能します。

次に、この設定を集約するメトリックを作成します。「Event Filter Metric」という名前の新しいメトリックを作成し、次のフォーマットで設定します。

SELECT COUNT(EVENT.ID) by USER.ID, ALL OTHER WHERE Event Filter Variable

これは、作成したばかりの変数でフィルターした、親テーブルの ID ごとの子テーブル (Event) の ID のカウントを表します。ダッシュボード上の各レポートに移動し、数値範囲フィルターに含めます。属性として、この場合、高レベルの接続ポイントである User.ID を選択します。メトリックとして、Event Filter Metricが > 0 である場合を選択します。保存をクリックします。

最後に、ダッシュボードに移動し、ダッシュボード上で作成したばかりのアイテムについて変数フィルターに追加します。

これで、変数フィルターを使用すればいつでも、このイベントの参加に基づいて結果をフィルターできます。ここで注意しなければならないのは、Donations テーブルの親のないレコードです。User にリンクしていない Donations は、フィルターに関係なく、すべてのレポートで表示されてしまいます。これを修正するために、すべてのレポートに2番目のフィルターを適用します。これにより、寄付が重複してカウントされなくなることにも留意してください。2つのグループを選択し、メンバーに重複がある場合、重複してカウントされたメンバーについて寄付が2倍になることはありません。