looker의measure에서 사용자의dimension 선택에 대응하는 창 함수를 실현합니다

5956 단어 BigQueryLookMLLooker

모티프


Looker의view에서 어떻게든 measure에서 BigQuery의 window 함수를 사용하고 싶다고 생각합니다.
hoge_view.lookml
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]
  }
이 때, explore 시 SQL 내partition 문장에 기술된 것을 선택하지 않으면 d1_for_partition, d2_for_partitionSELECT가 실행되지 않은 열에서 파티션을 시도하는 동안 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에서 생성됩니다.

  • liquid식partition by과looker의assign를 사용합니다.
  • https://shopify.dev/docs/themes/liquid/reference/tags/variable-tags#assign
  • https://docs.looker.com/ja/reference/liquid-variables
  • bigquery의partitionexpression_in_querypartition by d1_for_partition는 같은 값이므로 partition 1,d1_for_partitionpartition_expr로 초기화1하고dimension을 선택할 때마다append: ",${d1_for_partition}"partion에 사용할 문자열을 생성합니다.
  • 선택 가능한 dimension 수량만
          {% if hoge_view.d1_for_partition._in_query %}
            {% assign partition_expr = partition_expr | append: ",${d1_for_partition}" %}
          {% endif %}
    
    부분은 필요하기 때문에 너무 많이 쓰면lookml가 길어지지만 그래도 메이저에서 윈도 함수를 사용하고 싶다면 메이저를 이렇게 정의하는 것이 좋다.
  • 구체적으로 말하면 ↓에서 어떻게든 measure에서 window 함수를 사용해야 한다.
  • 잡담


    Looker를 지지하는 사람에게 물어봤는데...

    measure에서 window 함수를 사용하는 것에 관해서는 공식적인 지원을 받지 못하는 것을 고려하는 것이 좋습니다.
    직접 사용하세요.

    좋은 웹페이지 즐겨찾기