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