Membuat tabel turunan native

Tabel turunan adalah kueri yang hasilnya digunakan seolah-olah merupakan tabel fisik dalam database. Tabel turunan native didasarkan pada kueri yang Anda tentukan menggunakan istilah LookML. Hal ini berbeda dengan tabel turunan berbasis SQL, yang didasarkan pada kueri yang Anda tentukan dengan istilah SQL. Dibandingkan dengan tabel turunan berbasis SQL, tabel turunan native jauh lebih mudah dibaca dan dipahami saat Anda membuat model data. Lihat bagian Tabel turunan native dan tabel turunan berbasis SQL di halaman dokumentasi Tabel turunan di Looker untuk mengetahui informasi selengkapnya.

Tabel turunan berbasis native dan SQL ditentukan dalam LookML menggunakan parameter derived_table pada tingkat tampilan. Namun, dengan tabel turunan native, Anda tidak perlu membuat kueri SQL. Sebagai gantinya, Anda menggunakan parameter explore_source untuk menentukan Jelajah yang menjadi dasar tabel turunan, kolom yang diinginkan, dan karakteristik lain yang diinginkan.

Anda juga dapat meminta Looker membuat tabel turunan LookML dari kueri SQL Runner, seperti yang dijelaskan di halaman dokumentasi Menggunakan SQL Runner untuk membuat tabel turunan.

Menggunakan Jelajah untuk mulai menentukan tabel turunan native

Dimulai dengan Jelajah, Looker dapat membuat LookML untuk semua atau sebagian besar tabel turunan Anda. Cukup buat Explore dan pilih semua kolom yang ingin Anda sertakan dalam tabel turunan. Kemudian, untuk menghasilkan tabel turunan native LookML:

  1. Pilih menu roda gigi Explore Actions dan pilih Get LookML.

  2. Klik tab Derived Table untuk melihat LookML guna membuat tabel turunan native untuk Jelajah.

  3. Menyalin LookML.

Sekarang setelah Anda menyalin LookML yang dihasilkan, tempel ke file view:

  1. Di Mode Pengembangan, buka file project Anda.

  2. Klik + di bagian atas daftar file project di Looker IDE, lalu pilih Create View. Atau, Anda dapat mengklik menu folder dan memilih Create View dari menu untuk membuat file di dalam folder.

  3. Tetapkan nama tampilan ke sesuatu yang bermakna.

  4. Jika perlu, ubah nama kolom, tentukan kolom turunan, dan tambahkan filter.

Saat Anda menggunakan ukuran type: count di Eksplorasi, visualisasi akan melabeli nilai yang dihasilkan dengan nama tampilan, bukan kata Count. Untuk menghindari kebingungan, sebaiknya gunakan format jamak dari nama tampilan Anda, lalu pilih Tampilkan Nama Kolom Lengkap di bagian Rangkaian dalam setelan visualisasi, atau gunakan view_label dengan versi jamak dari nama tampilan Anda.

Menentukan tabel turunan native di LookML

Baik Anda menggunakan tabel turunan yang dideklarasikan dalam SQL atau LookML native, output kueri derived_table adalah tabel dengan sekumpulan kolom. Ketika tabel turunan dinyatakan dalam SQL, nama kolom {i>output<i} dinyatakan oleh kueri SQL. Misalnya, kueri SQL di bawah ini akan memiliki kolom output user_id, lifetime_number_of_orders, dan lifetime_customer_value:

SELECT
  user_id
  , COUNT(DISTINCT order_id) as lifetime_number_of_orders
  , SUM(sale_price) as lifetime_customer_value
FROM order_items
GROUP BY 1

Di Looker, kueri didasarkan pada Jelajah, termasuk kolom ukuran dan dimensi, menambahkan filter yang berlaku, dan juga dapat menentukan tata urutan. Tabel turunan native berisi semua elemen tersebut serta nama output untuk kolom.

Contoh sederhana di bawah ini menghasilkan tabel turunan dengan tiga kolom: user_id, lifetime_customer_value, dan lifetime_number_of_orders. Anda tidak perlu menulis kueri secara manual di SQL — sebagai gantinya, Looker akan membuat kueri untuk Anda menggunakan order_items Jelajah yang ditentukan dan beberapa kolom Jelajah tersebut (order_items.user_id, order_items.total_revenue, dan order_items.order_count).

view: user_order_facts {
  derived_table: {
    explore_source: order_items {
      column: user_id {
        field: order_items.user_id
      }
      column: lifetime_number_of_orders {
        field: order_items.order_count
      }
      column: lifetime_customer_value {
        field: order_items.total_revenue
      }
    }
  }
  # Define the view's fields as desired
  dimension: user_id {
    hidden: yes
  }
  dimension: lifetime_number_of_orders {
    type: number
  }
  dimension: lifetime_customer_value {
    type: number
  }
}

Menggunakan pernyataan include untuk mengaktifkan kolom referensi

Dalam file tampilan tabel turunan native, Anda menggunakan parameter explore_source untuk mengarah ke Jelajah dan menentukan kolom yang diinginkan serta karakteristik lain yang diinginkan untuk tabel turunan native. Karena Anda mengarahkan Jelajah dari dalam file tampilan tabel turunan native, Anda juga harus menyertakan file yang berisi definisi Jelajah tersebut. Jelajah biasanya ditentukan dalam file model, tetapi untuk tabel turunan native, akan lebih mudah untuk membuat file terpisah untuk Jelajah menggunakan ekstensi file .explore.lkml, seperti yang dijelaskan dalam dokumentasi untuk Membuat File Jelajah. Dengan begitu, dalam file tampilan tabel turunan native, Anda dapat menyertakan satu file Jelajah dan bukan seluruh file model. Dalam hal ini:

  • File tampilan tabel turunan native harus menyertakan file Jelajah. Contoh:
    • include: "/explores/order_items.explore.lkml"
  • File Jelajah harus menyertakan file tampilan yang diperlukan. Contoh:
    • include: "/views/order_items.view.lkml"
    • include: "/views/users.view.lkml"
  • Model harus menyertakan file Explore. Contoh:
    • include: "/explores/order_items.explore.lkml"

File Jelajah akan memproses koneksi model tempat file tersebut disertakan. Pertimbangkan fakta ini saat Anda menyertakan file Explore dalam model yang dikonfigurasi dengan koneksi yang berbeda dari model induk file Jelajah. Error kueri dapat terjadi jika skema untuk koneksi model yang disertakan berbeda dengan skema untuk koneksi model induk.

Menentukan kolom tabel turunan native

Seperti ditunjukkan dalam contoh di atas, Anda menggunakan column untuk menentukan kolom output dari tabel turunan.

Menentukan nama kolom

Untuk kolom user_id, nama kolom cocok dengan nama kolom yang ditentukan di Jelajah asli.

Sering kali, Anda menginginkan nama kolom yang berbeda dalam tabel output daripada nama kolom di Explore asli. Pada contoh di atas, kita menghasilkan penghitungan nilai umur oleh pengguna menggunakan Jelajah order_items. Di tabel output, total_revenue benar-benar lifetime_customer_value pelanggan.

Deklarasi column mendukung deklarasi nama output yang berbeda dengan kolom input. Misalnya, kode di bawah ini mengatakan, "buat kolom output bernama lifetime_value dari kolom order_items.total_revenue":

column: lifetime_value {
  field: order_items.total_revenue
}

Nama kolom tersirat

Jika parameter field tidak disertakan dalam deklarasi kolom, parameter tersebut diasumsikan sebagai <explore_name>.<field_name>. Misalnya, jika Anda telah menentukan explore_source: order_items, maka

column: user_id {
  field: order_items.user_id
}

setara dengan

column: user_id {}

Membuat kolom turunan untuk nilai yang dihitung

Anda dapat menambahkan parameter derived_column untuk menentukan kolom yang tidak ada di Eksplorasi parameter explore_source. Setiap parameter derived_column memiliki parameter sql yang menentukan cara membuat nilai.

Penghitungan sql Anda dapat menggunakan kolom apa pun yang telah Anda tentukan menggunakan parameter column. Kolom turunan tidak dapat menyertakan fungsi agregat, tetapi dapat menyertakan kalkulasi yang dapat dilakukan pada satu baris tabel.

Contoh di bawah menghasilkan tabel turunan yang sama dengan contoh sebelumnya, kecuali bahwa contoh tersebut menambahkan kolom average_customer_order yang dihitung, yang dihitung dari kolom lifetime_customer_value dan lifetime_number_of_orders dalam tabel turunan native.

view: user_order_facts {
  derived_table: {
    explore_source: order_items {
      column: user_id {
        field: order_items.user_id
      }
      column: lifetime_number_of_orders {
        field: order_items.order_count
      }
      column: lifetime_customer_value {
        field: order_items.total_revenue
      }
      derived_column: average_customer_order {
        sql:  lifetime_customer_value / lifetime_number_of_orders ;;
      }
    }
  }
  # Define the view's fields as desired
  dimension: user_id {
    hidden: yes
  }
  dimension: lifetime_number_of_orders {
    type: number
  }
  dimension: lifetime_customer_value {
    type: number
  }
  dimension: average_customer_order {
    type: number
  }
}

Menggunakan fungsi jendela SQL

Beberapa dialek database mendukung fungsi jendela, terutama untuk membuat nomor urut, {i>primary key<i}, total berjalan dan kumulatif, serta penghitungan multi-baris yang berguna lainnya. Setelah kueri utama dieksekusi, semua deklarasi derived_column dieksekusi dalam penerusan terpisah.

Jika dialek database Anda mendukung fungsi jendela, maka Anda dapat menggunakannya dalam tabel turunan native. Buat parameter derived_column dengan parameter sql yang berisi fungsi jendela yang diinginkan. Saat merujuk ke nilai, Anda harus menggunakan nama kolom seperti yang didefinisikan dalam tabel turunan bawaan.

Contoh di bawah membuat tabel turunan native yang menyertakan kolom user_id, order_id, dan created_time. Kemudian, menggunakan kolom turunan dengan fungsi jendela SQL ROW_NUMBER(), kolom yang berisi nomor urut pesanan pelanggan dihitung.

view: user_order_sequences {
  derived_table: {
    explore_source: order_items {
      column: user_id {
        field: order_items.user_id
      }
      column: order_id {
        field: order_items.order_id
      }
      column: created_time {
        field: order_items.created_time
      }
      derived_column: user_sequence {
        sql: ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY created_time) ;;
      }
    }
  }
  dimension: order_id {
    hidden: yes
  }
  dimension: user_sequence {
    type: number
  }
}

Menambahkan filter ke tabel turunan native

Misalkan kita ingin membuat tabel turunan yang berisi nilai pelanggan selama 90 hari terakhir. Kita ingin penghitungan yang sama seperti yang dilakukan di atas, tetapi kita hanya ingin menyertakan pembelian dari 90 hari terakhir.

Kita hanya menambahkan filter ke derived_table yang memfilter transaksi dalam 90 hari terakhir. Parameter filters untuk tabel turunan menggunakan sintaksis yang sama dengan yang Anda gunakan untuk membuat ukuran yang difilter.

view: user_90_day_facts {
  derived_table: {
    explore_source: order_items {
      column: user_id {
        field: order_items.user_id
      }
      column: number_of_orders_90_day {
        field: order_items.order_count
      }
      column: customer_value_90_day {
        field: order_items.total_revenue
      }
      filters: [order_items.created_date: "90 days"]
    }
  }
  # Add define view's fields as desired
  dimension: user_id {
    hidden: yes
  }
  dimension: number_of_orders_90_day {
    type: number
  }
  dimension: customer_value_90_day {
    type: number
  }
}

Filter akan ditambahkan ke klausa WHERE saat Looker menulis SQL untuk tabel turunan.

Selain itu, Anda dapat menggunakan subparameter dev_filters dari explore_source dengan tabel turunan native. Parameter dev_filters memungkinkan Anda menentukan filter yang hanya diterapkan Looker pada versi pengembangan tabel turunan, yang berarti Anda dapat membuat versi tabel yang lebih kecil dan difilter untuk melakukan iterasi dan pengujian tanpa menunggu tabel lengkap dibuat setelah setiap perubahan.

Parameter dev_filters berfungsi bersama dengan parameter filters sehingga semua filter diterapkan ke versi pengembangan tabel. Jika dev_filters dan filters menentukan filter untuk kolom yang sama, dev_filters lebih diprioritaskan untuk versi pengembangan tabel.

Lihat Bekerja lebih cepat dalam Mode Pengembangan untuk mengetahui informasi selengkapnya.

Menggunakan filter template

Anda dapat menggunakan bind_filters untuk menyertakan filter dengan template:

bind_filters: {
  to_field: users.created_date
  from_field: filtered_lookml_dt.filter_date
}

Ini pada dasarnya sama dengan menggunakan kode berikut dalam blok sql:

{% condition filtered_lookml_dt.filter_date %} users.created_date {% endcondition %}

to_field adalah kolom tempat filter diterapkan. to_field harus berupa kolom dari explore_source yang mendasarinya.

from_field menentukan kolom tempat untuk mendapatkan filter, jika ada filter saat runtime.

Pada contoh bind_filters di atas, Looker akan mengambil filter yang diterapkan ke kolom filtered_lookml_dt.filter_date dan menerapkan filter tersebut ke kolom users.created_date.

Anda juga dapat menggunakan subparameter bind_all_filters dari explore_source untuk meneruskan semua filter runtime dari Jelajah ke subkueri tabel turunan native. Lihat halaman dokumentasi parameter explore_source untuk informasi selengkapnya.

Mengurutkan dan membatasi tabel turunan native

Anda juga dapat mengurutkan dan membatasi tabel turunan jika diinginkan:

sorts: [order_items.count: desc]
limit: 10

Ingat, Explore dapat menampilkan baris dalam urutan yang berbeda dari pengurutan yang mendasarinya.

Mengonversi tabel turunan native ke zona waktu yang berbeda

Anda dapat menentukan zona waktu untuk tabel turunan native menggunakan subparameter timezone:

timezone: "America/Los_Angeles"

Jika Anda menggunakan subparameter timezone, semua data berbasis waktu dalam tabel turunan native akan dikonversi ke zona waktu yang Anda tentukan. Lihat halaman dokumentasi nilai timezone untuk mengetahui daftar zona waktu yang didukung.

Jika Anda tidak menentukan zona waktu dalam definisi tabel turunan native, tabel turunan native tidak akan melakukan konversi zona waktu apa pun pada data berbasis waktu. Sebagai gantinya, data berbasis waktu akan ditetapkan secara default ke zona waktu database Anda.

Jika tabel turunan native tidak persisten, Anda dapat menyetel nilai zona waktu ke "query_timezone" untuk otomatis menggunakan zona waktu dari kueri yang sedang berjalan.