תבניות נפוצות של LookML

תבניות עיצוב של LookML מאפשרות להתאים אישית את מודל הנתונים כדי להציג מדדים עסקיים ברורים ולהנחות את המשתמשים איך לשלוח שאילתות לגבי נתונים. אפשר להשתמש בטכניקות האלה כדי לשנות את התוויות של שדות בממשק המשתמש, לסנן ספירות לפי מאפיין, לחשב אחוזים, להגדיר קבוצות של נתונים לניתוח מעמיק ולהגביל את התוצאות ב-Explore.

שדות של תוויות (ושמות בממשק המשתמש)

Looker ממיר את שמות השדות של LookML למחרוזות שמוצגות בממשק המשתמש, על ידי שילוב של שם התצוגה בגופן רגיל עם השם המקוצר של השדה בגופן מודגש. לדוגמה, שדה בשם Amount בתצוגה Orders יופיע בממשק המשתמש בתור Orders Amount. בדף הזה, שמות שני השדות מודגשים ושם התצוגה כתוב באותיות רישיות (ORDERS Amount) כדי שהדיון יהיה ברור יותר.

אם רוצים ששם השדה יהיה שונה משם העמודה שלו בטבלה, משנים את שם השדה ומשתמשים בפרמטר sql כדי לקשר את השדה לעמודה המתאימה בטבלה. בדוגמה הבאה, לטבלה airports יש עמודה cntrl_twr. ‫Looker ייצור את ההצהרה הבאה:

view: airports {
  dimension: cntrl_twr {        # full name: airports.cntrl_twr
    type: yesno                 # default name: AIRPORT Cntrl Twr (Yes/No)
    sql: ${TABLE}.cntrl_twr ;;  # the sql expression for this field
  }
}

אפשר לשנות את השם של המאפיין cntrl_twr כדי שיהיה קריא לאנשים:

view: airports {
  dimension: has_control_tower {  # full name: airports.has_control_tower
    type: yesno                   # aliased name: AIRPORTS Has Control Tower (Yes/No)
    sql: ${TABLE}.cntrl_twr ;;    # the sql expression for this field
  }
}

סינון ספירות לפי מאפיין

אפשר לקבץ לפי מאפיין ולספור ישויות – קיבוץ לפי מדינה של משתמשים, ספירת הזמנות יראה לכם מאיזו מדינה מגיעות ההזמנות. עם זאת, לעיתים קרובות כדאי ליצור ספירה שמסוננת לפי ערך מאפיין מסוים. לדוגמה, אפשר ליצור מדד חדש ולקרוא לו ORDERS France Count:

view: users {
  dimension: country {}
}
view: orders {
  dimension: id {
    primary_key: yes
    sql: ${TABLE}.id ;;
  }
  measure: count {
    type: count
    drill_fields: [detail]
  }
  measure: france_count {
    type: count   # COUNT(CASE WHEN users.country = 'France' THEN 1 ELSE NULL END)
    filters: [users.country: "France"]
  }
}

אפשר להשתמש בכל ביטוי במסננים. אם רוצים שיהיה שדה שיספור משתמשים מהאיחוד האירופי, אפשר להשתמש במשהו כזה:

measure: eu_count {
  type: count   # COUNT(CASE WHEN users.countrycode IN 'UK','FR','ES' THEN 1 ELSE NULL END)
  drill_fields: [detail]
  filters: [users.countrycode: "UK,FR,ES"]
}

אם רוצים לסנן באמצעות ביטוי מתמטי, צריך להוסיף לו מירכאות כפולות:

measure: total_orders_above_100_dollars {
  type: sum   # SUM(CASE WHEN order.value > 100 THEN order.value ELSE NULL END)
  sql: ${order.value} ;;
  drill_fields: [detail]
  filters: [order.value: ">100"]
}

אחוזים

מדדי ביצועים מרכזיים רבים מבוטאים באחוזים, כמו "אחוז הפריטים שהוחזרו", "אחוז האימיילים שהובילו למכירה" או מקרים אחרים של "אחוז ה-X ש-Y". ב-LookML, תבנית העיצוב היא ליצור ספירות לשני התנאים וליצור שדה שלישי שמחשב את האחוז בין השניים.

dimension: returned {
  type: yesno
}
measure: count {   # total count of items
  type: count_distinct
  sql: ${TABLE}.id ;;
  drill_fields: [detail]
}
measure: returned_count {   # count of returned items
  type: count_distinct
  sql: ${TABLE}.id ;;
  drill_fields: [detail]
  filters: [returned: "Yes"]
}
measure: percent_returned {
  type: number
  sql: 100.0 * ${returned_count} / NULLIF(${count}, 0) ;;
  value_format: "0.00"
}

כדי לחשב אחוזים, צריך להשתמש בפורמט הבא. ב-Postgres, הספירות הן מספרים שלמים, וחלוקה בין מספרים שלמים מניבה מספרים שלמים. הכפלה ב-100.0 ממירה את הספירה הראשונה למספר נקודה צפה, וכך ממירה את שאר הביטוי למספר נקודה צפה. כדי להימנע משגיאות של חילוק באפס, הפונקציה NULLIF(value, 0) ממירה ערך אפס ל-null, וכך התוצאה היא null ולא מתקבלת שגיאה.

100.0 * ${returned_count} / NULLIF(${count}, 0)

שימוש בקבוצות כדי להציג פירוט של נתונים

אחת מהתכונות הכי שימושיות של Looker היא היכולת להציג פירוט של הנתונים כדי לראות את הישויות הבסיסיות שמרכיבות ספירה או מדד אחר.

כשלוחצים על מדד בממשק המשתמש, Looker יוצר שאילתה חדשה כדי לאתר את קבוצת הנתונים שמרכיבה את המדד. כל ערך של כל מאפיין בשורה בטבלה מתווסף

כדי להציג את הפירוט, צריך לציין ב-Looker רשימה של שדות פירוט שיוצגו כשלוחצים על הערך של המדד. כשיוצרים מודל, הגנרטור בדרך כלל יוצר כמה שדות ראשוניים של ניתוח מעמיק. בנוסף, אתם יכולים להוסיף שדות פירוט בעצמכם. לדוגמה, נניח שאתם מודדים את מספר ההזמנות לפי מדינת המשתמשים בשבוע האחרון. ב-Looker, השאילתה תיראה בערך כך:

המדינה של המשתמשיםמספר ההזמנות
קליפורניה24
טקסס5
קולורדו4
פלורידה4
אילינוי4

אם תלחצו על 24 בשורה California, תצפו לראות את 24 ההזמנות שהגיעו מקליפורניה. למרות ש-Looker מוסיף את המסנן USERS State: California, Looker לא יודע אילו שדות אתם רוצים להציג בהזמנה. קודם צריך להשתמש בקבוצה כדי להצהיר על השדות האלה במודל.

ב-LookML, קבוצה היא רשימה של שמות שדות (מאפיין, מדד ומסנן). אתם משתמשים בקבוצות כדי לספק ל-Looker את המידע הבא:

  • השדות שרוצים להציג כשמבצעים פירוט של ספירה או מדד אחר
  • השדות שרוצים לייבא כשמצטרפים לתצוגה
  • השדות שרוצים להוסיף לאינדקס ב-Explore

מכיוון שאפשר להשתמש באותה קבוצה במקומות רבים במודל, Looker מספק כמה שיטות ליצירת קבוצות.

קבוצות מילוליות

קבוצה מילולית היא דרך פשוטה להגדיר קבוצה ב-LookML, במיוחד אם הקבוצה משמשת רק פעם אחת. כדי ליצור קבוצה מילולית, צריך להצהיר על הקבוצה כמערך. אפשר להצהיר על קבוצות של ערכים מילוליים באמצעות [].

לדוגמה:

view: customers {
  dimension: id {
    primary_key: yes
  }
  measure: count {
    type: count
  }
  dimension: city {}
  dimension: state {}
  dimension: name {}
}

בדוגמה הזו, השדות שרוצים להציג הם id,‏ name ו-city.

במדד, אפשר להצהיר על מערך מילולי באופן הבא:

measure: count {
  type: count
  drill_fields: [id, name, city]
}

קבוצות בעלות שם

נניח ששתי ספירות מוגדרות בתצוגה customers: count ו-in_california_count. כשמשתמש נכנס לעומק של השדה Count או של השדה In California Count ב-Explore, אתם רוצים להציג את השדות id,‏ name ו-city.

יכול להיות שבהתחלה ייראה לכם שמספיק להצהיר על השדות האלה באופן מילולי:

view: customers {
  measure: count {
    type: count
    drill_fields: [id, name, city]
  }
  measure: in_california_count {
    type: count
    filters: [state: "California"]
    drill_fields: [id, name, city]
  }
}

עם זאת, אם תרצו להוסיף שדה חדש (כמו customers.state), תצטרכו לערוך את שתי הרשימות, אלא אם תשתמשו בפרמטר set כדי ליצור קבוצות בעלות שם שתוכלו לנהל במקום אחד ולהשתמש בהן בכמה מקומות.

הקוד הבא יוצר קבוצה customers.detail ומפנה את שתי הספירות לאותה קבוצת שדות.

view: customers {
  set: detail {
    fields: [id, name, city]      # creates named set customers.detail
  }

  measure: count {
    type: count
    drill_fields: [detail*]       # show fields in the set "customers.detail"
  }
  measure: in_california_count {
    type: count
    filters: [state: "California"]
    drill_fields: [detail*]      # show fields in the set "customers.detail"
  }
}

קבוצות LookML הן כלי יעיל מהסיבות הבאות:

  • הצהרה מחדש של קבוצות היא מצטברת. אם מצהירים על קבוצה בכמה מקומות, Looker כולל את כל השדות שהוצהרו עבור הקבוצה בכל המיקומים.
  • אפשר להטמיע קבוצות בתוך קבוצות אחרות על ידי הקלדת השם של הקבוצה השנייה ואחריה כוכבית, למשל, setname*.
  • כדי להסיר רכיבים מקבוצות, אפשר להוסיף מקף לפני שם השדה, לדוגמה, -fieldname.

התאמה אישית של תצוגות פירוט

אם האדמין של Looker הפעיל את התכונה תרגול להמחשה, התצוגות החזותיות של התעמקות בנתונים בטבלת Look וב-Explore לא תמיד יוגדרו כברירת מחדל לטבלת נתונים. במקרה כזה, אפשר להתאים אישית את התצוגה החזותית שמוצגת באמצעות משתני Liquid בפרמטר link, כמו שמוסבר בדף התיעוד של הפרמטר link ובדף שיטות מומלצות בנושא ניתוח נתונים מעמיק.

לוחות בקרה תומכים בתרגול להמחשה באמצעות הפרמטר link בלי להפעיל את התכונה תרגול להמחשה.

סינון קבוצות של תוצאות

‫LookML מספקת קבוצה של פעולות סינון שאפשר להחיל על שדות ועל Explores כדי לסנן קבוצות של תוצאות לפני שהן מוחזרות למשתמש.

‫always_filter ב-Explore

אפשר להשתמש ב-always_filter כדי להחיל תמיד קבוצה של מסננים על כל שאילתה שמופעלת ב-Explore. המסננים יופיעו בממשק המשתמש של Looker, ולמרות שהמשתמשים יכולים לשנות את ערך ברירת המחדל של המסנן שאתם מספקים, הם לא יכולים להסיר את המסננים. בדרך כלל, המסננים האלה משמשים להסרת נתונים שבדרך כלל לא רוצים לכלול. לדוגמה, נניח שבדוח הזמנות ב-Explore רוצים לראות רק הזמנות שהושלמו או נמצאות בהמתנה. אפשר להוסיף את קוד LookML הבא:

explore: orders {
  view_name: order
    filters: [status: "complete,pending"]
  }
}

אם המשתמש רוצה לראות הזמנות עם ערכי סטטוס אחרים, הוא יכול להגדיר את סטטוס ההזמנות ל-% בממשק המשתמש.

sql_always_where בכרטיסייה "מה חדש"

אם רוצים להחיל הגבלה על שאילתה שהמשתמשים לא יכולים לשנות, אפשר להשתמש ב-sql_always_where. בנוסף לשאילתות שמופעלות על ידי משתמשים אנושיים, ההגבלה תחול על מרכזי בקרה, על תצוגות Look מתוזמנות ועל מידע מוטמע שמסתמך על ה-Explore הזה. תנאי sql_always_where לא מוצג למשתמש, אלא אם הוא מסתכל על ה-SQL הבסיסי של השאילתות שהוא יוצר.

בדוגמה הבאה, המשתמשים לא יכולים לראות הזמנות שבוצעו לפני 2012-01-01:

# Using Looker references
explore: order {
  sql_always_where: ${created_date} >= '2012-01-01' ;;
}

# Using raw SQL
explore: order {
  sql_always_where: DATE(created_time) >= '2012-01-01' ;;
}

conditionally_filter בכרטיסייה "מה חדש"

כששולחים שאילתות לטבלאות גדולות מאוד, צריך להקדיש לכך מחשבה, כי שאילתות ללא הגבלה יכולות להכביד במהירות על מסד הנתונים. ב-LookML יש דרך לטפל בבעיה הזו באמצעות conditionally_filter.

משתמשים בפרמטר conditionally_filter כדי להחיל מסנן על השאילתה, אלא אם המשתמש כבר הוסיף מסנן לאחד מהשדות שמפורטים בקטע unless.

בדוגמה הבאה לא יבוצע שינוי בשאילתת המשתמש אם המשתמש החיל מסנן על אחד או יותר מהשדות האלה: created_date,‏ shipped_time,‏ shipped_date,‏ orders.id או customer.name. אם המשתמש לא סינן לפי אף אחד מהשדות האלה, Looker יוסיף באופן אוטומטי מסנן של יום אחד ב-orders.created_time.

  filters: [orders.created_time: "1 day"]
  unless: [created_date, shipped_time, shipped_date, orders.id, customer.name]
}