Filter template dan parameter Liquid

Ini adalah topik lanjutan yang ditujukan bagi pengguna yang sudah memiliki pengetahuan yang baik tentang SQL dan LookML.

Looker secara otomatis memberi pengguna kemampuan untuk memanipulasi kueri mereka dengan membuat filter, yang didasarkan pada dimensi dan ukuran. Meskipun metode ini memenuhi banyak kasus penggunaan, metode ini tidak dapat memenuhi setiap kebutuhan analisis. Filter template dan parameter Liquid memperluas kemungkinan kasus penggunaan yang dapat Anda dukung.

Dari perspektif SQL, dimensi dan ukuran hanya dapat mengubah klausa WHERE atau HAVING terluar dalam kueri Anda. Namun, Anda mungkin ingin mengizinkan pengguna memanipulasi bagian SQL lainnya. Menyesuaikan bagian tabel turunan, menyesuaikan tabel database yang dikueri, atau membuat dimensi dan filter serbaguna hanyalah beberapa fitur yang dapat Anda aktifkan dengan filter ber-template dan parameter Liquid.

Filter template dan parameter Liquid menggunakan bahasa template Liquid untuk menyisipkan input pengguna ke dalam kueri SQL. Pertama, Anda menggunakan parameter LookML untuk membuat kolom yang dapat digunakan pengguna untuk berinteraksi. Selanjutnya, Anda menggunakan variabel Liquid untuk menyuntikkan input pengguna ke dalam kueri SQL.

Contoh

Mari kita lihat beberapa contoh untuk menunjukkan nilai filter template dan parameter Liquid.

Membuat tabel turunan dinamis dengan filter yang dibuat menggunakan template

Pertimbangkan tabel turunan yang menghitung pembelanjaan seumur hidup pelanggan, dalam wilayah timur laut:

view: customer_facts {
  derived_table: {
    sql:
      SELECT
        customer_id,                        -- Can be made a dimension
        SUM(sale_price) AS lifetime_spend   -- Can be made a dimension
      FROM
        order
      WHERE
        region = 'northeast'                -- Can NOT be made a dimension
      GROUP BY 1
    ;;
  }
}

Dalam kueri ini, Anda dapat membuat dimensi dari customer_id dan lifetime_spend. Namun, misalkan Anda ingin pengguna dapat menentukan region, bukan meng-hardcode-nya ke "timur laut". region tidak dapat diekspos sebagai dimensi, sehingga pengguna tidak dapat memfilternya seperti biasa.

Salah satu opsinya adalah menggunakan filter ber-template, yang akan terlihat seperti ini:

view: customer_facts {
  derived_table: {
    sql:
      SELECT
        customer_id,
        SUM(sale_price) AS lifetime_spend
      FROM
        order
      WHERE
        {% condition order_region %} order.region {% endcondition %}
      GROUP BY 1
    ;;
  }

  filter: order_region {
    type: string
  }
}

Baca selengkapnya di bagian Penggunaan Dasar untuk mengetahui petunjuk langkah demi langkah.

Membuat ukuran dinamis dengan parameter Liquid

Pertimbangkan ukuran yang difilter yang menjumlahkan jumlah celana yang terjual:

measure: pants_count {
  filters: [category: "pants"]
}

Hal ini mudah dilakukan, tetapi jika ada puluhan kategori, akan merepotkan untuk membuat ukuran untuk setiap kategori. Selain itu, hal ini dapat mengacaukan pengalaman Jelajahi bagi pengguna.

Alternatifnya adalah membuat ukuran dinamis seperti ini:

measure: category_count {
  type: sum
  sql:
    CASE
      WHEN ${category} = '{% parameter category_to_count %}'
      THEN 1
      ELSE 0
    END
  ;;
}

parameter: category_to_count {
  type: string
}

Baca selengkapnya di bagian Penggunaan dasar untuk mengetahui petunjuk langkah demi langkah.

Penggunaan dasar

Langkah pertama: Buat sesuatu yang dapat berinteraksi dengan pengguna

  • Untuk filter ber-template, tambahkan filter.
  • Untuk parameter Liquid, tambahkan parameter.

Dalam kedua kasus tersebut, kolom ini akan muncul kepada pengguna di bagian Kolom Hanya Filter pada pemilih kolom.

Kolom filter dan parameter dapat menerima serangkaian parameter turunan, sehingga Anda dapat menyesuaikan cara pengoperasiannya. Lihat halaman dokumentasi Parameter kolom untuk mengetahui daftar lengkapnya. Ada dua opsi yang perlu disebutkan secara khusus untuk kolom parameter.

Pertama, kolom parameter dapat memiliki jenis khusus yang disebut unquoted:

parameter: table_name {
  type: unquoted
}

Jenis ini memungkinkan nilai dimasukkan ke dalam SQL tanpa diapit tanda petik, seperti string. Hal ini dapat berguna saat Anda perlu menyisipkan nilai SQL seperti nama tabel.

Kedua, kolom parameter memiliki opsi yang disebut nilai yang diizinkan yang memungkinkan Anda mengaitkan nama yang mudah digunakan dengan nilai yang ingin Anda masukkan. Contoh:

  parameter: sale_price_metric_picker {
    description: "Use with the Sale Price Metric measure"
    type: unquoted
    allowed_value: {
      label: "Total Sale Price"
      value: "SUM"
    }
    allowed_value: {
      label: "Average Sale Price"
      value: "AVG"
    }
    allowed_value: {
      label: "Maximum Sale Price"
      value: "MAX"
    }
    allowed_value: {
      label: "Minimum Sale Price"
      value: "MIN"
    }
  }

Langkah kedua: Terapkan input pengguna

Langkah kedua adalah menggunakan Liquid untuk menambahkan filter yang dibuat dengan template atau parameter Liquid sesuai keinginan.

Filter template

Sintaksis untuk filter ber-template diuraikan seperti ini:

{% condition filter_name %} sql_or_lookml_reference {% endcondition %}
  • Kata condition dan endcondition tidak pernah berubah.
  • Ganti filter_name dengan nama filter yang Anda buat di langkah pertama. Anda juga dapat menggunakan dimensi jika tidak membuat kolom hanya filter.
  • Ganti sql_or_lookml_reference dengan SQL atau LookML yang harus ditetapkan "sama" dengan input pengguna (hal ini dijelaskan lebih mendetail di bagian ini nanti). Jika menggunakan LookML, gunakan ${view_name.field_name} sintaksis LookML.

Dalam contoh sebelumnya, Membuat tabel turunan dinamis dengan filter bertemplate, kita menggunakan:

{% condition order_region %} order.region {% endcondition %}

Penting untuk memahami interaksi antara tag Liquid dan SQL yang Anda tulis di antara tag. Tag filter ber-template ini selalu diubah menjadi ekspresi logis. Misalnya, jika pengguna memasukkan "Timur Laut" ke dalam filter order_region, Looker akan mengubah tag ini menjadi berikut:

order.region = 'Northeast'

Dengan kata lain, Looker menafsirkan input pengguna dan menghasilkan ekspresi logis yang sesuai.

Karena filter ber-template menampilkan ekspresi logis, Anda dapat menggunakannya dengan operator logis dan ekspresi logis lainnya yang valid dalam pernyataan SQL WHERE. Dengan menggunakan contoh sebelumnya, jika Anda ingin menampilkan semua nilai kecuali wilayah yang dipilih pengguna, Anda dapat menggunakan kode berikut dalam pernyataan WHERE:

NOT ({% condition order_region %} order.region {% endcondition %})

Anda juga dapat menggunakan kolom LookML sebagai kondisi filter. Filter apa pun yang diterapkan langsung ke kolom LookML akan menentukan nilai pernyataan WHERE:

view: customer_facts {
  derived_table: {
    sql:
      SELECT
        customer_id,
        SUM(sale_price) AS lifetime_spend
      FROM
        order
      WHERE
        {% condition region %} order.region {% endcondition %}
      GROUP BY 1
    ;;
  }

  dimension: region {
    type: string
    sql: ${TABLE}.region ;;
}

Parameter Liquid

Sintaksis untuk parameter Liquid diuraikan seperti ini:

{% parameter parameter_name %}
  • Kata parameter tidak pernah berubah.
  • Ganti parameter_name dengan nama parameter yang Anda buat di langkah pertama.

Misalnya, untuk menerapkan input dari kolom parameter di langkah pertama, Anda dapat membuat ukuran seperti ini:

  measure: sale_price_metric {
    description: "Use with the Sale Price Metric Picker filter-only field"
    type: number
    label_from_parameter: sale_price_metric_picker
    sql: {% parameter sale_price_metric_picker %}(${sale_price}) ;;
    value_format_name: usd
  }

Memilih antara filter template dan parameter Liquid

Meskipun filter template dan parameter Liquid serupa, ada perbedaan penting di antara keduanya:

  • Parameter Liquid memasukkan input pengguna secara langsung (atau menggunakan nilai yang Anda tentukan dengan nilai yang diizinkan).
  • Filter ber-template menyisipkan nilai sebagai pernyataan logis, seperti yang dijelaskan di bagian Filter ber-template.

Dalam situasi saat Anda ingin menawarkan input yang lebih fleksibel kepada pengguna (seperti dengan berbagai jenis rentang tanggal atau penelusuran string), coba gunakan filter ber-template jika memungkinkan. Looker dapat menafsirkan input pengguna dan menulis SQL yang sesuai di balik layar. Dengan begitu, Anda tidak perlu memperhitungkan setiap kemungkinan jenis input pengguna.

Dalam situasi ketika pernyataan logis tidak dapat disisipkan, atau ketika Anda mengetahui serangkaian opsi terbatas yang mungkin dimasukkan pengguna, gunakan parameter Liquid.