Filter template dan parameter Liquid

Ini adalah topik tingkat lanjut yang mengasumsikan Anda telah 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 sederhana ini memenuhi banyak kasus penggunaan, metode ini tidak dapat mengaktifkan 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 membiarkan pengguna memanipulasi bagian lain dari SQL. Menyesuaikan bagian dari tabel turunan, menyesuaikan tabel database mana yang akan dikueri, atau membuat dimensi dan filter serbaguna hanyalah beberapa fitur yang dapat Anda aktifkan dengan filter template dan parameter Liquid.

Filter template dan parameter Liquid memanfaatkan bahasa template Liquid untuk memasukkan input pengguna ke dalam kueri SQL. Pertama, Anda menggunakan parameter LookML untuk membuat kolom yang akan digunakan pengguna untuk berinteraksi. 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, di 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, anggaplah Anda ingin pengguna dapat menentukan region, bukan melakukan hard-coding ke "northeast". region tidak dapat ditampilkan sebagai dimensi, sehingga pengguna tidak dapat memfilternya seperti biasa.

Salah satu opsinya adalah menggunakan filter 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 bawah untuk mendapatkan petunjuk langkah demi langkah.

Jika tabel turunan menggunakan filter template, Anda tidak dapat membuat tabel tetap.

Membuat ukuran dinamis dengan parameter Liquid

Pertimbangkan ukuran celana yang difilter yang menjumlahkan jumlah celana yang terjual:

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

Cara ini mudah, tetapi jika ada lusinan kategori, akan membosankan untuk membuat pengukuran untuk masing-masing kategori tersebut. Selain itu, hal ini dapat mengganggu pengalaman pengguna Eksplorasi.

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 bawah untuk mendapatkan petunjuk langkah demi langkah.

Penggunaan dasar

Langkah pertama: Buat sesuatu untuk berinteraksi dengan pengguna

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

Dalam kedua kasus tersebut, kolom ini akan muncul kepada pengguna di bagian Kolom Hanya Filter di 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 perlu disebutkan secara khusus untuk kolom parameter.

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

parameter: table_name {
  type: unquoted
}

Tipe ini memungkinkan nilai yang dimasukkan ke dalam SQL tanpa dikurung dalam tanda kutip, seperti {i>string<i}. Ini berguna ketika Anda perlu memasukkan nilai-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 template diuraikan seperti ini:

{% condition filter_name %} sql_or_lookml_reference {% endcondition %}
  • Kata-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" ke input pengguna (baca detail selengkapnya di bawah). Jika menggunakan LookML, gunakan sintaksis LookML ${view_name.field_name}.

Dalam contoh di atas, kita menggunakan:

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

Penting untuk memahami interaksi antara tag Liquid dan SQL yang Anda tulis di antaranya. Tag filter dengan template selalu diubah menjadi ekspresi logis. Misalnya, jika pengguna memasukkan "Timur Laut" ke filter order_region, Looker akan mengubah tag ini menjadi: order.region = 'Northeast'. Dengan kata lain, Looker memahami input pengguna dan menghasilkan ekspresi logika yang sesuai.

Hal ini sering menjadi hal yang membingungkan di antara developer Looker. Filter template selalu menghasilkan sejenis ekspresi logika, bukan nilai individual yang dimasukkan oleh pengguna.

Karena filter template menampilkan ekspresi logika, Anda dapat menggunakannya dengan operator logika lainnya dan ekspresi logika yang valid dalam pernyataan WHERE SQL. Dengan menggunakan contoh di atas, jika ingin menampilkan semua nilai kecuali wilayah yang dipilih pengguna, Anda dapat menggunakan hal berikut dalam pernyataan WHERE:

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

Anda juga valid untuk menggunakan kolom LookML sebagai kondisi filter. Semua 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 terurai 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 pada langkah pertama, di atas, 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 cair menyisipkan input pengguna secara langsung (atau menggunakan nilai yang Anda tentukan dengan nilai yang diizinkan).
  • Filter template menyisipkan nilai sebagai pernyataan logis, seperti yang dijelaskan di atas.

Dalam situasi saat 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. Dengan demikian, Anda tidak perlu mempertimbangkan setiap kemungkinan jenis input pengguna.

Jika pernyataan logis tidak dapat disisipkan, atau jika Anda mengetahui sekumpulan opsi terbatas yang mungkin dimasukkan pengguna, gunakan parameter Liquid.