Saat Anda mengerjakan file LookML dan puas dengan pembaruan yang dilakukan, langkah berikutnya untuk men-deploy perubahan LookML adalah menjalankan LookML Validator untuk melakukan validasi model lengkap.
Terkadang, Anda mungkin melihat error seperti berikut:
Unknown or inaccessible field "user_order_facts.lifetime_orders" referenced in "users.lifetime_orders". Check for typos and missing joins.
Dalam contoh ini, error merujuk ke kolom lifetime_orders
di tampilan users
. Error ini menunjukkan bahwa users.lifetime_orders
tidak dapat mengakses kolom user_order_facts.lifetime_orders
yang dirujuknya.
Mengapa error ini terjadi?
Ada beberapa alasan terjadinya error ini:
- Kolom yang Anda rujuk tidak ada.
-
Kolom yang Anda referensikan adalah seluruh grup dimensi — misalnya, grup dimensi direferensikan tanpa
timeframe
yang ditambahkan. - Kolom tidak dapat diakses oleh beberapa Jelajah karena ada join yang tidak ada.
Opsi 1: Kolom tidak ada
Jika kolom user_order_facts.lifetime_orders
direferensikan di kolom LookML, tetapi tidak ada sebagai kolom itu sendiri, Anda akan menerima error unknown or inaccessible field
.
Anda dapat mengatasi error dengan menambahkan kolom yang memicu error — dalam contoh ini, user_order_facts.lifetime_orders
— ke tampilan yang berisi kolom yang dimaksud. Dalam hal ini, Anda dapat memastikan kolom ditentukan dalam tampilan user_order_facts
; jika tidak ada, Anda dapat menambahkannya.
Opsi 2: Kolom mereferensikan seluruh grup dimensi
Grup dimensi mewakili grup dimensi. Grup dimensi type: time
mewakili grup dimensi jangka waktu yang ditentukan dalam parameter timeframe
. Saat mereferensikan grup dimensi di LookML, Anda harus
menambahkan dimensi yang sesuai — dalam hal ini timeframe
— ke nama grup dimensi.
Misalnya, pertimbangkan grup dimensi berikut:
dimension_group: created { type: time timeframes: [date, week, month] sql: ${TABLE}.created_at ;; }
Jika ingin mereferensikan grup dimensi created
di kolom LookML lain, Anda harus mereferensikan dimensi jangka waktu tertentu dalam grup, seperti salah satu dari berikut ini:
-
date
:${created_date}
-
week
:${created_week}
-
month
:${created_month}
Jika Anda mencoba menggunakan hanya nama grup dimensi — ${created}
— Looker tidak akan mengetahui jangka waktu yang Anda maksud dan akan menghasilkan error.
Opsi 3: Ada join yang tidak ada
Berikut adalah definisi LookML untuk users.lifetime_orders
:
dimension: lifetime_orders { type: number sql: ${user_order_facts.lifetime_orders};; }
Perhatikan penggunaan operator penggantian${}
untuk mereferensikan kolom LookMLuser_order_facts.lifetime_orders
.
Dimensi lifetime_orders
di tampilan users
mereferensikan kolom lifetime_orders
dari tampilan user_order_facts
. Dalam hal ini, error dipicu karena ada instance dalam file model tempat tampilan users
digabungkan ke Jelajah tanpa user_order_facts
juga digabungkan.
Untuk melihat Jelajah mana yang menyebabkan masalah, Anda dapat meluaskan kemunculan yang ditandai dalam pesan error:
Kejadian ini menunjukkan bahwa Jelajah order_items
dan orders
dalam model ecommerce
menyebabkan error. Jelajah ini memiliki banyak gabungan dan ditentukan sebagai berikut dalam file model:
explore: orders { join: users { # users joined without user_order_facts relationship: many_to_one sql_on: ${orders.user_id} = ${users.id} } } explore: order_items { join: inventory_items { relationship: many_to_one sql_on: ${order_items.inventory_item_id} = ${inventory_items.id} } join: orders { relationship: many_to_one sql_on: ${order_items.order_id} = ${orders.id} } join: users { # users joined without user_order_facts relationship: many_to_one sql_on: ${orders.user_id} = ${users.id} } }
Di kedua Eksplorasi ini, tampilan users
digabungkan tanpa juga menggabungkan tampilan user_order_facts
; dengan demikian, tidak satu pun Eksplorasi yang dapat mengakses kolom user_order_facts.lifetime_orders
. Jika Anda mencoba membuat kueri kolom users.lifetime_orders
— yang mereferensikan user_order_facts.lifetime_orders
— di salah satu Jelajah, Anda akan memicu error.
Validator LookML memperingatkan Anda bahwa pengguna akan menerima error saat mereka membuat kueri users_order_facts.lifetime_orders
. Kolom users.lifetime_orders
tidak akan memicu error di Eksplorasi yang juga dihubungkan dengan user_order_facts
.
Misalnya, pertimbangkan users
Jelajahi:
explore: users { join: user_order_facts { sql_on: ${users.id} = ${user_order_facts.users_id} } }
Di sini, user_order_facts
digabungkan, sehingga mengkueri users.lifetime_orders
tidak akan memicu error.
Bagaimana cara memperbaiki error jika disebabkan oleh join yang tidak ada?
Jika error disebabkan oleh join yang tidak ada, Anda dapat memperbaiki error ini dengan beberapa cara:
-
Gabungkan tampilan yang tidak ada di semua kasus. Untuk contoh yang digunakan di seluruh halaman ini, pastikan tampilan
user_order_facts
digabungkan di mana pun tampilanusers
digabungkan dalam Jelajah. - Kecualikan kolom yang menyebabkan error dari Jelajah jika Anda tidak ingin menggabungkan tampilan yang tidak ada.
Bergabung dengan tampilan yang tidak ada
Pada contoh sebelumnya, error dapat diatasi dengan menggabungkan user_order_facts
ke semua Jelajah tempat users
juga digabungkan. Hal ini akan memastikan bahwa Jelajah dapat mengakses user_order_facts.lifetime_orders
saat users.lifetime_orders
digunakan dalam kueri.
Anda dapat menggunakan panel metadata di IDE untuk melihat semua Jelajah yang menggunakan tampilan users
.
Contoh berikut menggabungkan tampilan yang tidak ada:
explore: order_items { join: inventory_items { relationship: many_to_one sql_on: ${inventory_items.id} = ${order_items.inventory_item_id} } join: orders { relationship: many_to_one sql_on: ${order_items.order_id} = ${orders.id} } join: users { relationship: many_to_one sql_on: ${orders.user_id} = ${users.id} } join: user_order_facts { # join user_order_facts through users relationship: many_to_one sql_on: ${users.id} = ${user_order_facts.users_id} } }
Sekarang, jika Anda menjalankan ulang validator LookML, error ini seharusnya tidak muncul.
Mengecualikan kolom yang menyebabkan error dari Jelajah
Anda mungkin tidak ingin menggabungkan tampilan user_order_facts
ke semua Jelajah tempat users
digabungkan. Misalnya, Anda mungkin tidak ingin pengguna mengakses kolom dari tampilan user_order_facts
di orders
Jelajahi, tetapi Anda ingin pengguna mengakses kolom dari tampilan users
tanpa error. Anda dapat melakukannya dengan mengecualikan kolom yang menyebabkan error —
users.lifetime_orders
— dari orders
Jelajahi, menggunakan
parameter
fields
.
Parameter fields
untuk Jelajah memungkinkan Anda menyertakan atau mengecualikan kolom tertentu dari Jelajah. Dalam hal ini, Anda dapat mengecualikan users.lifetime_orders
dari Jelajahi orders
seperti ini:
explore: orders { fields: [ALL_FIELDS*, -users.lifetime_orders] # exclude users.lifetime_orders join: users { relationship: many_to_one sql_on: ${orders.user_id} = ${users.id} } }