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
danendcondition
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 namaparameter
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.