Error: Kolom tidak diketahui atau tidak dapat diakses

Saat Anda mengerjakan file LookML dan puas dengan pembaruan yang Anda lakukan, langkah berikutnya untuk men-deploy perubahan LookML adalah menjalankan Validator LookML untuk melakukan validasi model penuh.

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 dalam tampilan users. Error ini menunjukkan bahwa users.lifetime_orders tidak dapat mengakses kolom user_order_facts.lifetime_orders yang direferensikannya.

Pohon debug

Gunakan pohon keputusan berikut untuk memecahkan masalah Liquid umum:

Bagian berikut menjelaskan skenario dalam hierarki secara lebih mendetail.

Mengapa error ini terjadi?

Ada beberapa alasan error ini dapat terjadi:

  1. Kolom yang Anda rujuk tidak ada.
  2. Kolom yang Anda referensikan adalah seluruh grup dimensi — misalnya, grup dimensi direferensikan tanpa timeframe yang ditambahkan.
  3. Kolom tidak dapat diakses oleh beberapa Eksplorasi karena tidak ada gabungan.

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.

Kolom ini mereferensikan seluruh grup dimensi

Grup dimensi merepresentasikan grup dimensi. Grup dimensi type: time merepresentasikan grup dimensi jangka waktu yang ditentukan dalam parameter timeframe. Saat mereferensikan grup dimensi di LookML, Anda harus menambahkan dimensi yang sesuai — timeframe, dalam hal ini — 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.

Gabungan tidak ada

Berikut adalah definisi LookML untuk users.lifetime_orders:

  dimension: lifetime_orders {
    type: number
    sql: ${user_order_facts.lifetime_orders};;
  }
Perhatikan penggunaan operator substitusi ${} untuk mereferensikan kolom LookML user_order_facts.lifetime_orders.

Dimensi lifetime_orders dalam 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 Eksplorasi tanpa user_order_facts yang juga digabungkan.

Untuk melihat Eksplorasi mana yang menyebabkan masalah, Anda dapat meluaskan kemunculan yang ditandai dalam pesan error:

Pesan error yang diperluas menampilkan tampilan, baris kode tampilan, dan Eksplorasi dari dua penyebab: users:79 (ecommerce:order_items) dan users:79 (ecommerce:orders).

Kemunculan ini menunjukkan bahwa Eksplorasi order_items dan orders dalam model ecommerce menyebabkan error. Eksplorasi 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 menggabungkan tampilan user_order_facts; oleh karena itu, kedua Eksplorasi tidak 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 Eksplorasi, 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 dalam Eksplorasi yang juga menggabungkan 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 kueri users.lifetime_orders tidak akan memicu error.

Bagaimana cara memperbaiki error saat disebabkan oleh gabungan yang tidak ada?

Jika error disebabkan oleh gabungan yang tidak ada, Anda dapat memperbaiki error ini dengan beberapa cara:

  1. Gabungkan tampilan yang tidak ada dalam semua kasus. Untuk contoh yang digunakan di seluruh halaman ini, pastikan tampilan user_order_facts digabungkan di mana pun tampilan users digabungkan dalam Jelajah.
  2. Kecualikan kolom yang menyebabkan error dari Eksplorasi jika Anda tidak ingin menggabungkan tampilan yang tidak ada.

Bergabung dengan tampilan yang tidak ada

Pada contoh sebelumnya, error dapat diselesaikan dengan menggabungkan user_order_facts ke semua Eksplorasi tempat users juga digabungkan. Tindakan ini akan memastikan bahwa Eksplorasi dapat mengakses user_order_facts.lifetime_orders saat users.lifetime_orders digunakan dalam kueri.

Anda dapat menggunakan panel metadata di IDE untuk melihat semua Eksplorasi 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 kembali validator LookML, error ini tidak akan muncul.

Mengecualikan kolom yang menyebabkan error dari Eksplorasi

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 Eksplorasi orders, tetapi Anda ingin pengguna mengakses kolom dari tampilan users tanpa error. Anda dapat melakukannya dengan mengecualikan kolom yang menyebabkan error — users.lifetime_orders — dari Eksplorasi orders, menggunakan parameter fields.

Parameter fields untuk Eksplorasi memungkinkan Anda menyertakan atau mengecualikan kolom tertentu dari Eksplorasi. Dalam hal ini, Anda dapat mengecualikan kolom users.lifetime_orders dari Eksplorasi orders seperti ini:

  explore: orders {
    fields: [-users.lifetime_orders] # exclude users.lifetime_orders
    join: users {
      relationship: many_to_one
      sql_on: ${orders.user_id} = ${users.id}
    }
  }