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 memenuhi banyak kasus penggunaan, metode ini tidak dapat memenuhi setiap kebutuhan analisis. Filter template dan parameter Liquid sangat 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 lain dari SQL. Menyesuaikan bagian dari tabel turunan, menyesuaikan tabel database yang akan dikueri, atau membuat dimensi dan filter multiguna hanyalah beberapa fitur yang dapat Anda aktifkan dengan filter 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 berinteraksi dengan pengguna. Selanjutnya, Anda menggunakan variabel Liquid untuk memasukkan 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 template

Pertimbangkan tabel turunan yang menghitung pembelanjaan sepanjang waktu 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, Anda ingin pengguna dapat menentukan region, bukan melakukan hard code ke "northeast". region tidak dapat ditampilkan sebagai dimensi, sehingga pengguna tidak dapat memfilternya seperti biasa.

Salah satu opsi adalah menggunakan filter dengan 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 pengukuran dinamis dengan parameter Liquid

Pertimbangkan ukuran yang difilter yang menambahkan jumlah celana yang terjual:

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

Hal ini mudah, tetapi jika ada puluhan kategori, akan merepotkan untuk membuat ukuran untuk setiap kategori. Selain itu, hal ini dapat mengacaukan pengalaman Jelajah 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 dengan template, tambahkan filter.
  • Untuk parameter Liquid, tambahkan parameter.

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

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

Pertama, kolom parameter dapat memiliki jenis khusus yang disebut tanpa tanda kutip:

parameter: table_name {
  type: unquoted
}

Jenis ini memungkinkan nilai disisipkan ke dalam SQL tanpa diapit tanda kutip, 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 disisipkan. 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 template atau parameter Liquid sesuai keinginan.

Filter template

Sintaksis untuk filter dengan 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 khusus filter.
  • Ganti sql_or_lookml_reference dengan SQL atau LookML yang harus ditetapkan "sama" dengan input pengguna (ini dijelaskan secara lebih mendetail nanti di bagian ini). Jika menggunakan LookML, gunakan sintaksis LookML ${view_name.field_name}.

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 dengan template ini selalu diubah menjadi ekspresi logis. Misalnya, jika pengguna memasukkan "Northeast" ke filter order_region, Looker akan mengubah tag ini menjadi:

order.region = 'Northeast'

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

Karena filter dengan template menampilkan ekspresi logika, Anda dapat menggunakannya dengan operator logika dan ekspresi logika lainnya yang valid dalam pernyataan WHERE SQL. Dengan menggunakan contoh sebelumnya, jika 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. Setiap filter 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 satu, 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 likuid menyisipkan input pengguna secara langsung (atau menggunakan nilai yang Anda tentukan dengan nilai yang diizinkan).
  • Filter dengan template menyisipkan nilai sebagai pernyataan logis, seperti yang dijelaskan di bagian Filter dengan template.

Jika Anda ingin menawarkan input yang lebih fleksibel kepada pengguna (seperti dengan berbagai jenis rentang tanggal atau penelusuran string), coba gunakan filter template jika memungkinkan. Looker dapat menafsirkan input pengguna dan menulis SQL yang sesuai di balik layar. Hal ini mencegah Anda harus memperhitungkan setiap kemungkinan jenis input pengguna.

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