בדף הזה מוסבר על הפרמטר
sqlשהוא חלק משדה.אפשר להשתמש ב-
sqlגם כחלק מטבלה נגזרת, כמו שמתואר בדף התיעוד של הפרמטרsql(לטבלאות נגזרות).
Usage
view: view_name {
dimension: field_name {
sql: ${revenue_in_dollars} - ${inventory_item.cost_in_dollars} ;;
}
}
|
היררכיה
sql |
סוגי שדות אפשריים
מאפיין, קבוצת מאפיינים, מסנן, מדד
מקבל
ביטוי SQL
כללים מיוחדים
ביטוי SQL שמשתנה בהתאם לtype של השדה (כפי שמתואר בפירוט בדף התיעוד הזה)
|
הגדרה
הפרמטר sql מקבל כמה סוגים של ביטויי SQL שיגדירו מאפיין, מדד או מסנן. הביטוי שצריך לכתוב משתנה בהתאם לסוג השדה שיוצרים. פרטים נוספים על סוגי מאפיינים ומסננים זמינים בדף התיעוד סוגי מאפיינים, מסננים ופרמטרים, ופרטים נוספים על סוגי מדדים זמינים בדף התיעוד סוגי מדדים. אפשר לעיין גם בדף המסמכים בנושא שילוב של SQL והפניה לאובייקטים של LookML.
sql למאפיינים
בלוק sql של מאפיינים יכול בדרך כלל לקבל כל SQL תקין שיופיע בעמודה אחת של הצהרת SELECT. ההצהרות האלה מסתמכות בדרך כלל על אופרטור ההחלפה של Looker, שמופיע בכמה צורות:
-
${TABLE}.column_nameמפנה לעמודה בטבלה שמקושרת לתצוגה שאתם עובדים עליה. -
${dimension_name}מתייחס למאפיין בתצוגה שאתם עובדים עליה. -
${view_name.dimension_name}מתייחס למאפיין מתצוגה אחרת. -
${view_name.SQL_TABLE_NAME}מפנה לתצוגה אחרת או לטבלה נגזרת. (שימו לב:SQL_TABLE_NAMEבהפניה הזו הוא מחרוזת מילולית, ואין צורך להחליף אותו בשום דבר).
אם לא מציינים את sql, Looker מניח שיש עמודה בטבלה הבסיסית עם אותו שם כמו השדה. לדוגמה, בחירת שדה בשם city ללא הפרמטר sql תהיה שוות ערך לציון sql: ${TABLE}.city.
הפרמטר
sqlשל מאפיין לא יכול לכלול צבירות. כלומר, אי אפשר להשתמש בו באגרגציות של SQL או בהפניות למדדים של LookML. אם רוצים ליצור שדה עםsqlשכולל צבירת SQL או שמפנה למדד LookML, צריך להשתמש בפרמטרsqlבמדד, ולא במאפיין.
מאפיין פשוט מאוד שמקבל את הערך ישירות מעמודה בשם revenue יכול להיראות כך:
dimension: revenue_in_cents {
sql: ${TABLE}.revenue ;;
type: number
}
מאפיין שמתבסס על מאפיין אחר באותו תצוגה יכול להיראות כך:
dimension: revenue_in_dollars {
sql: ${revenue_in_cents} / 100 ;;
type: number
}
מאפיין שמסתמך על מאפיין אחר בתצוגה שונה יכול להיראות כך:
dimension: profit_in_dollars {
sql: ${revenue_in_dollars} - ${inventory_item.cost_in_dollars} ;;
type: number
}
מאפיין שמסתמך על מאפיין אחר בטבלה נגזרת יכול להיראות כך:
dimension: average_margin {
sql: (SELECT avg(${gross_margin} FROM ${order_facts.SQL_TABLE_NAME})) ;;
type: number
}
משתמשי SQL מתקדמים יותר יכולים לבצע חישובים מתקדמים יחסית, כולל שאילתות משנה מתואמות (הערה: לא כל ניב של מסד נתונים תומך בשאילתות משנה מתואמות):
dimension: user_order_sequence_number {
type: number
sql:
(
SELECT COUNT(*)
FROM orders AS o
WHERE o.id <= ${TABLE}.id
AND o.user_id = ${TABLE}.user_id
) ;;
}
פרטים נוספים מופיעים במאמרי העזרה בנושא סוג מסוים של מאפיין.
sql לקבוצות מאפיינים
הפרמטר sql של dimension_group מקבל כל ביטוי SQL תקין שמכיל נתונים בפורמט של חותמת זמן, תאריך ושעה, תאריך, ראשית זמן או yyyymmdd.
sql for Measures
הבלוק sql של מדדים בדרך כלל מופיע באחת משתי צורות:
- שאילתת ה-SQL שפונקציית צבירה (כמו
COUNT,SUM,AVG) תופעל עליה, שוב באמצעות אופרטור ההחלפה של Looker, כפי שמתואר בקטע SQL for Dimensions - ערך שמבוסס על כמה מדדים אחרים
לדוגמה, כדי לחשב את סך ההכנסות בדולרים, אפשר להשתמש בנוסחה הבאה:
measure: total_revenue_in_dollars {
sql: ${revenue_in_dollars} ;;
type: sum
}
כדי לחשב את הרווח הכולל, אפשר להשתמש בנוסחה:
measure: total_revenue_in_dollars {
sql: ${total_revenue_in_dollars} - ${inventory_item.total_cost_in_dollars} ;;
type: number
}
פרטים נוספים זמינים במאמרי העזרה בנושא סוגים ספציפיים של מדדים.
במקרה של count measure type, אפשר להשמיט את הפרמטר sql.
בסוגים אחרים של מדדים, אם לא מציינים את sql, מערכת Looker מניחה שיש עמודה בטבלה הבסיסית עם אותו שם כמו השדה. מאחר שלמדד צריך להיות שם שמציין שהוא סיכום של קבוצת ערכים בסיסית, בפועל תמיד צריך לכלול פרמטר sql.
אתגרים מתמטיים ב-SQL
יש שני אתגרים נפוצים שקשורים לחלוקה בפרמטר sql.
קודם כל, אם אתם משתמשים בפעולת חילוק בחישוב, כדאי להגן על עצמכם מפני אפשרות של חלוקה באפס, שתגרום לשגיאת SQL. כדי לעשות את זה, משתמשים בפונקציה NULLIF של SQL. לדוגמה, המשמעות של הדוגמה הבאה היא 'אם המכנה הוא אפס, צריך להתייחס אליו כאילו הוא NULL':
measure: active_users_percent {
sql: ${active_users} / NULLIF(${users}, 0) ;;
type: number
}
בעיה נוספת היא האופן שבו SQL מטפל במתמטיקה של מספרים שלמים. אם מחלקים 5 ב-2, רוב האנשים מצפים שהתוצאה תהיה 2.5. עם זאת, בהרבה ניבי SQL התוצאה תהיה רק 2, כי כשמחלקים שני מספרים שלמים, התוצאה היא גם מספר שלם. כדי לפתור את הבעיה, אפשר להכפיל את המונה במספר עשרוני כדי לחייב את SQL להחזיר תוצאה עשרונית. לדוגמה:
measure: active_users_percent {
sql: 100.00 * ${active_users} / NULLIF(${users}, 0) ;;
type: number
}
משתני Liquid עם sql
אפשר גם להשתמש במשתני Liquid עם הפרמטר sql. משתני Liquid מאפשרים לכם לגשת לנתונים כמו הערכים בשדה, נתונים על השדה ומסננים שהוחלו על השדה.
לדוגמה, המימד הזה מסתיר סיסמת לקוח בהתאם למאפיין משתמש ב-Looker:
dimension: customer_password {
sql:
{% if _user_attributes['pw_access'] == 'yes' %}
${password}
{% else %}
"Password Hidden"
{% endif %} ;;
}