Open5

【BI】metabase

YuichiYuichi

開始日終了日のフィルター(デフォルト値あり)

select *
from データセット.テーブル
WHERE True
    AND (event_date between [[date({{start_date}}) #]](select min(event_date) from データセット.テーブル)
        AND [[date({{end_date}}) #]](select max(event_date) from データセット.テーブル)
)
order by event_date desc
  • start_dateに値が入ると[[]]の中が有効になり#で後続がコメントアウトされる
  • #でコメントアウトされるかはDBによって違うので注意(BQ)
  • coalesceでやる方法もあったがうまくいかなかった

https://qiita.com/prrknh/items/0b9bce126dbe20a257c6
https://discourse.metabase.com/t/default-value-in-query/5646/3

YuichiYuichi

フィールドフィルターの注意点

フィールドフィルターはエイリアスと互換性がありません
上で述べたように、SQL クエリでエイリアスを使用すると、フィールド フィルターは機能しません。たとえば、次のコード (エイリアスあり) は機能しません。

つまり可読性の向上のためエイリアスが使用できない。
metabase上でJOINするとエイリアスつけられない制約から、可読性がめちゃ悪くなる
極力ビューを作成してそれに対して参照すべし

SELECT 
  `data_warehouse.user_demographics`.`gender` -- エイリアスがつけれない弊害
 ,COUNT(DISTINCT `data_warehouse.user_demographics`.`user_id`) AS `unique_user_count`
FROM 
 `data_warehouse.user_demographics` -- BQはこの書き方
WHERE
`data_warehouse.user_demographics`.`gender` NOT LIKE "Unknown"
 [[AND {{age_group}}]]
 GROUP BY 
 `data_warehouse.user_demographics`.`gender`
ORDER BY 
    `unique_user_count` DESC

https://www.metabase.com/learn/metabase-basics/querying-and-dashboards/sql-in-metabase/field-filters

YuichiYuichi

文字列から部分一致するアイデア

 [[AND names like "%"||{{name}}||"%"]]