Power BI Cheat Sheet: דף עזר ל־DAX
עודכן לאחרונה
מידות, עמודות וטבלאות
מידה מחושבת לכל תא בפריט חזותי; עמודה מחושבת מחושבת פעם אחת לכל שורה ונשמרת.
| מה זה עושה | DAX |
|---|---|
| יצירת מידה | Total Sales = SUM ( Sales[Amount] ) |
| יצירת עמודה מחושבת (ערך אחד לכל שורה) | Line Total = Sales[Quantity] * Sales[Unit Price] |
| יצירת טבלה מחושבת | Top Customers = TOPN ( 10, Customer, [Total Sales] ) |
| הפניה לעמודה: שם הטבלה, ואחריו שם העמודה בסוגריים מרובעים | Sales[Amount] |
| עטיפה במירכאות של שם טבלה שיש בו רווח או שהוא מילה שמורה | 'Date'[Date] |
| הפניה למידה: סוגריים מרובעים בלבד | [Total Sales] |
| שימוש במידה בתוך מידה אחרת | Average Price = DIVIDE ( [Total Sales], [Total Units] ) |
פונקציות צבירה
כל אחת מהן מסכמת עמודה בהקשר הסינון הנוכחי.
| מה זה עושה | DAX |
|---|---|
| סכום של עמודה | SUM ( Sales[Amount] ) |
| ממוצע של עמודה | AVERAGE ( Sales[Amount] ) |
| הערך הקטן ביותר | MIN ( Sales[Order Date] ) |
| הערך הגדול ביותר | MAX ( Sales[Order Date] ) |
| ספירת השורות בטבלה | COUNTROWS ( Sales ) |
| ספירת הערכים שאינם ריקים בעמודה | COUNT ( Sales[Amount] ) |
| ספירת ערכים ייחודיים | DISTINCTCOUNT ( Sales[Customer Key] ) |
| חלוקה בטוחה: ריק במקום שגיאה כשהמכנה 0 | DIVIDE ( [Total Sales], [Total Units] ) |
| חלוקה עם ערך שיוצג כשהמכנה 0 | DIVIDE ( [Profit], [Total Sales], 0 ) |
איטרטורים (פונקציות X)
הן עוברות על טבלה שורה אחר שורה, מחשבות ביטוי לכל שורה ואז צוברות את התוצאות.
| מה זה עושה | DAX |
|---|---|
| הכפלה בכל שורה ואז סכום | SUMX ( Sales, Sales[Quantity] * Sales[Unit Price] ) |
| ממוצע של תוצאה לכל שורה | AVERAGEX ( Sales, Sales[Quantity] * Sales[Unit Price] ) |
| התוצאה הגדולה ביותר מבין השורות | MAXX ( Sales, Sales[Quantity] * Sales[Unit Price] ) |
| ממוצע של מידה לכל לקוח | AVERAGEX ( VALUES ( Customer[Customer Key] ), [Total Sales] ) |
| שימוש בעמודה מטבלה קשורה בתוך הביטוי | SUMX ( Sales, Sales[Quantity] * RELATED ( Product[Unit Cost] ) ) |
| ספירת השורות שעומדות בתנאי | COUNTROWS ( FILTER ( Sales, Sales[Quantity] >= 3 ) ) |
| דירוג כל המוצרים לפי מידה | RANKX ( ALL ( Product[Product] ), [Total Sales] ) |
| דירוג בלי פערים אחרי תיקו (1, 1, 2) | RANKX ( ALL ( Product[Product] ), [Total Sales], , DESC, DENSE ) |
| חיבור ערכים לטקסט אחד | CONCATENATEX ( VALUES ( Product[Category] ), Product[Category], ", " ) |
CALCULATE ופונקציות סינון
CALCULATE מחשבת ביטוי עם מסננים ששונו. מסנן על אותה עמודה מחליף את הקודם; מסננים על עמודות שונות מצטרפים ב־AND.
| מה זה עושה | DAX |
|---|---|
| סינון לפי ערך אחד | CALCULATE ( [Total Sales], Product[Category] = "Bikes" ) |
| סינון לפי רשימת ערכים | CALCULATE ( [Total Sales], Product[Color] IN { "Red", "Blue" } ) |
| שני מסננים (AND) | CALCULATE ( [Total Sales], Product[Color] = "Red", Store[Country] = "Spain" ) |
| OR על פני שתי עמודות | CALCULATE ( [Total Sales], FILTER ( ALL ( Product[Color], Product[Brand] ), Product[Color] = "Red" || Product[Brand] = "Contoso" ) ) |
| סינון לפי מידה | CALCULATE ( [Total Sales], FILTER ( VALUES ( Customer[Customer Key] ), [Total Sales] > 1000 ) ) |
| שמירה על המסנן הקיים וחיתוך איתו | CALCULATE ( [Total Sales], KEEPFILTERS ( Product[Color] IN { "Red", "Blue" } ) ) |
| הסרת המסננים מעמודה | CALCULATE ( [Total Sales], REMOVEFILTERS ( Product[Category] ) ) |
| הסרת כל המסננים מטבלה | CALCULATE ( [Total Sales], ALL ( Product ) ) |
| הסרת כל המסננים מטבלה חוץ מכמה עמודות | CALCULATE ( [Total Sales], ALLEXCEPT ( Store, Store[Country] ) ) |
| שמירה על הבחירה בכלי הפריסה, בלי השורות של הפריט החזותי עצמו | CALCULATE ( [Total Sales], ALLSELECTED ( Product[Category] ) ) |
| שימוש בקשר לא פעיל | CALCULATE ( [Total Sales], USERELATIONSHIP ( Sales[Ship Date], 'Date'[Date] ) ) |
| סינון בשני הכיוונים במידה אחת בלבד | CALCULATE ( COUNTROWS ( Customer ), CROSSFILTER ( Sales[Customer Key], Customer[Customer Key], BOTH ) ) |
| סינון לפי טבלה שאין איתה קשר | CALCULATE ( [Total Sales], TREATAS ( VALUES ( Budget[Category] ), Product[Category] ) ) |
בינת זמן
הפונקציות האלה צריכות טבלת תאריכים: שורה לכל יום, בלי פערים, מסומנת כטבלת תאריכים.
| מה זה עושה | DAX |
|---|---|
| מתחילת השנה | TOTALYTD ( [Total Sales], 'Date'[Date] ) |
| מתחילת השנה, בשנת כספים שמסתיימת ב־30 ביוני | TOTALYTD ( [Total Sales], 'Date'[Date], "6/30" ) |
| מתחילת השנה בתוך CALCULATE | CALCULATE ( [Total Sales], DATESYTD ( 'Date'[Date] ) ) |
| מתחילת הרבעון | TOTALQTD ( [Total Sales], 'Date'[Date] ) |
| מתחילת החודש | TOTALMTD ( [Total Sales], 'Date'[Date] ) |
| אותה תקופה בשנה שעברה | CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) |
| הזזת התאריכים במרווח (כאן חודש אחד אחורה) | CALCULATE ( [Total Sales], DATEADD ( 'Date'[Date], -1, MONTH ) ) |
| החודש הקודם כולו | CALCULATE ( [Total Sales], PREVIOUSMONTH ( 'Date'[Date] ) ) |
| התקופה כולה, שנה אחורה | CALCULATE ( [Total Sales], PARALLELPERIOD ( 'Date'[Date], -1, YEAR ) ) |
| 12 החודשים האחרונים עד התאריך הגלוי האחרון | CALCULATE ( [Total Sales], DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -12, MONTH ) ) |
| טווח תאריכים קבוע | CALCULATE ( [Total Sales], DATESBETWEEN ( 'Date'[Date], DATE ( 2025, 1, 1 ), DATE ( 2025, 3, 31 ) ) ) |
תבניות נפוצות של מידות
העתיקו, ואז שנו את שמות הטבלאות והעמודות כך שיתאימו למודל שלכם.
| מה זה עושה | DAX |
|---|---|
| אחוז מכל הקטגוריות | Category % = DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], REMOVEFILTERS ( Product[Category] ) ) ) |
| אחוז ממה שכלי הפריסה משאירים | Visible % = DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], ALLSELECTED ( Product[Category] ) ) ) |
| צמיחה משנה לשנה | YoY % = VAR LastYear = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) RETURN DIVIDE ( [Total Sales] - LastYear, LastYear ) |
| סכום מצטבר על פני כל הזמן | Running Total = CALCULATE ( [Total Sales], FILTER ( ALL ( 'Date'[Date] ), 'Date'[Date] <= MAX ( 'Date'[Date] ) ) ) |
| ממוצע נע של 7 ימים (לכל יום עם מכירות) | Sales 7 Day Avg = AVERAGEX ( DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -7, DAY ), [Total Sales] ) |
| הצגת ערך רק ל־5 המובילים | Top 5 Sales = IF ( RANKX ( ALLSELECTED ( Product[Product] ), [Total Sales] ) <= 5, [Total Sales] ) |
| ספירת לקוחות מעל סף | Big Customers = COUNTROWS ( FILTER ( VALUES ( Customer[Customer Key] ), [Total Sales] > 1000 ) ) |
| סך כולל ששווה לסכום השורות שלו | Bonus Total = SUMX ( VALUES ( Product[Category] ), [Bonus] ) |
| הצגת ערך רק ברמה אחת של מטריצה | Category Rank = IF ( ISINSCOPE ( Product[Category] ), RANKX ( ALL ( Product[Category] ), [Total Sales] ) ) |
| יתרת סגירה: התאריך האחרון שיש בו ערך | Closing Units = CALCULATE ( SUM ( Inventory[Units] ), LASTNONBLANK ( 'Date'[Date], CALCULATE ( SUM ( Inventory[Units] ) ) ) ) |
פונקציות לוגיות ופונקציות מידע
לתנאים, ולבדיקה של מה שנמצא בהקשר הסינון.
| מה זה עושה | DAX |
|---|---|
| תנאי אחד | IF ( [Total Sales] > 1000, "High", "Low" ) |
| כמה ערכים של ביטוי אחד | SWITCH ( Store[Country], "Spain", "ES", "Portugal", "PT", "Other" ) |
| טווחים, נבדקים מלמעלה למטה | SWITCH ( TRUE (), [Total Sales] >= 10000, "A", [Total Sales] >= 1000, "B", "C" ) |
| AND ו־OR | IF ( Sales[Quantity] > 2 && Sales[Amount] > 50, "Big", "Small" ) |
| האם הערך ריק? | ISBLANK ( [Total Sales] ) |
| הערך הראשון שאינו ריק | COALESCE ( [Total Sales], 0 ) |
| האם המסנן משאיר בדיוק ערך אחד? | HASONEVALUE ( Product[Category] ) |
| הערך היחיד הזה, או ברירת מחדל | SELECTEDVALUE ( Product[Category], "All categories" ) |
| האם השורה הזו בפריט החזותי מקובצת לפי העמודה? | ISINSCOPE ( Product[Category] ) |
| החזרת ערך ריק | BLANK () |
פונקציות טקסט
האופרטור & מחבר טקסט; FORMAT הופכת מספר או תאריך לטקסט.
| מה זה עושה | DAX |
|---|---|
| חיבור טקסט | Customer[First Name] & " " & Customer[Last Name] |
| עיצוב מספר | FORMAT ( [Total Sales], "#,0.00" ) |
| עיצוב תאריך | FORMAT ( 'Date'[Date], "mmm yyyy" ) |
| התווים הראשונים | LEFT ( Product[Code], 3 ) |
| תווים ממיקום מסוים | MID ( Product[Code], 4, 2 ) |
| אורך | LEN ( Product[Name] ) |
| אותיות גדולות | UPPER ( Store[City] ) |
| הסרת רווחים מיותרים | TRIM ( Customer[Name] ) |
| החלפת טקסט | SUBSTITUTE ( Customer[Phone], " ", "" ) |
| המיקום של טקסט, בלי הבחנה בין אותיות גדולות לקטנות (0 כשהוא לא נמצא) | SEARCH ( "pro", Product[Name], 1, 0 ) |
פונקציות תאריך
מאחורי הקלעים תאריכים הם מספרים, ולכן אפשר לחסר אותם ולקבל ימים.
| מה זה עושה | DAX |
|---|---|
| התאריך של היום | TODAY () |
| בניית תאריך | DATE ( 2025, 12, 31 ) |
| השנה של תאריך | YEAR ( 'Date'[Date] ) |
| מספר החודש | MONTH ( 'Date'[Date] ) |
| היום בשבוע, כשיום שני הוא 1 | WEEKDAY ( 'Date'[Date], 2 ) |
| מספר השבוע, כשהשבוע מתחיל ביום שני | WEEKNUM ( 'Date'[Date], 2 ) |
| היום האחרון בחודש | EOMONTH ( 'Date'[Date], 0 ) |
| אותו יום, חודש קודם | EDATE ( 'Date'[Date], -1 ) |
| מספר הימים בין שני תאריכים | DATEDIFF ( Sales[Order Date], Sales[Ship Date], DAY ) |
| טבלת תאריכים מתאריכים קבועים | CALENDAR ( DATE ( 2024, 1, 1 ), DATE ( 2025, 12, 31 ) ) |
| טבלת תאריכים מהתאריכים שבמודל | CALENDARAUTO () |
קשרים וחיפושים
RELATED עוקבת אחרי קשר מהצד של הרבים אל הצד של האחד.
| מה זה עושה | DAX |
|---|---|
| ערך מהצד של האחד (בעמודה בטבלה Sales) | RELATED ( Product[Category] ) |
| השורות בצד של הרבים ששייכות לשורה הנוכחית (בעמודה בטבלה Customer) | COUNTROWS ( RELATEDTABLE ( Sales ) ) |
| חיפוש ערך בלי קשר | LOOKUPVALUE ( Product[Price], Product[SKU], Sales[SKU] ) |
| נתיב הורה וילד (להיררכיות ולאבטחה ברמת השורה) | PATH ( Employee[Employee ID], Employee[Manager ID] ) |
| המשתמש המחובר, לאבטחה דינמית ברמת השורה | USERPRINCIPALNAME () |
פונקציות טבלה
הן מחזירות טבלאות: השתמשו בהן בטבלה מחושבת, בתוך CALCULATE או באיטרטור.
| מה זה עושה | DAX |
|---|---|
| ערכים ייחודיים במסנן הנוכחי | VALUES ( Product[Category] ) |
| שורות שעומדות בתנאי | FILTER ( Product, Product[Price] > 100 ) |
| N השורות המובילות לפי מידה | TOPN ( 5, ALL ( Product[Product] ), [Total Sales] ) |
| קיבוץ לפי עמודות והוספת מידות | SUMMARIZECOLUMNS ( Product[Category], "Sales", [Total Sales] ) |
| הוספת עמודה לטבלה | ADDCOLUMNS ( VALUES ( Product[Category] ), "Sales", [Total Sales] ) |
| בחירת עמודות ושינוי השמות שלהן | SELECTCOLUMNS ( Customer, "Name", Customer[Name], "City", Customer[City] ) |
| רשימת מספרים | GENERATESERIES ( 1, 10, 1 ) |
| כל הצירופים של שתי טבלאות | CROSSJOIN ( VALUES ( 'Date'[Year] ), VALUES ( Product[Category] ) ) |
| הערמת שתי טבלאות עם אותן עמודות | UNION ( 'Sales 2024', 'Sales 2025' ) |
משתנים
VAR נותן שם לשלב ומחשב אותו פעם אחת; RETURN מחזיר את התוצאה.
| מה זה עושה | DAX |
|---|---|
| משתנה אחד | Margin % = VAR Revenue = [Total Sales] RETURN DIVIDE ( Revenue - [Total Cost], Revenue ) |
| כמה משתנים | Sales vs LY = VAR CY = [Total Sales] VAR PY = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) RETURN CY - PY |
| טבלה בתוך משתנה | Top 5 Total = VAR Top5 = TOPN ( 5, ALL ( Product[Product] ), [Total Sales] ) RETURN CALCULATE ( [Total Sales], Top5 ) |
צעדים ב־Power Query (M)
Power Query מעצב את הנתונים לפני הטעינה. אלה נוסחאות ה־M שמאחורי הלחצנים הנפוצים.
| מה זה עושה | M |
|---|---|
| שמירה על השורות המתאימות | Table.SelectRows(Source, each [Status] = "Paid") |
| הסרת עמודות | Table.RemoveColumns(Source, {"Notes", "Temp"}) |
| הגדרת סוגי עמודות | Table.TransformColumnTypes(Source, {{"Amount", type number}, {"Date", type date}}) |
| שינוי שם של עמודה | Table.RenameColumns(Source, {{"amt", "Amount"}}) |
| הוספת עמודה | Table.AddColumn(Source, "Total", each [Quantity] * [Price], type number) |
| מיזוג (צירוף) של שתי שאילתות | Table.NestedJoin(Sales, {"ProductID"}, Products, {"ProductID"}, "Product", JoinKind.LeftOuter) |
| הוספה (הערמה) של שאילתות | Table.Combine({Sales2024, Sales2025}) |
| ביטול ציר של עמודות לשורות | Table.UnpivotOtherColumns(Source, {"Product"}, "Month", "Amount") |
| קיבוץ וצבירה | Table.Group(Source, {"Category"}, {{"Sales", each List.Sum([Amount]), type number}}) |
| החלפת שגיאות בערך | Table.ReplaceErrorValues(Source, {{"Amount", 0}}) |
דף העזר הזה ל־Power BI מרכז בעמוד אחד את ה־DAX שכותבים הכי הרבה: צבירות, איטרטורי X, CALCULATE והפונקציות שמשנות מסננים, בינת זמן, פונקציות טקסט ותאריך, ותבניות של מידות שאפשר להעתיק, כמו אחוז מהסך הכול, צמיחה משנה לשנה וסכום מצטבר.
הדוגמאות משתמשות במודל מכירות עם הטבלאות Sales, Product, Customer ו־'Date'; שנו את השמות כך שיתאימו למודל שלכם. כל ה־DAX כאן נותח במנוע של קורס Power BI של Coddy, שבו כותבים אותו בסביבת עבודה של Power BI בדפדפן ומקבלים עליו בדיקה.
שאלות נפוצות על דף העזר של Power BI
האם דף העזר הזה ל־Power BI בחינם?
כן. קראו אותו כאן או שמרו אותו במועדפים; אין צורך בהרשמה.
מה ההבדל בין מידה לעמודה מחושבת?
עמודה מחושבת מחושבת פעם אחת לכל שורה בזמן הרענון ונשמרת, ולכן אפשר לפלח לפיה. מידה מחושבת לכל תא בפריט חזותי, לפי המסננים של אותו תא, ולא שומרת כלום. סכומים ויחסים שייכים למידות.
מה CALCULATE עושה?
היא מחשבת ביטוי עם מסננים ששונו: מוסיפה, מחליפה או מסירה מסננים, ואז מחשבת את התוצאה. רוב ה־DAX שמעבר לסכומים פשוטים הוא CALCULATE עם ארגומנטי הסינון הנכונים.
למה להשתמש ב־DIVIDE ולא באופרטור /?
DIVIDE מחזירה ערך ריק (או ערך שתבחרו) כשהמכנה אפס או ריק. האופרטור / מחזיר במקום זה אינסוף או ערך שגיאה, וזה מופיע בפריטים החזותיים.צריך טבלת תאריכים בשביל בינת זמן?
TOTALYTD ו־SAMEPERIODLASTYEAR צריכות טבלה עם שורה לכל יום, בלי פערים ועם שנים שלמות, שקשורה לטבלאות העובדות ומסומנת כטבלת תאריכים.ה־DAX הזה עובד גם ב־Power Pivot של Excel וב־Analysis Services?
שפת DAX משותפת, ולכן כמעט כל מה שכאן עובד גם שם. כמה פונקציות חדשות יותר מגיעות קודם ל־Power BI.
איפה אפשר לתרגל DAX?
בקורס Power BI של Coddy: כל שיעור פותח לכם סביבת עבודה של Power BI בדפדפן ובודק את המידה שלכם מול הנתונים של השיעור ומול עותקים נסתרים שלהם.