前提
Lookerではフィルタの内容をLiquid変数として参照することができます(参照)。
リンク先にあるように使用の際にはsql_quote
を使用することが推奨されているため、if
文で使う時には以下のように記述していました。
{% if _filters['view_name.field_name'] contains 'Tokyo' | sql_quote %}
'Tokyo'
{% endif %}
アップデート以降の警告内容
ゴールデンウィーク明けから、以下のような警告が出るようになりました。
This liquid does not conform to the Liquid language spec and will produce warnings or errors in a future version of Looker. Parse error was: Error parsing liquid: Liquid parse exception: parser error "mismatched input '|' expecting {TagEnd, '.', NEq, '==', '>=', '>', '<=', '<', '[', '?', 'contains', 'and', 'or'}" on line 000, index 000
Liquid文の中で|
を使うなということのようですが、先述の通りLookerからはフィルタの内容を参照する時にはsql_quote
を推奨されており、一見矛盾となってしまいます。
解決方法
警告文を調べたところ、Looker公式のこちらの記事がヒットし、下記の記述を見つけました。
Assigning the output of the function chain to a variable and including that variable in the if conditional should resolve the warning.
if
文の中で直接フィルタ内容を参照するのではなく、一旦別の変数にassign
してからif
文で使うように、と解釈したので、先ほどのコードを下記のように書き換えたところ、警告がなくなりました。
{% assign filtered_dimension = _filters['view_name.field_name'] | sql_quote %}
{% if filtered_dimension contains 'Tokyo' %}
'Tokyo'
{% endif %}
コメント
上記の記事に解決法そのものが書いてはあるのですが、Liquid記法に不慣れなこともあり具体的なコードに落とし込むところで試行錯誤してしまったため、備忘録として記録します……