Quick Quiz
- מה תמיד מפנה לפונקציה?
- האם נוסחה יכולה להכיל יותר מפונקציה אחת?
- איזו קטגוריה של פונקציות תשתמש לשרשור שתי מחרוזות טקסט?
התשובות מופיעות בסוף הסעיף…
מושג ה-Context (הקשר) ב-DAX
ההקשר (Context) הוא אחד המושגים המרכזיים והחשובים ביותר בשפת DAX. קיימים שני סוגי הקשר:
- הקשר שורה (Row Context)
- הקשר סינון (Filter Context)
הקשר שורה (Row Context)
הקשר שורה מתייחס ליכולת של נוסחת DAX לבצע חישוב בהתבסס על השורה הנוכחית במודל. לדוגמה, נוסחה פשוטה:
Margin = [SalesAmount] – [TotalCost]
מחשבת את הערך של עמודת Margin על בסיס ההפרש בין [SalesAmount] לבין [TotalCost] – עבור כל שורה בטבלה.
DAX "מבין" באיזו שורה מדובר, ולכן לוקח את הערכים הרלוונטיים ממנה בלבד.
חשוב: הקשר שורה לא מופיע רק בעמודות מחושבות, אלא גם בעת שימוש בפונקציות שמסננות טבלאות ומבצעות חישובים לפי שורה.
הקשר סינון (Filter Context)
הקשר סינון מגדיר אילו נתונים נכללים או מוחרגים מהחישוב – בהתאם למסננים שהוחלו (בדוח, בגרפים או בנוסחה עצמה).
בדוגמה של PivotTable, כשאנחנו מציגים את סך המכירות לפי שנה ואזור, אנחנו בעצם מחילים הקשר סינון על הערך – לדוגמה: רק עבור השנה 2024 ואזור דרום.
בנוסחאות DAX, אפשר להגדיר הקשר סינון בצורה מפורשת – באמצעות פונקציות כגון:
- CALCULATE
- FILTER
- ALL
- RELATED
דוגמה לנוסחת מדד עם הקשר סינון
StoreSales := CALCULATE([Sales], DimChannel[ChannelName] = "Store")
פירוק המרכיבים
StoreSales – שם המדד
= אופרטור השמה
CALCULATE – פונקציה המאפשרת שינוי של הקשר סינון
[Sales] – מדד קיים שמבצע SUM(FactSales[SalesAmount])
DimChannel[ChannelName] = "Store" – מסנן שמחיל את התנאי רק על ערוצים מסוג Store
משמעות: המדד StoreSales מחזיר סכום מכירות רק עבור ערוצים שהוגדרו כ-"Store".
למה ההקשר חשוב כל כך?
כי הוא קובע איך ואילו נתונים DAX יחשב
האם מדובר בערכים ברמת שורה בודדת?
האם המסנן מופעל על קטגוריה מסוימת?
האם המסנן מגיע מדוח, פילטר, או פונקציה?
הבנה של סוגי ההקשרים היא הבסיס ליצירת נוסחאות מתקדמות ומדויקות.
תשובות ל-Quick Quiz
הפונקציה תמיד מסומנת עם שם ואחריו סוגריים – לדוגמה: SUM()
כן, נוסחה יכולה להכיל מספר פונקציות מקוננות
פונקציות מחרוזות (Text Functions), לדוגמה: CONCATENATE