Ini adalah topik tingkat lanjut yang mengasumsikan bahwa pembaca memiliki pengetahuan yang kuat tentang LookML.
Ringkasan
Seiring dengan bertambahnya ukuran dan kompleksitas model LookML Anda, akan semakin berguna untuk menggunakan kembali LookML Anda di beberapa tempat. Parameter extends
memungkinkan Anda menggunakan kembali kode, yang membantu Anda melakukan hal berikut:
- Tulis kode DRY (jangan ulangi sendiri), sehingga Anda dapat menentukan berbagai hal hanya di satu tempat, membuat kode lebih konsisten dan lebih cepat diedit
- Mengelola berbagai kumpulan kolom untuk pengguna yang berbeda
- Bagikan pola desain di berbagai bagian proyek Anda
- Menggunakan kembali kumpulan gabungan, dimensi, atau ukuran di seluruh proyek
Untuk memperluas objek LookML, buat objek LookML baru, lalu tambahkan parameter extends
untuk menunjukkan bahwa objek baru tersebut merupakan ekstensi dari objek yang sudah ada. Ini berarti project Anda akan memiliki dua versi objek LookML. Jika terjadi konflik, objek yang diperluas akan diprioritaskan dan menggantikan setelan objek yang diperpanjang. Lihat bagian Detail penerapan untuk extends
nanti di halaman ini untuk mengetahui detailnya.
Lihat penyempurnaan LookML: Memperluas tampilan atau Explore untuk skenario ketika Anda ingin memiliki beberapa versi tampilan atau Explore. Namun, jika tujuan Anda hanyalah memodifikasi tampilan atau Explore tanpa mengedit file LookML yang memuatnya, sebaiknya Anda menggunakan penyempurnaan. Anda juga dapat menggunakan parameter
extends
di dalam penajaman. Lihat halaman dokumentasi penajaman LookML untuk informasi selengkapnya dan kasus penggunaan.
Anda dapat memperluas tampilan, dasbor Jelajah, dan LookML:
Model tidak dapat diperluas, dan Anda tidak dapat menyertakan file model dalam file model lain. Sebagai gantinya, jika ingin menggunakan kembali atau memperluas Jelajah tersebut ke berbagai model, Anda dapat membuat file Jelajah terpisah, lalu menyertakan file Jelajah tersebut dalam file model.
Lihat contoh berikut tentang memperluas Explore dan memperluas dasbor LookML.
Memperluas Jelajah
Berikut adalah contoh cara memperluas Jelajah:
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. Segala sesuatu yang ada di Pelanggan, seperti gabungannya, akan disertakan dalam Transaksi. Apa pun yang ada di Transaksi akan tetap ada di Transaksi.
Namun, perhatikan jika terjadi konflik: Explore Pelanggan menyatakan bahwa setelan persist_for
harus berdurasi 12 jam, tetapi Explore Transaksi menyatakan bahwa setelan tersebut seharusnya 5 menit. Untuk Eksplorasi Transaksi, setelan persist_for: "5 minutes"
akan digunakan, karena menimpa setelan dari Jelajah yang diperluas.
Memperluas dasbor LookML
Untuk memperluas dasbor LookML, baik dasbor yang diperluas maupun yang diperluas 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 yang tidak dapat ditemukan oleh dasbor dasar (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 Tambahan akan menyertakan ubin yang ditentukan dalam file faa.dashboard.lookml
. Selain itu, dasbor FAA Tambahan akan memiliki ubin 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 petak dasbor. Jika Anda menggunakan metode ini, pastikan posisi kartu tidak tumpang-tindih. Pada contoh di atas, keduanya berada di baris atas dasbor, yang ditunjukkan dengan row: 0
:
File: faa.dashboard.lookml
row: 0
col: 0
width: 8
height: 6
Namun, kartu baru yang kami tambahkan di dasbor Tambahan FAA ada 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 adalah hal yang mudah terlewatkan, karena elemen-elemen ini ada di file dasbor yang berbeda. Jadi, jika Anda menambahkan ubin ke dasbor yang diperluas, pastikan untuk memeriksa konflik posisi antara ubin di dasbor yang diperluas dan ubin di dasbor yang diperluas.
Mewajibkan perpanjangan
Anda dapat menggunakan parameter extension: required
untuk menandai objek LookML sebagai memerlukan ekstensi, yang berarti bahwa objek tersebut tidak dapat digunakan sendiri. Objek dengan extension: required
tidak terlihat oleh pengguna itu sendiri; objek ini dimaksudkan hanya untuk bertindak sebagai titik awal untuk diperpanjang oleh objek LookML lainnya. Parameter extension
didukung untuk Jelajah, tampilan, dan dasbor LookML.
explore
dengan extension: required
tidak dapat digunakan sebagai explore_source
untuk pengujian data. Validator LookML akan menghasilkan error yang menyatakan bahwa explore_source
tidak dapat ditemukan.
Menggunakan metadata untuk melihat ekstensi suatu objek
Anda dapat mengklik parameter explore
atau view
di Looker IDE 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 penerapan untuk extends
Berikut adalah langkah-langkah yang diambil Looker saat memperluas objek LookML:
- Salin objek yang diperluas: Looker membuat salinan dasbor LookML untuk tampilan, Explore, atau LookML yang sedang diperluas. Salinan baru ini adalah objeking yang diperluas.
- Gabungkan LookML dari kedua salinan: Looker menggabungkan LookML objeked ke dalam objeking yang diperluas.
- Mengatasi konflik antara salinan: Untuk sebagian besar, jika elemen LookML ditentukan di objeked dan objek inglongs, versi dalam objek yang diperluas akan digunakan. Namun, dalam kasus lain, ekstensi akan menggabungkan parameter value, bukan mengganti nilai. Lihat bagian Menggabungkan parameter di halaman ini untuk informasinya.
- Menerapkan 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 dasbor tampilan, Jelajah, atau LookML lainnya.
Bagian berikut menunjukkan detail langkah-langkah ini, yang memperluas tampilan sebagai contoh. Berikut adalah LookML untuk tampilan dasar kita, tampilan User:
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 akan dibuat sebelum penggabungan. Fakta bahwa salinan dibuat tidak terlalu penting untuk diketahui di sini; penting untuk mengetahui fakta bahwa tampilan user
asli tidak berubah dan dapat digunakan seperti biasa.
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 setiap LookML yang ditulis secara eksplisit akan digabungkan, tetapi nilai LookML default yang belum Anda tulis tidak akan digabungkan. Artinya, sebenarnya hanya teks LookML yang disatukan, tanpa makna dari teks tersebut.
Langkah 3: Selesaikan konflik
Langkah ketiga adalah menyelesaikan konflik di antara tampilan yang digabungkan.
Umumnya, jika elemen LookML ditentukan dalam objek extendeded dan objeking, versi dalam objek yang diperluas akan digunakan. Namun, dalam kasus lain, ekstensi akan menggabungkan parameter value, bukan mengganti nilai. Lihat bagian Menggabungkan parameter di halaman ini untuk informasinya.
Dalam kasus contoh user_with_age_extensions
, tidak ada parameter yang bersifat aditif, dan tidak ada opsi daftar atau kata kunci sql
khusus yang ditentukan, sehingga nilai parameter dalam tampilan yang diperluas akan menggantikan nilai parameter dalam tampilan yang diperluas:
- Nama tampilan yang diperluas (
user_with_age_extensions
) akan menggantikan nama tampilan yangdiperluas (user
). - Nilaiing yang diperluas untuk
suggestions: no
akan menggantikan nilai yangdiperluassuggestions: yes
. - Tampilaning yang diperluas memiliki dimensi yang disebut
age
, yang tidak ada dalam tampilan yangdiperluas (tidak ada konflik). - Tampilan yangdiperluas memiliki dimensi yang disebut
name
, yang tidak ada dalam tampilanyang diperluas (tidak ada konflik). - Nilai
type: string
dimensistatus
dalam tampilan perluasan menggantikan nilaitype: number
dalam tampilan yang diperluas. - Dimensi
status
memiliki parametersql
yang tidak ada di tampilan yang diperluas (tanpa konflik).
Fakta bahwa nilai LookML default belum dipertimbangkan adalah penting, karena Anda tidak ingin membuat kesalahan dengan berpikir bahwa konflik antara nilai default sedang diselesaikan. Sebenarnya, tabel pivot 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 Explore, kita menambahkan parameter
view_name
danview_label
.
Dalam contoh khusus ini, kita belum menambahkan sql_table_name
ke tampilan Pengguna, yang akan menyebabkan beberapa masalah di langkah berikutnya.
Langkah 4: Tafsirkan LookML seperti biasa
Pada langkah terakhir, LookML yang dihasilkan ditafsirkan seperti biasa, termasuk semua nilai default. Dalam contoh khusus ini, tampilan LookML 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 menyertakan parameter sql_table_name
. Akibatnya, Looker akan mengasumsikan bahwa nilai sql_table_name
sama dengan nama tampilan.
Masalahnya, mungkin tidak ada tabel di database kita yang bernama user_with_age_extensions
. Inilah sebabnya kita perlu menambahkan parameter sql_table_name
ke tampilan apa pun yang akan diperluas. Menambahkan view_name
dan view_label
ke Jelajah yang akan diperluas akan menghindari masalah serupa.
Menggabungkan ekstensi
Ada beberapa cara untuk memanfaatkan objek LookML dengan expand:
- Sebuah objek dapat memperluas beberapa objek lain.
- Objek yang memanjang dapat diperpanjang sendiri.
- Extend dapat digunakan dalam penyempurnaan (lihat halaman dokumentasi penajaman LookML untuk 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 Eksplorasi secara bersamaan. Contoh:
explore: orders {
extends: [user_info, marketing_info]
}
# Also works for dashboards and views
Proses ekstensi bekerja 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 akan diberikan ke item yang tercantum terakhir. Jadi, dalam contoh di atas, jika terjadi konflik antara user_info
dan marketing_info
, Jelajah marketing_info
akan menang.
Membuat rantai beberapa perluasan
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 implementasi, dengan satu aturan tambahan tentang penyelesaian konflik. Jika terjadi konflik, prioritas diberikan ke item terakhir dalam rantai perluasan. Dalam contoh ini:
orders
akan lebih diprioritaskan daripadauser_info
danmarketing_info
.user_info
akan memiliki prioritas yang lebih tinggi daripadamarketing_info
.
Menggabungkan parameter
Umumnya, jika elemen LookML ditentukan dalam objek extendeded dan objeking, versi dalam objek yang diperluas akan digunakan. Hal ini berlaku dalam contoh penerapan di halaman ini.
Namun, dalam kasus berikut, ekstensi akan combine nilai parameter, bukan mengganti nilai:
- Untuk parameter aditif
- Dengan kata kunci daftar
EXTENDED*
- Dengan kata kunci
${EXTENDED}
untuk parametersql
Beberapa parameter bersifat aditif
Dalam banyak kasus, jika objek yang diperluas berisi parameter yang sama dengan objek yang diperluas, nilai objek yang diperluas akan menggantikan nilai parameter objek yang diperluas. Namun, ekstensi dapat bersifat aditif untuk beberapa parameter, yang berarti nilai dari objek yang diperluas akan digunakan bersamaan dengan nilai dari objek yang diperluas.
Parameter berikut adalah aditif:
Untuk dimensi dan ukuran:
Untuk parameter:
Untuk tabel turunan:
Untuk tampilan:
Untuk Jelajah:
Pada 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"
}
}
}
Dan 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 aditif, sehingga dimensi name
akan menampilkan kedua link.
Opsi tambahan dengan daftar
Saat bekerja dengan daftar, Anda dapat memilih untuk menggabungkannya, daripada menetapkan daftar objek yang diperluas sebagai pemenangnya. Pertimbangkan ekstensi sederhana ini dengan daftar bentrok 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, sehingga membuat animals
berisi [dog, cat]
. Namun, dengan menggunakan set EXTENDED*
khusus, Anda dapat menggabungkan daftar tersebut:
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
Biasanya, jika terjadi konflik selama perpanjangan, objek yang diperluas akan menang. Misalnya, lihat 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 adanya 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 combine definisi tersebut jika menginginkannya. 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. Bukannya yang menang, definisi product_short_descriptions
akan mengambil definisi dari products
dan menyisipkannya di tempat ${EXTENDED}
digunakan. Definisi yang dihasilkan untuk description
dalam kasus 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 lokal project Anda. Lihat halaman dokumentasi Melokalkan model LookML untuk informasi selengkapnya.