כשעובדים על קובצי LookML ומרוצים מהעדכונים, השלב הבא בפריסת השינויים ב-LookML הוא הפעלת כלי האימות של LookML כדי לבצע אימות מלא של המודל.
מדי פעם, יכול להיות שתופיע שגיאה כמו זו:
Unknown or inaccessible field "user_order_facts.lifetime_orders" referenced in "users.lifetime_orders". Check for typos and missing joins.
בדוגמה הזו, השגיאה מתייחסת לשדה lifetime_orders בתצוגה users. השגיאה מציינת של-users.lifetime_orders אין גישה לשדה user_order_facts.lifetime_orders שהוא מפנה אליו.
עץ ניפוי הבאגים
כדי לפתור בעיות נפוצות ב-Liquid, אפשר להיעזר בתרשים הבא של עץ החלטות:
בקטעים הבאים מפורטים התרחישים בעץ.
למה השגיאה הזו מתרחשת?
יש כמה סיבות להופעת השגיאה הזו:
- השדה שאליו מפנים לא קיים.
-
השדה שאליו מתבצעת ההפניה הוא קבוצת מאפיינים שלמה – לדוגמה, מתבצעת הפניה לקבוצת מאפיינים בלי להוסיף
timeframe. - השדה לא נגיש לחלק מה-Explores כי חסר איחוד (join).
השדה לא קיים
אם יש הפניה לשדה user_order_facts.lifetime_orders בשדות LookML אבל הוא לא קיים כשדה, תוצג השגיאה unknown or inaccessible field.
כדי לפתור את השגיאה, מוסיפים לתצוגה שמכילה את השדה הבעייתי את השדה שגורם לשגיאה – בדוגמה הזו, user_order_facts.lifetime_orders. במקרה כזה, אפשר לוודא שהשדה מוגדר בתצוגה user_order_facts. אם הוא לא מוגדר, אפשר להוסיף אותו.
השדה מפנה לקבוצת מאפיינים שלמה
קבוצות מאפיינים מייצגות קבוצה של מאפיינים. קבוצות המאפיינים type: time מייצגות קבוצה של מאפיינים של תקופות זמן שמוגדרים בפרמטר timeframe. כשמפנים לקבוצות של מאפיינים ב-LookML, חובה לצרף את המאפיין המתאים – timeframe במקרה הזה – לשם של קבוצת המאפיינים.
לדוגמה, קבוצת המאפיינים הבאה:
dimension_group: created {
type: time
timeframes: [date, week, month]
sql: ${TABLE}.created_at ;;
}
אם רוצים להפנות אל קבוצת המאפיינים created בשדה LookML אחר, צריך להפנות אל מאפיין מסגרת זמן ספציפי בתוך הקבוצה, כמו אחד מהמאפיינים הבאים:
-
date:${created_date} -
week:${created_week} -
month:${created_month}
אם תנסו להשתמש רק בשם של קבוצת המאפיינים – ${created} – מערכת Looker לא תדע לאיזה פרק זמן אתם מתכוונים ותציג את השגיאה.
חסר צירוף
ההגדרה של users.lifetime_orders ב-LookML היא:
dimension: lifetime_orders {
type: number
sql: ${user_order_facts.lifetime_orders};;
}
שימו לב לשימוש באופרטורים של החלפה${}כדי להפנות לשדה LookMLuser_order_facts.lifetime_orders.
המאפיין lifetime_orders בתצוגה users מפנה לשדה lifetime_orders בתצוגה user_order_facts. במקרה הזה, השגיאה מופעלת כי יש מקרים בקובץ המודל שבהם התצוגה users מצורפת ל-Explore בלי שגם user_order_facts צורף.
כדי לראות אילו ניתוחים ב-Explore גורמים לבעיה, אפשר להרחיב את המופעים שמודגשים בהודעת השגיאה:
המקרים האלה מראים שהשגיאה נגרמת בגלל ה-Explores order_items ו-orders במודל ecommerce. ל-Explores האלה יש הרבה joins והם מוגדרים כך בקובץ המודל:
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}
}
}
בשני הניתוחים האלה, התצוגה users מצורפת בלי לצרף גם את התצוגה user_order_facts. לכן, אף אחד מהניתוחים לא יכול לגשת לשדה user_order_facts.lifetime_orders. אם תנסו לשלוח שאילתה לשדה users.lifetime_orders – שמפנה לשדה user_order_facts.lifetime_orders – ב-Explore, תופיע השגיאה.
כלי התיקוף של LookML מזהיר אתכם שהמשתמשים יקבלו את השגיאה כשהם יריצו שאילתה על users_order_facts.lifetime_orders. השדה users.lifetime_orders לא יפעיל את השגיאה בניתוח ב-Explore שגם user_order_facts מצורף אליו.
לדוגמה, נניח שאתם רוצים להשתמש באפשרות users ניתוח:
explore: users {
join: user_order_facts {
sql_on: ${users.id} = ${user_order_facts.users_id}
}
}
כאן user_order_facts is מצטרף, ולכן שאילתה של users.lifetime_orders לא תפעיל שגיאה.
איך אפשר לתקן את השגיאה אם היא נגרמת בגלל צירוף חסר?
אם השגיאה נגרמת בגלל צירוף חסר, אפשר לתקן אותה בכמה דרכים:
-
הצטרפות לתצוגה החסרה בכל בקשות התמיכה. בדוגמה שמופיעה לאורך הדף הזה, חשוב לוודא שהתצוגה המפורטת
user_order_factsמצורפת בכל מקום שבו התצוגה המפורטתusersמצורפת בניתוח ב-Explore. - אם לא רוצים לצרף את התצוגה החסרה, אפשר להחריג את השדה שגורם לשגיאה מהפריטים בתפריט Explore (חקירות).
הצטרפות לתצוגה החסרה
בדוגמה הקודמת, אפשר לפתור את השגיאה על ידי צירוף user_order_facts לכל התצוגות המפורטות שבהן מצורף גם users. כך תוכלו לוודא שניתן לגשת ל-user_order_facts.lifetime_orders מניתוחים כשמשתמשים ב-users.lifetime_orders בשאילתה.
אפשר להשתמש בחלונית המטא-נתונים ב-IDE כדי לראות את כל הניתוחים באמצעות התצוגה users.
בדוגמה הבאה, הצטרפות לתצוגות החסרות:
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}
}
}
אם מריצים עכשיו שוב את מאמת LookML, השגיאה הזו לא אמורה להופיע.
החרגת השדה שגורם לשגיאה מניתוחים
יכול להיות שלא תרצו לצרף את התצוגה user_order_facts לכל הניתוחים שבהם מצורפת users. לדוגמה, יכול להיות שלא תרצו שהמשתמשים יוכלו לגשת לשדות מהתצוגה user_order_facts בorders ניתוח, אבל כן תרצו שהם יוכלו לגשת לשדות מהתצוגה users בלי שיוצג להם שגיאה. כדי לעשות את זה, צריך להחריג את השדה שגורם לשגיאה – users.lifetime_orders – מהדוח ב-Explore באמצעות הפרמטר fields.orders
הפרמטר fields של כלי הניתוחים מאפשר לכם לכלול או להחריג שדות ספציפיים מניתוח. במקרה כזה, אפשר להחריג את השדה users.lifetime_orders מהניתוח orders ב-Explore באופן הבא:
explore: orders {
fields: [-users.lifetime_orders] # exclude users.lifetime_orders
join: users {
relationship: many_to_one
sql_on: ${orders.user_id} = ${users.id}
}
}