looker의measure에서 사용자의dimension 선택에 대응하는 창 함수를 실현합니다
모티프
Looker의view에서 어떻게든 measure에서 BigQuery의 window 함수를 사용하고 싶다고 생각합니다.
hoge_view.lookmlview: hoge_view {
derived_table: {
sql: select ~~~ (略)
}
dimension: d1_for_partition {(略)}
dimension: d2_for_partition {(略)}
dimension: d3_for_order {(略)}
measure: m1 {(略)}
measure: m_with_window {
sql:
first_value(${m1}) over (
partition by ${d1_for_partition}, ${d2_for_partition}
order by ${d3_for_order} desc)
;;
required_fields: [d3_for_order]
}
이 때, explore 시 SQL 내partition 문장에 기술된 것을 선택하지 않으면 d1_for_partition, d2_for_partition
SELECT가 실행되지 않은 열에서 파티션을 시도하는 동안 SQL 오류가 발생했습니다.
사용자가 explore에서 d1_for_partition
를 선택할 때'd1_for_partition
과'둘 선택'만 선택할 때 둘 다 partition by
& 둘 다 선택하지 않을 때 파티션이 없는 measure를 정의하면 편리합니다.
실현 방법 view: hoge_view {
derived_table: {
sql: select ~~~ (略)
}
dimension: d1_for_partition {(略)}
dimension: d2_for_partition {(略)}
dimension: d3_for_order {(略)}
measure: m1 {(略)}
measure: m_with_window {
sql:
{% assign partition_expr = '1' %}
{% if hoge_view.d1_for_partition._in_query %}
{% assign partition_expr = partition_expr | append: ",${d1_for_partition}" %}
{% endif %}
{% if hoge_view.d2_for_partition._in_query %}
{% assign partition_expr = partition_expr | append: ",${d2_for_partition}" %}
{% endif %}
first_value(${m1}) over (
partition by {{partition_expr}}
order by ${d3_for_order} desc)
;;
required_fields: [d3_for_order]
}
partition by 이후의 expression이 liquid expression에서 생성됩니다.
view: hoge_view {
derived_table: {
sql: select ~~~ (略)
}
dimension: d1_for_partition {(略)}
dimension: d2_for_partition {(略)}
dimension: d3_for_order {(略)}
measure: m1 {(略)}
measure: m_with_window {
sql:
first_value(${m1}) over (
partition by ${d1_for_partition}, ${d2_for_partition}
order by ${d3_for_order} desc)
;;
required_fields: [d3_for_order]
}
view: hoge_view {
derived_table: {
sql: select ~~~ (略)
}
dimension: d1_for_partition {(略)}
dimension: d2_for_partition {(略)}
dimension: d3_for_order {(略)}
measure: m1 {(略)}
measure: m_with_window {
sql:
{% assign partition_expr = '1' %}
{% if hoge_view.d1_for_partition._in_query %}
{% assign partition_expr = partition_expr | append: ",${d1_for_partition}" %}
{% endif %}
{% if hoge_view.d2_for_partition._in_query %}
{% assign partition_expr = partition_expr | append: ",${d2_for_partition}" %}
{% endif %}
first_value(${m1}) over (
partition by {{partition_expr}}
order by ${d3_for_order} desc)
;;
required_fields: [d3_for_order]
}
partition by 이후의 expression이 liquid expression에서 생성됩니다.liquid식
partition by
과looker의assign
를 사용합니다._in_query
과partition by d1_for_partition
는 같은 값이므로 partition 1,d1_for_partition
partition_expr
로 초기화1
하고dimension을 선택할 때마다append: ",${d1_for_partition}"
partion에 사용할 문자열을 생성합니다. {% if hoge_view.d1_for_partition._in_query %}
{% assign partition_expr = partition_expr | append: ",${d1_for_partition}" %}
{% endif %}
부분은 필요하기 때문에 너무 많이 쓰면lookml가 길어지지만 그래도 메이저에서 윈도 함수를 사용하고 싶다면 메이저를 이렇게 정의하는 것이 좋다.잡담
Looker를 지지하는 사람에게 물어봤는데...
measure에서 window 함수를 사용하는 것에 관해서는 공식적인 지원을 받지 못하는 것을 고려하는 것이 좋습니다.
직접 사용하세요.
Reference
이 문제에 관하여(looker의measure에서 사용자의dimension 선택에 대응하는 창 함수를 실현합니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/gecko655/items/b3ea42a48ca5de00cba6
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(looker의measure에서 사용자의dimension 선택에 대응하는 창 함수를 실현합니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/gecko655/items/b3ea42a48ca5de00cba6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)