conditionally_filter

Usage

explore: explore_name {
  conditionally_filter: {
    filters: [field_name: "filter expression", field_name: "filter expression", ...]
    unless: [field_name, field_name, ...]
  }
}
היררכיה
conditionally_filter
ערך ברירת המחדל
ללא

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

הגדרה

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

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

המסננים שמוחלים בconditionally_filter מוצגים למשתמש אחרי שהוא מריץ את השאילתה. המשתמשים יכולים לשנות את ברירת המחדל של value שהגדרתם, אבל הם לא יכולים להסיר את המסנן לגמרי אלא אם הם מפעילים לפחות אחד מהמסננים שציינתם בתת-פרמטר unless.

השמות של השדות יכולים להיות השם של dimension או של measure.

כדי להפנות למאפיין או למדד שכלולים בתצוגה מאוחדת ולא בניתוח הזה ב-Explore, משתמשים בפונקציה view_name.field_name.

דוגמאות

דוגמה:

explore: order {
  conditionally_filter: {
    filters: [id: "123", customer.id: "678,789"]
    unless: [date]
  }

  join: customer {
    sql_on: ${order.customer_id} = ${customer.id} ;;
  }
}

במקרה הזה, המסנן id מתייחס לשדה id מהניתוח שנקרא order. המסנן customer.id מתייחס לשדה id מהתצוגה שנקראת customer. שני המסננים יופעלו אלא אם המשתמש יגדיר תאריך הזמנה בממשק המשתמש של התכונה 'ניתוח נתונים'. בדוגמה הזו רואים גם שאפשר לדרוש כמה מסננים.

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

אפשר גם לחייב את המשתמש להשתמש במסנן מזהה הזמנה (עם ערך ברירת מחדל של '123' שאפשר לשנות) אלא אם הוא משתמש במסנן תאריך הזמנה:

explore: order {
  conditionally_filter: {
    filters: [id: "123"]
    unless: [date]
  }
}

אפשרות אחרת היא לחייב את המשתמש להשתמש במסנן מזהה הזמנה (עם ערך ברירת מחדל של '123' או '234' שאפשר לשנות) אלא אם הוא מפעיל מסנן Order Date או Order Time:

explore: order {
  conditionally_filter: {
    filters: [id: "123,234"]
    unless: [date, time]
  }
}

לחלופין, אפשר לחייב את המשתמש להשתמש במסנן מזהה הזמנה (ערך ברירת המחדל הוא '123') ובמסנן עיר של לקוח (ערך ברירת המחדל הוא 'שיקגו'), אלא אם הוא מחיל מסנן תאריך הזמנה או תאריך של לקוח:

explore: order {
  conditionally_filter: {
    filters: [id: "123", customer.city: "Chicago"]
    unless: [date, customer.date]
  }

  join: customer {
    sql_on: ${order.customer_id} = ${customer.id} ;;
  }
}

אתגרים נפוצים

משתמש לא יכול להסיר את כל המסננים כשמשתמשים ב-conditionally_filter

כשמשתמשים ב-conditionally_filter, אין אפשרות להריץ שאילתה בלי אף מסנן. המשתמשים חייבים להשתמש במסננים המותנים שאתם מציינים, או במסננים שלהם מהרשימה unless.

conditionally_filter עם ממד type: time בקבוצה, מעביר את הממדים האחרים של הקבוצה לתת-פרמטר unless

אם field שאתם מציינים בתוך conditionally_filter הוא מאפיין מבוסס-זמן ששייך לקבוצת מאפיינים, ‏ Looker יתייחס לכל שאר המאפיינים בקבוצה הזו כאילו הם כפופים לפרמטר המשנה unless של מסנן התנאי הזה – גם אם לא תכללו פרמטר משנה של unless.

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

בלוק LookML 1:

explore: logs {
  # Make sure there is always a filter on event_date, event_week, event_month or event_year
  # Default to the last complete day of data
  conditionally_filter: {
    filters: [logs.event_date: "1 days ago for 1 day"]
  }

view: logs {
  # Combine the partition date filters and the time filters into a single field group.
  dimension_group: event {
    type: time
    timeframes: [date,week,month,year]
    sql: _PARTITIONTIME ;;
  }
}

בלוק LookML 2:

explore: logs {
  # Make sure there is always a filter on event_date, event_week, event_month or event_year
  # Default to the last complete day of data
  conditionally_filter: {
    filters: [logs.event_date: "1 days ago for 1 day"]
    unless: [event_week, event_month, event_year]
  }

view: logs {
  # Combine the partition date filters and the time filters into a single field group.
  dimension_group: event {
    type: time
    timeframes: [date,week,month,year]
    sql: _PARTITIONTIME ;;
  }
}

מערכת Looker מפרשת את שני בלוקי LookML באותו אופן, למרות שרק בבלוק השני של LookML מוחל באופן מפורש תת-הפרמטר unless על המאפיינים האחרים של הקבוצה event.

חשוב לדעת

יש שיטה להחלת conditionally_filter על קבוצת משנה של משתמשים

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

אם אתם רוצים להשתמש ב-conditionally_filter בלי unless, אתם יכולים להשתמש ב-always_filter במקום

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

אם רוצים מסננים שלא ניתן לשנות בכלל, כדאי להשתמש בsql_always_where

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

אם אתם רוצים מסננים ספציפיים למשתמשים שלא ניתן לשנות, כדאי להשתמש ב-access_filter

אם אתם רוצים להוסיף לחקירה מסננים שספציפיים לכל משתמש, אבל אי אפשר להסיר או לשנות אותם, אתם יכולים להשתמש ב-access_filter.