Firebaseのカスタムイベントに対して、カスタムキーでイベントを複数回送信すると、1ユーザに対して複数のイベントがレコードに登録されます。このデータを、FirebaseからBigQueryに転送した後、Redashで解析することを考えます。

このイベントが進行度の場合で、カスタムキーに対してint値を保つ場合に、各進行度に対して、何人のユーザがいるかを計測したい場合があります。その際、そのままカウントしてしまうと、1ユーザが複数回イベントを発行してしまっているため、ユーザ数が実際のユーザ数よりも多くなってしまいます。1ユーザが複数のイベントを発行していた場合、ユーザごとに最大の進行度を計算してから、カウントしたいです。

この目的を達成するには、以下のようなクエリを実行します。GROUP BYで user_dim.app_info.app_instance_idを指定して、MAX(event_dim.params.value.int_value) でまとめた後、COUNTします。

SELECT 
  some_int_value,
  EXACT_COUNT_DISTINCT( user_dim.app_info.app_instance_id ) as users
FROM
(
SELECT user_dim.app_info.app_instance_id,
       MAX(event_dim.params.value.int_value) AS some_int_value
FROM [xxx-xxx:xxx_ANDROID.app_events_xxx]
WHERE event_dim.name = "some_event_name"
  AND event_dim.params.key = "some_event_key"
GROUP BY user_dim.app_info.app_instance_id
)
GROUP BY
  1
ORDER BY 
  some_int_value

また、複数の日付のテーブルを結合して集計する場合は、FROMを以下のように書き換えます。

FROM 
(TABLE_DATE_RANGE([xxx-xxx:xxx_ANDROID.app_events_], 
                    TIMESTAMP('2017-07-04'), 
                    TIMESTAMP('2017-07-09')))

参考:BigQuery と Firebase Analytics によるモバイル アプリのカスタム分析