בדף הזה מתוארים הדפוסים הנפוצים הבאים ב-LookML:
- שדות התוויות (והשמות בממשק המשתמש)
- סינון של ספירות לפי מאפיין
- אחוזים
- שימוש בקבוצות לפרטים של ניתוח מעמיק
- סינון של קבוצות תוצאות
שדות תיוג (ושמות בממשק המשתמש)
Looker ממיר את שמות השדות ב-LookML למחרוזות שמוצגות בממשק המשתמש על ידי שילוב של שם התצוגה בגופן רגיל עם השם הקצר של השדה בגופן מודגש. לדוגמה, שדה בשם סכום בתצוגה הזמנות יופיע בממשק המשתמש כהזמנות סכום. בדף הזה, שני שמות השדות מודגשים ושם התצוגה מופיע באותיות רישיות (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, היא לא יודעת אילו שדות אתם רוצים להציג לפי הסדר. קודם צריך להשתמש בקבוצה כדי להצהיר על השדות האלה במודל.
ב-LookML, set הוא רשימה של שמות שדות (מאפיין, מדד ומסנן). אתם משתמשים בקבוצות כדי לספק ל-Looker את המידע הבא:
- השדות שרוצים להציג כשמבצעים פירוט של ספירה או מדד אחר
- השדות שרוצים לייבא כשמצטרפים לתצוגה
- השדות שרוצים ליצור להם אינדקס בניתוח
אפשר להשתמש באותה קבוצה במקומות רבים במודל, ולכן 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. כשמשתמש מבצע Drill down בשדה 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 באפליקציה 'מה חדש ב-Chromebook'
אפשר להשתמש בalways_filter כדי להחיל תמיד קבוצה של מסננים על כל שאילתה שמופעלת בתוך ניתוח. המסננים יופיעו בממשק המשתמש של Looker, והמשתמשים יוכלו לשנות את ערך ברירת המחדל של המסנן שסיפקתם, אבל לא להסיר את המסננים. בדרך כלל, משתמשים במסננים האלה כדי להסיר נתונים שבדרך כלל לא רוצים לכלול. לדוגמה, נניח שבדוח הזמנות ב-Explore רוצים לראות רק הזמנות שהושלמו או שהן בהמתנה. אפשר להוסיף את קוד LookML הבא:
explore: orders {
view_name: order
filters: [status: "complete,pending"]
}
}
אם המשתמש רוצה לראות הזמנות עם ערכי סטטוס אחרים, הוא יכול להגדיר את ORDERS Status ל-% בממשק המשתמש.
sql_always_where באפליקציה 'מה חדש ב-Chromebook'
אם רוצים להחיל הגבלה על שאילתות שהמשתמשים לא יכולים לשנות, אפשר להשתמש ב-sql_always_where. בנוסף לשאילתות שמריצים משתמשים אנושיים, ההגבלה תחול על מרכזי בקרה, על תצוגות Look מתוזמנות ועל מידע מוטמע שמסתמך על התכונה 'ניתוח נתונים'. 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 באפליקציה 'מה חדש ב-Chromebook'
כשמריצים שאילתות על טבלאות גדולות מאוד, צריך לחשוב טוב על השאילתות, כי שאילתות ללא הגבלה יכולות להעמיס על מסד הנתונים. ב-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]
}