Halaman ini mengacu pada parameter
sqlyang merupakan bagian dari kolom.
sqljuga dapat digunakan sebagai bagian dari tabel turunan, seperti yang dijelaskan di halaman dokumentasi parametersql(untuk tabel turunan).
Penggunaan
view: view_name {
dimension: field_name {
sql: ${revenue_in_dollars} - ${inventory_item.cost_in_dollars} ;;
}
}
|
Hierarki
sql |
Jenis Kolom yang Mungkin
Dimensi, Grup Dimensi, Filter, Ukuran
Menerima
Ekspresi SQL
Aturan Khusus
Ekspresi SQL yang bervariasi sesuai dengan type kolom (seperti yang dijelaskan secara mendetail di halaman dokumentasi ini)
|
Definisi
Parameter sql mengambil beberapa jenis ekspresi SQL yang akan menentukan dimensi, ukuran, atau filter. Ekspresi yang perlu Anda tulis bervariasi berdasarkan jenis kolom yang Anda buat. Detail selengkapnya tentang jenis dimensi dan filter dapat ditemukan di halaman dokumentasi Jenis dimensi, filter, dan parameter, sedangkan detail selengkapnya tentang jenis ukuran dapat ditemukan di halaman dokumentasi Jenis ukuran. Lihat juga halaman dokumentasi Menggabungkan SQL dan merujuk ke objek LookML.
sql untuk Dimensi
Blok sql untuk dimensi umumnya dapat mengambil SQL valid yang akan dimasukkan ke satu kolom dalam pernyataan SELECT. Pernyataan ini umumnya mengandalkan operator penggantian Looker, yang memiliki beberapa bentuk:
${TABLE}.column_namemereferensikan kolom dalam tabel yang terhubung ke tampilan yang sedang Anda kerjakan.${dimension_name}mereferensikan dimensi dalam tampilan yang sedang Anda kerjakan.${view_name.dimension_name}merujuk dimensi dari tampilan lain.${view_name.SQL_TABLE_NAME}mereferensikan tampilan lain atau tabel turunan. (Perhatikan bahwaSQL_TABLE_NAMEdalam referensi ini adalah string literal; Anda tidak perlu menggantinya dengan apa pun.)
Jika sql tidak ditentukan, Looker mengasumsikan bahwa ada kolom dalam tabel pokok dengan nama yang sama dengan kolom. Misalnya, memilih kolom bernama city tanpa parameter sql sama dengan menentukan sql: ${TABLE}.city.
Parameter
sqldari dimensi tidak boleh menyertakan agregasi apa pun. Artinya, kolom ini tidak boleh berisi agregasi SQL atau referensi ke ukuran LookML. Jika Anda ingin membuat kolom dengansqlyang menyertakan agregasi SQL atau yang mereferensikan ukuran LookML, gunakan parametersqldalam ukuran, bukan dalam dimensi.
Dimensi yang sangat sederhana yang mengambil nilai langsung dari kolom bernama revenue dapat terlihat seperti:
dimension: revenue_in_cents {
sql: ${TABLE}.revenue ;;
type: number
}
Dimensi yang mengandalkan dimensi lain dalam tampilan yang sama dapat terlihat seperti ini:
dimension: revenue_in_dollars {
sql: ${revenue_in_cents} / 100 ;;
type: number
}
Dimensi yang mengandalkan dimensi lain dalam tampilan yang berbeda dapat terlihat seperti ini:
dimension: profit_in_dollars {
sql: ${revenue_in_dollars} - ${inventory_item.cost_in_dollars} ;;
type: number
}
Dimensi yang mengandalkan dimensi lain dalam tabel turunan dapat terlihat seperti ini:
dimension: average_margin {
sql: (SELECT avg(${gross_margin} FROM ${order_facts.SQL_TABLE_NAME})) ;;
type: number
}
Pengguna SQL yang lebih mahir dapat melakukan penghitungan yang relatif canggih, termasuk sub-kueri yang berkorelasi (catatan: tidak semua dialek database mendukung sub-kueri yang berkorelasi):
dimension: user_order_sequence_number {
type: number
sql:
(
SELECT COUNT(*)
FROM orders AS o
WHERE o.id <= ${TABLE}.id
AND o.user_id = ${TABLE}.user_id
) ;;
}
Untuk mengetahui detail selengkapnya, lihat dokumentasi untuk jenis dimensi tertentu.
sql untuk Grup Dimensi
Parameter sql untuk dimension_group mengambil ekspresi SQL valid yang berisi data dalam format stempel waktu, tanggal dan waktu, tanggal, epoch, atau yyyymmdd.
sql untuk Ukuran
Blok sql untuk ukuran biasanya menggunakan salah satu dari dua bentuk:
- SQL yang akan menjalankan fungsi agregat (seperti
COUNT,SUM,AVG), sekali lagi menggunakan operator penggantian Looker seperti yang dijelaskan di bagian SQL untuk Dimensi - Nilai berdasarkan beberapa ukuran lainnya
Misalnya, untuk menghitung total pendapatan dalam dolar, kita dapat menggunakan:
measure: total_revenue_in_dollars {
sql: ${revenue_in_dollars} ;;
type: sum
}
Untuk menghitung total keuntungan, kita dapat menggunakan:
measure: total_revenue_in_dollars {
sql: ${total_revenue_in_dollars} - ${inventory_item.total_cost_in_dollars} ;;
type: number
}
Untuk mengetahui detail selengkapnya, lihat dokumentasi untuk jenis pengukuran tertentu.
Untuk jenis pengukuran count, Anda dapat menghilangkan parameter sql.
Untuk jenis ukuran lainnya, jika sql tidak ditentukan, Looker mengasumsikan bahwa ada kolom dalam tabel pokok dengan nama yang sama dengan kolom. Karena ukuran harus memiliki nama yang menunjukkan bahwa ukuran tersebut adalah gabungan dari serangkaian nilai pokok, dalam praktiknya Anda harus selalu menyertakan parameter sql.
Tantangan matematika SQL
Ada dua masalah umum yang muncul saat pembagian dalam parameter sql.
Pertama, jika Anda menggunakan pembagian dalam penghitungan, Anda harus melindungi dari kemungkinan pembagian dengan nol, yang akan menyebabkan error SQL. Untuk melakukannya, gunakan fungsi SQL NULLIF. Misalnya, contoh ini berarti "jika penyebutnya nol, perlakukan seperti NULL":
measure: active_users_percent {
sql: ${active_users} / NULLIF(${users}, 0) ;;
type: number
}
Masalah lainnya adalah cara SQL menangani matematika bilangan bulat. Jika Anda membagi 5 dengan 2, sebagian besar orang akan mengharapkan hasilnya adalah 2,5. Namun, banyak dialek SQL akan menampilkan hasil hanya sebagai 2, karena saat membagi dua bilangan bulat, hasilnya juga berupa bilangan bulat. Untuk mengatasi hal ini, Anda dapat mengalikan pembilang dengan bilangan desimal untuk memaksa SQL menampilkan hasil desimal. Contoh:
measure: active_users_percent {
sql: 100.00 * ${active_users} / NULLIF(${users}, 0) ;;
type: number
}
Variabel Liquid dengan sql
Anda juga dapat menggunakan variabel Liquid dengan parameter sql. Variabel Liquid memungkinkan Anda mengakses data seperti nilai dalam kolom, data tentang kolom, dan filter yang diterapkan ke kolom.
Misalnya, dimensi ini menyamarkan sandi pelanggan sesuai dengan atribut pengguna Looker:
dimension: customer_password {
sql:
{% if _user_attributes['pw_access'] == 'yes' %}
${password}
{% else %}
"Password Hidden"
{% endif %} ;;
}