Ini adalah topik lanjutan yang mengasumsikan bahwa pembaca memiliki pengetahuan yang kuat tentang LookML.
Ringkasan
Seiring bertambahnya ukuran dan kompleksitas model LookML, penggunaan kembali LookML di beberapa tempat akan semakin berguna. Parameter extends
memungkinkan Anda menggunakan kembali kode, yang membantu Anda melakukan hal berikut:
- Tulis kode DRY (don't repeat yourself), sehingga Anda dapat menentukan berbagai hal di satu tempat, sehingga kode Anda lebih konsisten dan lebih cepat diedit
- Mengelola kumpulan kolom yang berbeda untuk pengguna yang berbeda
- Membagikan pola desain di berbagai bagian project
- Menggunakan kembali kumpulan join, dimensi, atau ukuran di seluruh project
Untuk memperluas objek LookML, Anda membuat objek LookML baru, lalu menambahkan parameter extends
untuk menunjukkan bahwa objek baru tersebut adalah ekstensi dari objek yang ada. Artinya, project Anda akan memiliki dua versi objek LookML. Jika ada konflik, objek yang diperluas akan diprioritaskan dan mengganti setelan objek yang diperluas. Lihat bagian Detail penerapan untuk extends
di halaman ini untuk mengetahui detailnya.
Lihat peningkatan LookML: Memperluas tampilan atau Jelajah sangat ideal untuk skenario saat Anda ingin memiliki beberapa versi tampilan atau Jelajah. Namun, jika tujuan Anda hanya untuk mengubah tampilan atau Jelajah tanpa mengedit file LookML yang berisinya, sebaiknya gunakan penyempurnaan. Anda juga dapat menggunakan parameter
extends
di dalam perincian. Lihat halaman dokumentasi Peningkatan LookML untuk mengetahui informasi selengkapnya dan kasus penggunaan.
Anda dapat memperluas tampilan, Jelajahi, dan dasbor LookML:
Model tidak dapat diperluas, dan Anda tidak dapat menyertakan file model dalam file model lain. Sebagai gantinya, jika ingin menggunakan kembali atau memperluas Jelajahi di seluruh model, Anda dapat membuat file Jelajahi terpisah, lalu menyertakan file Jelajahi tersebut dalam file model.
Lihat contoh berikut tentang memperluas Jelajahi dan memperluas dasbor LookML.
Memperluas Eksplorasi
Berikut adalah contoh perluasan Jelajahi:
explore: customer {
persist_for: "12 hours"
}
explore: transaction {
extends: [customer]
persist_for: "5 minutes"
}
Dalam contoh ini, kita memiliki Jelajah yang disebut Pelanggan, dan kita membuat Jelajah kedua yang disebut Transaksi yang memperluasnya. Semua yang ada di Pelanggan, seperti join-nya, akan disertakan dalam Transaksi. Semua yang ada di Transaksi akan tetap berada di Transaksi.
Namun, perhatikan bahwa ada konflik: Jelajah Pelanggan menyatakan bahwa setelan persist_for
harus 12 jam, tetapi Jelajah Transaksi menyatakan bahwa setelan tersebut harus 5 menit. Untuk Jelajahi Transaksi, setelan persist_for: "5 minutes"
akan digunakan, karena setelan ini menimpa setelan dari Jelajahi yang diperluas.
Memperluas dasbor LookML
Untuk memperluas dasbor LookML, dasbor yang diperluas dan yang memperluas harus disertakan dalam file model. Jika dasbor yang menggunakan parameter extends
disertakan dalam file model tanpa dasbor dasar yang diperluas, Anda akan mendapatkan error validasi LookML bahwa dasbor dasar tidak dapat ditemukan (di antara error lainnya).
Berikut adalah contoh file dasbor:
File: faa.dashboard.lookml
- dashboard: faa
title: FAA Dashboard
layout: newspaper
elements:
- title: Aircraft Location
name: Aircraft Location
model: e_faa
explore: aircraft
type: looker_map
fields:
- aircraft.zip
- aircraft.count
sorts:
- aircraft.count desc
limit: 500
query_timezone: America/Los_Angeles
series_types: {}
row: 0
col: 0
width: 8
height: 6
Kita dapat membuat file dasbor LookML baru dan memperluas dasbor FAA dengan menambahkan kartu baru:
File: faa_additional.dashboard.lookml
- dashboard: faa_additional
title: FAA Additional
extends: faa
elements:
- title: Elevation Count
name: Elevation Count
model: e_faa
explore: airports
type: looker_scatter
fields:
- airports.elevation
- airports.count
sorts:
- airports.count desc
limit: 500
query_timezone: America/Los_Angeles
row: 0
col: 8
width: 8
height: 6
Karena memperluas dasbor FAA, dasbor FAA Additional akan menyertakan kartu apa pun yang ditentukan dalam file faa.dashboard.lookml
. Selain itu, dasbor FAA Additional akan memiliki kartu yang ditentukan dalam file faa_additional.dashboard.lookml
-nya sendiri.
Cara termudah untuk membuat dasbor LookML adalah dengan mendapatkan LookML dari dasbor yang ditentukan pengguna. Anda juga dapat menggunakan teknik ini untuk mendapatkan LookML untuk setiap kartu dasbor. Jika Anda menggunakan metode ini, pastikan posisi kartu tidak tumpang-tindih. Dalam contoh faa.dashboard.lookml
dan faa_additional.dashboard.lookml
, kartu berada di baris atas dasbor, yang ditunjukkan oleh row: 0
:
File: faa.dashboard.lookml
row: 0
col: 0
width: 8
height: 6
Namun, kartu baru yang kita tambahkan di dasbor FAA Additional berada di col: 8
sehingga ditampilkan di samping kartu dari dasbor yang diperluas:
File: faa_additional.dashboard.lookml
row: 0
col: 8
width: 8
height: 6
Hal ini mudah terlewatkan karena elemen ini berada di file dasbor yang berbeda. Jadi, jika Anda menambahkan kartu ke dasbor yang diperluas, pastikan untuk memeriksa konflik posisi antara kartu di dasbor yang diperluas dan kartu di dasbor yang diperluas.
Memerlukan ekstensi
Anda dapat menggunakan parameter extension: required
untuk menandai objek LookML sebagai memerlukan ekstensi, yang berarti objek tersebut tidak dapat digunakan sendiri. Objek dengan extension: required
tidak terlihat oleh pengguna secara mandiri; objek ini hanya dimaksudkan untuk bertindak sebagai titik awal yang akan diperluas oleh objek LookML lain. Parameter extension
didukung untuk Jelajah, tampilan, dan dasbor LookML.
explore
dengan extension: required
tidak dapat digunakan sebagai explore_source
untuk pengujian data. LookML Validator akan menampilkan error yang menyatakan bahwa explore_source
tidak dapat ditemukan.
Menggunakan metadata untuk melihat ekstensi objek
Anda dapat mengklik parameter explore
atau view
di IDE Looker dan menggunakan panel metadata untuk melihat ekstensi pada objek, atau untuk melihat objek yang diperluas. Lihat halaman dokumentasi Metadata untuk objek LookML untuk mengetahui informasinya.
Detail implementasi untuk extends
Berikut adalah langkah-langkah yang dilakukan Looker saat memperluas objek LookML:
- Menyalin objek yang sedang diperluas: Looker membuat salinan LookML untuk dasbor tampilan, Jelajah, atau LookML yang sedang diperluas. Salinan baru ini adalah objek yang diperluas.
- Gabungkan LookML dari dua salinan: Looker menggabungkan LookML dari objek yang diperluas ke dalam objek yang diperluas.
- Menyelesaikan konflik antara salinan: Sebagian besar, jika elemen LookML ditentukan dalam objek yang diperluas dan objek yang memperluas, versi dalam objek yang diperluas akan digunakan. Namun, dalam kasus lain, ekstensi akan menggabungkan nilai parameter, bukan mengganti nilai. Lihat bagian Menggabungkan parameter di halaman ini untuk mengetahui informasinya.
- Terapkan LookML: Setelah semua konflik diselesaikan, Looker akan menafsirkan LookML yang dihasilkan menggunakan logika standar. Dengan kata lain, Looker akan menggunakan semua default dan asumsi standar seperti pada dasbor tampilan, Jelajahi, atau LookML lainnya.
Bagian berikut menunjukkan detail langkah-langkah ini, dengan memperluas tampilan sebagai contoh. Berikut adalah LookML untuk tampilan dasar kita, tampilan Pengguna:
view: user {
suggestions: yes
dimension: name {
sql: ${TABLE}.name ;;
}
dimension: status {
sql: ${TABLE}.status ;;
type: number
}
}
Berikut adalah LookML untuk tampilan Pengguna dengan Ekstensi Usia, yang memperluas tampilan Pengguna:
include: "/views/user.view"
view: user_with_age_extensions {
extends: [user]
suggestions: no
dimension: age {
type: number
sql: ${TABLE}.age ;;
}
dimension: status {
type: string
}
}
Langkah 1: Salin LookML
Dalam hal ini, tampilan user
diperluas ke tampilan user_with_age_extensions
. Karena user
adalah tampilan yang diperluas, salinannya dibuat sebelum penggabungan. Fakta bahwa salinan dibuat tidak terlalu penting untuk diketahui di sini; fakta bahwa tampilan user
asli tidak diubah dan dapat digunakan seperti biasa adalah hal yang penting untuk diketahui.
Langkah 2: Gabungkan salinan
Langkah berikutnya adalah menggabungkan semua LookML dari tampilan yang diperluas (user
) ke dalam tampilan yang diperluas (user_with_age_extensions
). Penting untuk memahami sifat penggabungan ini, yang merupakan penggabungan objek LookML. Dalam praktiknya, ini berarti bahwa LookML apa pun yang ditulis secara eksplisit akan digabungkan, tetapi nilai LookML default yang belum Anda tulis tidak akan digabungkan. Dalam arti tertentu, ini hanyalah teks LookML yang digabungkan, dan tidak ada makna dari teks tersebut.
Langkah 3: Selesaikan konflik
Langkah ketiga adalah menyelesaikan konflik apa pun antara tampilan yang digabungkan.
Pada umumnya, jika elemen LookML ditentukan dalam objek yang diperluas dan objek yang memperluas, versi dalam objek yang memperluas akan digunakan. Namun, dalam kasus lain, ekstensi akan menggabungkan nilai parameter, bukan mengganti nilai. Lihat bagian Menggabungkan parameter di halaman ini untuk mengetahui informasinya.
Dalam kasus contoh user_with_age_extensions
, tidak ada parameter yang aditif, dan tidak ada opsi daftar atau kata kunci sql
khusus yang ditentukan, sehingga nilai parameter dalam tampilan yang diperluas akan mengganti nilai parameter dalam tampilan yang diperluas:
- Nama tampilan yang diperluas (
user_with_age_extensions
) akan menggantikan nama tampilan yang diperluas (user
). - Nilai perluasan untuk
suggestions: no
akan menggantikan nilai perluasansuggestions: yes
. - Tampilan yang diperluas memiliki dimensi yang disebut
age
, yang tidak ada dalam tampilan yang diperluas (tidak ada konflik). - Tampilan yang diperluas memiliki dimensi yang disebut
name
, yang tidak ada dalam tampilan yang diperluas (tidak ada konflik). - Nilai
type: string
dimensistatus
dalam tampilan yang diperluas akan menggantikan nilaitype: number
dalam tampilan yang diperluas. - Dimensi
status
memiliki parametersql
, yang tidak ada dalam tampilan ekstensi (tidak ada konflik).
Fakta bahwa nilai LookML default belum dipertimbangkan adalah hal yang penting, karena Anda tidak ingin membuat kesalahan dengan berpikir bahwa konflik antara nilai default akan terselesaikan. Sebenarnya, elemen tersebut hanya diabaikan pada langkah ini. Itulah sebabnya kita perlu menambahkan parameter tambahan secara eksplisit saat memperluas objek:
- Saat memperluas tampilan, kita menambahkan parameter
sql_table_name
daninclude
. - Saat memperluas Jelajah, kita menambahkan parameter
view_name
danview_label
.
Dalam contoh khusus ini, kita tidak menambahkan sql_table_name
ke tampilan Pengguna, yang akan menyebabkan beberapa masalah pada langkah berikutnya.
Langkah 4: Menafsirkan LookML seperti biasa
Pada langkah terakhir, LookML yang dihasilkan akan ditafsirkan seperti biasa, termasuk semua nilai default. Dalam contoh khusus ini, LookML tampilan yang dihasilkan akan ditafsirkan sebagai berikut:
include: "/views/user.view"
view: user_with_age_extensions {
suggestions: no
dimension: age {
type: number
sql: ${TABLE}.age ;;
}
dimension: name {
sql: ${TABLE}.name ;;
}
dimension: status {
sql: ${TABLE}.status ;;
type: string
}
}
Perhatikan bahwa LookML yang dihasilkan menyertakan view: user_with_age_extensions
, tetapi tidak ada parameter sql_table_name
. Akibatnya, Looker akan mengasumsikan bahwa nilai sql_table_name
sama dengan nama tampilan.
Masalahnya adalah mungkin tidak ada tabel di database kita yang bernama user_with_age_extensions
. Itulah sebabnya kita perlu menambahkan parameter sql_table_name
ke tampilan yang akan diperluas. Menambahkan view_name
dan view_label
ke Jelajah yang akan diperpanjang akan menghindari masalah serupa.
Menggabungkan ekstensi
Ada beberapa cara untuk memanfaatkan objek LookML dengan ekstensi:
- Objek dapat memperluas beberapa objek lainnya.
- Objek yang diperluas dapat diperluas.
- Perluasan dapat digunakan dalam penyempurnaan (lihat halaman dokumentasi Penyempurnaan LookML untuk mengetahui informasi selengkapnya).
Untuk melihat contoh kasus penggunaan lanjutan dan membaca tips pemecahan masalah, lihat halaman Praktik Terbaik Memecahkan masalah contoh kasus penggunaan
extends
lanjutan.
Memperluas lebih dari satu objek secara bersamaan
Anda dapat memperluas lebih dari satu dasbor, tampilan, atau Jelajahi secara bersamaan. Contoh:
explore: orders {
extends: [user_info, marketing_info]
}
# Also works for dashboards and views
Proses ekstensi berfungsi persis seperti yang dijelaskan dalam contoh penerapan, tetapi ada satu aturan tambahan tentang cara menyelesaikan konflik. Jika ada konflik antara beberapa item yang tercantum dalam parameter extends
, prioritas diberikan ke item yang tercantum terakhir. Jadi, dalam contoh sebelumnya, jika ada konflik antara user_info
dan marketing_info
, Jelajah marketing_info
akan menang.
Menautkan beberapa ekstensi
Anda juga dapat merangkai ekstensi sebanyak yang Anda inginkan. Contoh:
explore: orders {
extends: [user_info]
...
}
explore: user_info {
extends: [marketing_info]
...
}
Sekali lagi, proses ekstensi berfungsi persis seperti yang dijelaskan dalam contoh penerapan, dengan satu aturan tambahan tentang resolusi konflik. Jika ada konflik, prioritas diberikan ke item terakhir dalam rantai ekstensi. Dalam contoh ini:
orders
akan memiliki prioritas lebih tinggi daripadauser_info
danmarketing_info
.user_info
akan memiliki prioritas lebih tinggi daripadamarketing_info
.
Menggabungkan parameter
Pada umumnya, jika elemen LookML ditentukan dalam objek yang diperluas dan objek yang memperluas, versi dalam objek yang memperluas akan digunakan. Hal ini terjadi dalam contoh implementasi di halaman ini.
Namun, dalam kasus berikut, ekstensi akan menggabungkan nilai parameter, bukan mengganti nilai:
- Untuk parameter additive
- Dengan kata kunci daftar
EXTENDED*
- Dengan kata kunci
${EXTENDED}
untuk parametersql
Beberapa parameter bersifat aditive
Dalam banyak kasus, jika objek yang diperluas berisi parameter yang sama dengan objek yang diperluas, nilai objek yang diperluas akan mengganti nilai parameter objek yang diperluas. Namun, ekstensi dapat bersifat aditif untuk beberapa parameter, yang berarti bahwa nilai dari objek yang diperluas digunakan bersama dengan nilai dari objek yang diperluas.
Parameter berikut bersifat aditif:
Untuk dimensi dan ukuran:
Untuk parameter:
Untuk tabel turunan:
Untuk penayangan:
Untuk Jelajahi:
Dalam contoh berikut, tampilan carriers
memiliki dimensi name
dengan parameter link
:
view: carriers {
sql_table_name: flightstats.carriers ;;
dimension: name {
sql: ${TABLE}.name ;;
type: string
link: {
label: "Google {{ value }}"
url: "http://www.google.com/search?q={{ value }}"
icon_url: "http://google.com/favicon.ico"
}
}
}
Berikut adalah tampilan carriers_extended
, yang memperluas tampilan carriers
. Tampilan carriers_extended
juga memiliki dimensi name
dengan setelan yang berbeda di parameter link
:
include: "/views/carriers.view.lkml"
view: carriers_extended {
extends: [carriers]
dimension: name {
sql: ${TABLE}.name ;;
type: string
link: {
label: "Dashboard for {{ value }}"
url: "https://docsexamples.dev.looker.com/dashboards/307?Carrier={{ value }}"
icon_url: "https://www.looker.com/favicon.ico"
}
}
}
Dalam tampilan carriers_extended
, kedua parameter link
bersifat aditive, sehingga dimensi name
akan menampilkan kedua link.
Opsi tambahan dengan daftar
Saat menggunakan daftar, Anda dapat memilih untuk menggabungkannya, bukan membuat daftar objek yang diperluas menjadi pemenang. Pertimbangkan ekstensi sederhana ini dengan daftar yang bertentangan yang disebut animals
:
view: pets {
extends: fish
set: animals {
fields: [dog, cat]
}
}
view: fish {
set: animals {
fields: [goldfish, guppy]
}
}
Dalam hal ini, tampilan pets
melakukan perluasan, sehingga akan menang, membuat animals
berisi [dog, cat]
. Namun, dengan menggunakan kumpulan EXTENDED*
khusus, Anda dapat menggabungkan daftar:
view: pets {
extends: fish
set: animals {
fields: [dog, cat, EXTENDED*]
}
}
view: fish {
set: animals {
fields: [goldfish, guppy]
}
}
Sekarang daftar animals
akan berisi [dog, cat, goldfish, guppy]
.
Menggabungkan, bukan mengganti, selama resolusi konflik
Pada umumnya, jika ada konflik selama ekstensi, objek yang diperluas akan menang. Misalnya, perhatikan ekstensi sederhana ini:
view: product_short_descriptions {
extends: products
dimension: description {
sql: ${TABLE}.short_description ;;
}
}
view: products {
dimension: description {
sql: ${TABLE}.full_description ;;
}
}
Anda dapat melihat ada konflik parameter sql
dalam dimensi description
. Biasanya, definisi dari product_short_descriptions
hanya akan menimpa definisi dari products
karena melakukan perluasan.
Namun, Anda juga dapat memilih untuk menggabungkan definisi jika mau. Untuk melakukannya, Anda akan menggunakan kata kunci ${EXTENDED}
seperti ini:
view: product_short_descriptions {
extends: products
dimension: description {
sql: LEFT(${EXTENDED}, 50) ;;
}
}
view: products {
dimension: description {
sql: ${TABLE}.full_description ;;
}
}
Sekarang, konflik parameter sql
akan ditangani secara berbeda. Sebagai ganti definisi product_short_descriptions
yang menang, definisi akan diambil dari products
dan disisipkan di tempat ${EXTENDED}
digunakan. Definisi yang dihasilkan untuk description
dalam hal ini adalah: LEFT(${TABLE}.full_description, 50)
.
Hal-hal yang perlu dipertimbangkan
Project dengan pelokalan
Saat memperluas objek, perhatikan bahwa aturan pelokalan juga berlaku untuk ekstensi Anda. Jika Anda memperluas objek, lalu menentukan label atau deskripsi baru, Anda harus memberikan definisi pelokalan dalam file string lokalitas project. Lihat halaman dokumentasi Menlokalkan model LookML untuk mengetahui informasi selengkapnya.