התקשרו אלינו: 052-2928949
ימים א'-ה' בין השעות 9:00-17:00

התקשרו אלינו: 052-2928949 א-ה 9:00-17:00

עמודה מחושבת או מדד (Measure)?

Power BI

עמודה מחושבת או מדד (Measure)?

Power BI

עמודה מחושבת או מדד (Measure)?

המדריך המלא למשתמשי אקסל שעוברים ל-Power BI

אחת השאלות הראשונות שכל משתמש אקסל פוגש כשהוא נכנס לעולם של Power BI או Power Pivot היא:
"מה ההבדל בין עמודה מחושבת (Calculated Column) למדד (Measure), ומתי אני אמור להשתמש בכל אחד מהם?".
אם גם אתם שאלתם את עצמכם את השאלה הזו, אתם במקום הנכון.
במבט ראשון, שניהם נראים דומים – כלים ליצירת חישובים. אבל בפועל, הם פועלים בצורה שונה לחלוטין,
והבחירה ביניהם תשפיע על הביצועים, הגמישות והדיוק של הדוחות שלכם.
כדי להבין את ההבדל, בואו נחזור לרגע הביתה לאקסל:

  • חשבו על עמודה מחושבת כמו על עמודת עזר חדשה שהוספתם לטבלת הנתונים שלכם, שבה כל שורה מקבלת ערך מחושב.
  • חשבו על מדד כמו על נוסחת סיכום (למשל, SUMIF או SUMPRODUCT), או על חישוב שאתם מכניסים ל-Pivot Table.
    הוא לא "גר" בטבלה עצמה, אלא מסכם קבוצת נתונים ומגיב באופן דינמי לסינונים שתפעילו.

הערה חשובה: באקסל עמודת עזר יכולה להתייחס לשורות אחרות (למשל, חישוב יתרה מצטברת),
ואילו ב-DAX העמודה המחושבת פועלת אך ורק בהקשר השורה (Row Context) הנוכחית,
כלומר – הנוסחה "רואה" רק את הערכים בשורה הספציפית, ואין לה שום "מודעות" לשורות שמעליה או מתחתיה.

הדוגמה המעשית: טבלת מכירות

נניח שיש לנו טבלת מכירות פשוטה בשם Sales:

עמודה מחושבת: חישוב סטטי ברמת השורה

באקסל, אם נרצה לחשב את הסה"כ, נוסיף עמודה חדשה בשם Total, עם נוסחה שתכפיל את המחיר בכמות עבור כל שורה.
ב-Power BI, נעשה בדיוק את אותו הדבר באמצעות נוסחת DAX פשוטה בעמודה מחושבת.

Total = Sales[Quantity]*Sales[Price]

כמה מילים על התחביר:
הפניה לעמודת נעשית על ידי הפניה לטבלה (במקרה שלנו – Sales), ואז לעמודה, בתוך סוגריים מרובעים (לדוגמה – Price).
ובמקרה שלנו – הוספנו עמודה בשם Total שמקבלת את הערך של מכפלת ה-Quantity ב-Price, שתיהן נמצאות בטבלת Sales.
החישוב מתבצע פר שורה.

מה חשוב לדעת על עמודה מחושבת?

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

 

השלכות ועלויות של עמודה מחושבת:

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

מדד (Measure): חישוב דינמי שמגיב להקשר

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

TotalSum = sum(Sales[Total])

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

היתרון הגדול של מדד הוא הדינמיות:

  • אם נגרור את המדד אל המטריצה (Matrix)

    נראה את הסך הכולל: 850 ₪:

    אם נגרור אל השורות את המוצר, נקבל חלוקה של הסה"כ, על פי המוצרים השונים:

    ובמקום לגרור אל השורות, נוכל להחיל סינון, לדוגמה – לפי קטגוריית "Clothing"

    המדד יחושב מחדש ויראה: 400 ₪:
  • המדד לא מאוחסן בזיכרון, אלא מחושב בזמן אמת בכל פעם שההקשר (הפילטרים והצירים) בדו"ח משתנה.

 

השלכות ועלויות של מדד

במקרה של מדד, העלות אינה זיכרון RAM אלא כוח עיבוד (CPU) וזמן תגובה למשתמש:
מדד פשוט כמו SUM(Sales[Total]) הוא כמעט מיידי.
מדד מורכב יכול להוביל להשהיה מורגשת בתגובתיות הדוח.

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

אז איפה נמקם את החישוב?

אחרי שהבנו את נושא העלויות והמחירים:
עמודה: עלות זיכרון RAM וזמן רענון (משלמים מראש).
מדד: עלות CPU וזמן תגובה (משלמים לפי דרישה).

נבין עקרון יסוד חשוב בעיצוב מודלים:
דחוף חישובים רחוק ככל האפשר במעלה הזרם (Upstream).

ההיררכיה היא כזו:

  • מקור הנתונים: זהו התרחיש האידיאלי. מה שאפשר לחשב בבסיס הנתונים, עדיף שיקרה שם.
  • Power Query (עורך השאילתות): המקום המועדף לטרנספורמציות סטטיות שקורות פעם אחת בטעינה.
  • עמודה מחושבת (DAX): רק אם החישוב תלוי בחישובים אחרים במודל, או אם אנו חייבים את התוצאה לצורך סינון/קיבוץ.
  • מדד (DAX): ברירת המחדל לכל חישוב אגרגטיבי ודינמי.

ורגע לפני שמסיימים, הנה עוד מידע חשוב:

הקשר שורה (Row Context) מול הקשר סינון (Filter Context)

כדי להבין לעומק את ההבדל, חשוב להכיר שני מושגי יסוד ב-DAX:

  • הקשר שורה (Row Context): זהו עולמה של העמודה המחושבת.
    כאשר הנוסחה שלה מחושבת, היא "יודעת" באיזו שורה היא נמצאת ויכולה לגשת לערכים של עמודות אחרות באותה השורה בלבד.
    לכן, היא אידיאלית לחישובים כמו מחיר X כמות. היא לא מודעת לפילטרים שהמשתמש מפעיל בדוח.
  • הקשר סינון (Filter Context): זהו עולמו של המדד.
    הוא לא מודע לשורה ספציפית, אלא לכל הסינונים הפעילים כרגע בדוח – מה שהמשתמש בחר בכלי הפריסה (Slicers), על איזו עמודה בגרף הוא לחץ וכו'.
    המדד מבצע את החישוב שלו רק על תת-קבוצת הנתונים שעברה את כל הסינונים הללו. זו הסיבה שהוא דינמי ומשתנה עם כל לחיצה.

זו הסיבה שנוסחה אינטואיטיבית כמו זו, נכשלת:

TotalSum = SUM(Sales[Price] * Sales[Quantity])

SUM פועל בהקשר סינון, בעוד שהביטוי Sales[Price] * Sales[Quantity] דורש הקשר שורה.
כאן נכנסת SUMX (ופונקציות X אחרות) לתמונה, שמאפשרות למדד ליצור הקשר שורה זמני, ועליהן נלמד במאמר הבא.

אז מתי נשתמש במה? כלל האצבע

נשתמש בעמודה מחושבת כאשר:

  • החישוב צריך להתבצע שורה-שורה, והתוצאה היא ערך שמתאר את אותה השורה (למשל, מחיר כפול כמות, רווח לפריט, שרשור טקסטים).
  • נרצה להשתמש בתוצאה כציר לסינון, קיבוץ או מיון (למשל, לסנן לפי קבוצות רווח שיצרנו: 'גבוה', 'בינוני', 'נמוך').

נשתמש במדד כאשר:

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

טיפ זהב לסיום: שאלת האקסל

עדיין מתלבטים? שאלו את עצמכם את שלוש השאלות הבאות:

  • שאלת האקסל: אם הייתי עושה את זה באקסל, האם הייתי מוסיף עמודת עזר לטבלת הנתונים, או משתמש בנוסחת סיכום (SUMIF, SUMPRODUCT) בתא נפרד?
  • שאלת הסלייסר: האם אני צריך להשתמש בתוצאה הזו ככלי פריסה (Slicer) או כציר בגרף?
    אם התשובה היא "כן", התוצאה חייבת להיות בעמודה (מחושבת או מטבלת המקור).
  • שאלת הסיכום: האם התוצאה היא ערך בודד המתאר את השורה עצמה (כמו מחיר * כמות), או שהיא סיכום של שורות רבות (כמו סך הכל, ממוצע, ספירה)?
    אם היא מתארת שורה בודדת, היא מועמדת לעמודה. אם היא סיכום, היא כמעט תמיד צריכה להיות מדד.
דילוג לתוכן