sql (untuk kolom)

Halaman ini mengacu pada parameter sql yang merupakan bagian dari kolom.

sql juga dapat digunakan sebagai bagian dari tabel turunan, seperti yang dijelaskan di halaman dokumentasi parameter sql (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_name mereferensikan 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 bahwa SQL_TABLE_NAME dalam 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 sql dari 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 dengan sql yang menyertakan agregasi SQL atau yang mereferensikan ukuran LookML, gunakan parameter sql dalam 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 %} ;;
}