ההבדל בין SUM ל SUMX ב DAX

ההבדל בין Sum ל Sumx ב DAX

Sum ו- Sumx הם שתי פונקציות שמבצעות סכימה ולכן הרבה משתמשים מתבלבלים או לא מבינים מה ההבדל ביניהם.  במאמר זה נעמוד על ההבדלים בין שתי הפונקציות באמצעות דוגמאות.

SUM – פונקציית צבירה

SUM היא פונקציית צבירה פשוטה. היא מחשבת סכום של עמודה תוך התחשבות בפילטר . לדוגמה, מדד כמו סכום מכירות TotalSale = SUM('Fact Sales'[SalesAmount]) .

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

כעת נראה מתי פונקציות SUM לא עובדות ויש צורך בפונקציה אחרת. 

SUMXצבירת ביטוי  

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

למעשה, כשאתם מתחילים לכתוב מדד זה, אתם אפילו לא מקבלים את ההשלמה האוטומטית  של DAX עבור החלק השני של הביטוי: 

למרות שהעמודה TotalProductCost קיימת בטבלה FactInternetSales ההשלמה האוטומטית לא מציגה אותה. אם ההשלמה האוטומטית לא מאפשרת לך לכתוב משהו איפשהו, פירושו של דבר שהמבנה או הביטוי לא מתאים לפונקציות שבהם השתמשת. אז מדוע אין אפשרות לחשב ביטוי כל כך פשוט? כי הפונקציה SUM מקבלת רק שם עמודה כקלט (ולא ביטוי). להלן מבנה פונקציית SUM: 

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

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

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

SUMX היא סכום הביטוי, האות X בסוף הפונקציה מרמזת על eXpression. פונקציה זו נותנת לך את הסכום של כל ביטוי. להלן מבנה הפונקציה: 

SumX(

,) כדי ש- SUMX יעבוד, עליך לציין שם טבלה. כשאתה משתמש ב- SUM אינך צריך שם טבלה, מכיוון שעמודה אחת שייכת לטבלה אחת בלבד. אך כשאתה משתמש ב- SUMX אתה רשאי לכתוב ביטוי המשתמש בעמודות מטבלאות אחרות. בדוגמה עבור חישוב רווח, שתי העמודות מגיעות מאותה טבלה (Fact Sales). אז הביטוי שלנו יהיה: 

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

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

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

הבנה חשובה אחת לגבי SUMX עד כה היא שהפונקציה SUMX משתמשת בזיכרון (באופן זמני, אך עדיין משתמשת בזיכרון) לצורך חישוב. ממצא חשוב נוסף הוא שהיא מחשבת ערכים שורה אחר שורה. אם אתה מריץ את SUMX על טבלה גדולה מאוד עם ביטוי מורכב, סביר להניח שתמתין קצת לקבלת התוצאות. יתרון נסתר של SUMX – קלט טבלה עד כה ראית דוגמה פשוטה לשימוש בפונקציה SUMXדוגמה שאפשר אפילו לכתוב אותה ללא SUMX (באמצעות פונקציות SUM מרובות, כפי שראינו למעלה). אך יתרון משמעותי לשימוש בפונקציית SUMX הוא לא רק הגמישות בביטוי, אלא גם הגמישות בבחירת קלט הטבלה. נניח שאתה רוצה לחשב את הרווח הכולל בביטוי. איך אנחנו הולכים לעשות את זה? ובכן, אתם עשויים לומר שאנחנו פשוט משתמשים באותה הצהרת SUMX בה השתמשנו עד כה, מה שמביא לנו את התוצאה למטה:  אבל הביטוי שלמעלה לא תמיד נותן לך את סך הרווח. לדוגמה אם אתה מציג את מדד סך הרווח בפריסה או קיבוץ לפי עמודה אחרת מתקבלת התוצאה הבאה:  סינון עמודה או סינון באמצעות רכיב וויזואלי ישפיע על תוצאת החישוב. לכן,  כשבוחנים את הנתונים לסוכן גלעד לוי למשל, סכום הרווח אינו הסכום הכולל, אלא רק סכום הרווח עבור הסוכן הספציפי. ALL היא פונקציה מעניינת (נכתוב עליה בהרחבה בהזדמנות אחרת), אם אני אשתמש בפונקציה ALL בכדי לתת לי את כל הטבלה ללא קשר לפילטרבאמצעות הביטוי הזה: TotalProfitALL = SUMX(ALL('Fact Sales'),'Fact Sales'[SalesAmount]-'Fact Sales'[TotalCost]) נקבל את התוצאה הבאה:  איך זה עובד? ALL היא פונקציה שמחזירה טבלה כפלטSUMX היא פונקציה שמקבלת טבלה כקלט. כך הם יכולים לעבוד אחד עם השני בצורה יפה! כך ש ALL יכולה להיות טבלת הקלט של פונקציית SUMX. מכיוון ש ALL היא פונקציה שמעבירה את כל הטבלה ללא קשר לפילטר, אנו מקבלים את הטבלה המלאה של Fact Sales, והתוצאה תהיה תמיד הרווח הכולל. עכשיו נשאל את עצמנו, מתי זה יבוא לידי שימוש? ובכן, ניתן להשתמש במדד זה כדי לחשב את אחוז הרווחיות עבור כל סוכןלדוגמה:  כל טבלה יכולה להיות הקלט עבור SUMX לא רק הפונקציה ALL יכולה להיות הקלט עבור SUMX, אתה יכול גם להשתמש בפונקציות אחרות שמחזירות טבלה, או בכל טבלה אחרת כקלט עבור ה- SUMX. לדוגמה, הביטוי שלהלן נותן לנו את התוצאה המסוננת של הטבלה Fact Sales, כאשר הסוכן הוא "יהודה פוקס":  בדוגמה זו, פונקציית FILTER משמשת כקלט עבור SUMX כדי לתת לנו את תוצאת החישוב עבור נתונים מסוננים. 

SUMX היא פונקציה שתוכל להגדיר ביטוי וטבלה כקלט. היכולת לשנות גם את הביטוי וגם את הטבלה (כפילטר או משהו אחר), הופכת את הפונקציה הזו לפונקציה פופולרית לשימוש ב- DAX. 

סיכום Sum ו- SumX הן פונקציות המחשבות סכום (צבירה). עם זאת, ה- SUMX מחשב את הצבירה על ביטוי שנפתר מהטבלה שניתן לחשב גם באופן דינמי. SUMX היא פונקציה כללית וחזקה, וזו הסיבה שאנחנו רואים את השימוש בה הרבה ב- DAX. דבר אחד שכדאי לזכור הוא ש- SUMX, צורכת אחסון זיכרון זמני ועושה את החישוב שורה אחת בכל פעם, ואז מסכמת את הנתונים לתוצאה אחת 

השארת תגובה