Penggunaan
explore: explore_name {
conditionally_filter: {
filters: [field_name: "filter expression", field_name: "filter expression", ...]
unless: [field_name, field_name, ...]
}
}
|
Hierarki
conditionally_filter |
Nilai Default
Tidak ada
Menerima
Satu atau beberapa spesifikasi filter dari nama kolom dan ekspresi filter Looker, ditambah daftar satu atau beberapa nama kolom di bagian unless
|
Definisi
Parameter conditionally_filter memungkinkan Anda menentukan serangkaian filter default yang dapat diganti oleh pengguna jika mereka menerapkan setidaknya satu filter dari daftar kedua yang Anda tentukan.
Parameter ini biasanya digunakan untuk mencegah pengguna membuat kueri yang sangat besar secara tidak sengaja, yang mungkin terlalu mahal untuk dijalankan di database Anda. Misalnya, Anda dapat memaksa pengguna untuk membatasi kueri mereka ke minggu sebelumnya, kecuali jika mereka secara eksplisit meminta rentang tanggal yang lebih besar.
Filter yang diterapkan di conditionally_filter akan muncul kepada pengguna setelah mereka menjalankan kueri. Meskipun pengguna dapat mengubah value default yang Anda tetapkan, mereka tidak dapat menghapus filter sepenuhnya kecuali jika mereka menerapkan setidaknya salah satu filter yang Anda tentukan dalam subparameter unless.
Nama kolom yang Anda gunakan dapat berupa nama dimension atau measure.
Untuk mereferensikan dimensi atau ukuran yang merupakan bagian dari tampilan gabungan, bukan bagian dari Eksplorasi ini, gunakan view_name.field_name.
Contoh
Perhatikan contoh berikut:
explore: order {
conditionally_filter: {
filters: [id: "123", customer.id: "678,789"]
unless: [date]
}
join: customer {
sql_on: ${order.customer_id} = ${customer.id} ;;
}
}
Dalam hal ini, filter id merujuk pada kolom id dari Eksplorasi yang disebut order. Filter customer.id mengacu pada kolom id dari tampilan yang disebut customer. Kedua filter akan diterapkan kecuali jika pengguna menetapkan tanggal pesanan di UI Jelajah. Contoh ini juga menunjukkan bahwa Anda dapat mewajibkan beberapa filter.
Nilai default yang Anda tentukan dapat menerima jenis ekspresi ini.
Anda juga dapat mewajibkan pengguna menggunakan filter ID Pesanan (dengan nilai default "123" yang dapat diubah) kecuali jika mereka menerapkan filter Tanggal Pesanan:
explore: order {
conditionally_filter: {
filters: [id: "123"]
unless: [date]
}
}
Atau, paksa pengguna untuk menggunakan filter ID Pesanan (dengan nilai default "123" atau "234" yang dapat mereka ubah) kecuali jika mereka menerapkan filter Tanggal Pesanan atau Waktu Pesanan:
explore: order {
conditionally_filter: {
filters: [id: "123,234"]
unless: [date, time]
}
}
Atau, paksa pengguna untuk menggunakan filter ID Pesanan (nilai default "123") dan filter Kota Pelanggan (dengan default "Chicago"), kecuali jika mereka menerapkan filter Tanggal Pesanan atau Tanggal Pelanggan:
explore: order {
conditionally_filter: {
filters: [id: "123", customer.city: "Chicago"]
unless: [date, customer.date]
}
join: customer {
sql_on: ${order.customer_id} = ${customer.id} ;;
}
}
Tantangan umum
Pengguna tidak dapat menghapus setiap filter saat conditionally_filter digunakan
Tidak ada cara untuk menjalankan kueri tanpa filter apa pun saat conditionally_filter digunakan. Pengguna harus menggunakan filter bersyarat yang Anda tentukan, atau filter mereka sendiri dari daftar unless.
conditionally_filter dengan dimensi type: time dalam grup menempatkan dimensi lain grup dalam subparameter unless
Jika field yang Anda tentukan dalam conditionally_filter adalah dimensi berbasis waktu yang merupakan bagian dari grup dimensi, Looker akan memperlakukan semua dimensi lain dalam grup tersebut seolah-olah tunduk pada subparameter unless untuk filter bersyarat tersebut — meskipun Anda tidak menyertakan subparameter unless.
Dua blok LookML berikut ditafsirkan secara identik. Di sini, conditionally_filter diterapkan ke dimensi berbasis waktu event_date yang merupakan bagian dari grup dimensi event. Tidak ada kondisi unless yang ditentukan, tetapi Looker akan memperlakukan dimensi lain dalam grup event seolah-olah telah ditentukan dengan subparameter unless.
Blok LookML 1:
explore: logs {
# Make sure there is always a filter on event_date, event_week, event_month or event_year
# Default to the last complete day of data
conditionally_filter: {
filters: [logs.event_date: "1 days ago for 1 day"]
}
view: logs {
# Combine the partition date filters and the time filters into a single field group.
dimension_group: event {
type: time
timeframes: [date,week,month,year]
sql: _PARTITIONTIME ;;
}
}
Blok LookML 2:
explore: logs {
# Make sure there is always a filter on event_date, event_week, event_month or event_year
# Default to the last complete day of data
conditionally_filter: {
filters: [logs.event_date: "1 days ago for 1 day"]
unless: [event_week, event_month, event_year]
}
view: logs {
# Combine the partition date filters and the time filters into a single field group.
dimension_group: event {
type: time
timeframes: [date,week,month,year]
sql: _PARTITIONTIME ;;
}
}
Looker menafsirkan kedua blok LookML dengan cara yang sama, meskipun hanya blok LookML kedua yang secara eksplisit menerapkan subparameter unless ke dimensi lain dalam grup event.
Yang perlu diketahui
Ada metode untuk menerapkan conditionally_filter ke subkumpulan pengguna
Untuk menerapkan filter bersyarat bagi beberapa pengguna, tetapi tidak bagi pengguna lainnya, Anda dapat menggunakan izin model. Anda perlu membuat dua model: satu yang menggunakan conditionally_filter, dan satu yang tidak. Kemudian, Anda dapat memberikan akses ke model yang tepat berdasarkan per pengguna.
Jika Anda ingin menggunakan conditionally_filter tanpa unless, cukup gunakan always_filter saja
Untuk mewajibkan pengguna menggunakan serangkaian filter tertentu, tetapi mengizinkan mereka mengubah nilai default, gunakan always_filter.
Jika Anda menginginkan filter yang tidak dapat diubah sama sekali, pertimbangkan sql_always_where
Jika Anda ingin Explore memiliki filter yang sama untuk semua orang, dan tidak mengizinkan pengguna mengubah nilai filter, gunakan sql_always_where.
Jika Anda menginginkan filter khusus pengguna yang tidak dapat diubah, pertimbangkan access_filter
Jika Anda ingin Explore memiliki filter yang khusus untuk setiap pengguna, tetapi tidak dapat dihapus atau diubah, gunakan access_filter.