שני עמודי דשבורד שכל מספר בהם מגיע ממדד שאתם כותבים מאפס, עם חיווי צבע אוטומטי
למצב המועדונים. עובדים על UCL_PowerBI_Model.xlsx — סכמת כוכב עם 32 טבלאות,
100,000 שורות ו-44 קשרים. 27 תרגילים, כל אחד בדף נפרד ועם פתרון מלא. שימו לב: ההורדה והתרגול
הם במחשב בלבד — Power BI Desktop אינו קיים בטלפון.
הנתונים סינתטיים. שמות המועדונים, האצטדיונים והערים אמיתיים, אבל כל שחקן,
תוצאה, שער וסכום בקובץ נוצרו באופן מלאכותי. אין להסיק מהם דבר על ליגת האלופות האמיתית — וכדאי
לומר את זה לכיתה במפורש, כי מישהו תמיד ינסה להצליב מול הזיכרון שלו.
לפני שמתחילים — בניית המודל. בקובץ 44 קשרים; המטלה נשענת על עשרה מהם.
הטבלה שבהמשך העמוד מפרטת אותם אחד-אחד. סמנו את Dim_Date כטבלת תאריכים (Mark as date table על
Full_Date), כבו Autodetect ובנו ידנית, וודאו שכל הקשרים בכיוון
Single מהמימד אל העובדה — בקובץ 11 טבלאות עובדה שחולקות מימדים, ו-Both
ייצור לולאה.
פער שאינו תקלה: ב-Dim_Date יש 4,383 תאריכים,
אבל טבלת המשחקים משתמשת רק ב-267 מהם, ורק ב-8 חודשים בשנה.
אין משחקים בינואר וביוני–אוגוסט — אלה חודשי הפגרה, וזה מה שמייצר את החורים בגרף הקו.
מילון סוגריים.Table[Column] = עמודה ·
[מדד] = סוגריים מרובעים בלי שם טבלה. לכל מדד: קליק ימני על
Fact_PlayerMatchStats בחלונית Data ← New measure ← הנוסחה ← Enter.
מבנה המטלה
חלק 1
14 מדדי DAX
עשרה מדדי בסיס — SUM, DISTINCTCOUNT, DIVIDE, שני CALCULATE, ALL, IF ושני SWITCH — ושלוש פונקציות חלון: RANK, INDEX ו-WINDOW.
חלק 2
שני עמודי דשבורד
ארבעה קארדים על מגש, גרף עמודות, גרף קו, סלייסר עונה, טבלת מועדונים, Top 10 קלעים, Matrix וגרף משולב.
חלק 3
עיצוב מותנה כפול
אותה חלוקה לשלוש שכבות בשתי טכניקות: Rules בתוך ויזואל אחד, ומדד SWITCH שמזין את הצבע לכל ויזואל.
כל המספרים אומתו ב-pandas מול הקובץ
1.1 · Total Goals — מדד הבסיס
צרו מדד בשם Total Goals שמסכם את Fact_PlayerMatchStats[Goals]. עצבו עם מפריד אלפים.
Total Goals = SUM ( Fact_PlayerMatchStats[Goals] )
יצירהקליק ימני על Fact_PlayerMatchStats ← New measure
בדיקהגררו לקארד ריק כדי לוודא שהמספר מופיע
המלכודת החשובה ביותר בקובץ הזה:SUM ( Fact_Matches[Total_Goals] ) מחזיר 3,051 ולא
2,970. ההפרש הוא 81 שערים עצמיים, שנזקפים לזכות
היריבה אבל אינם נרשמים לאף שחקן — בדיוק כמו בנתוני אמת. שני המספרים נכונים, הם פשוט עונים
על שתי שאלות שונות: "כמה שערים נכבשו במשחקים" מול "כמה שערים כבשו שחקנים". זה תרגיל מצוין
להראות למה חייבים להגדיר מדד לפני שמתווכחים על מספר.
תוצאה: 2,970 שערים — מספר העוגן של כל המטלה.
1.2 · Matches Played — כמה משחקים באמת
צרו מדד בשם Matches Played שסופר משחקים ייחודיים על בסיס Fact_PlayerMatchStats[Match_ID].
Matches Played = DISTINCTCOUNT ( Fact_PlayerMatchStats[Match_ID] )
למה לא COUNT:COUNT(Match_ID) היה מחזיר
50,799 — הוא סופר שורות שיש בהן ערך, לא ערכים ייחודיים. כל משחק מיוצג
ב-33 עד 34 שורות שחקן (סגל של שתי הקבוצות), ולכן 50,799 ÷
1,500 ≈ 33.9.
תוצאה: 1,500 משחקים.
1.3 · Goals per Match — עקרון הלגו
צרו מדד בשם Goals per Match — אך ורק משני המדדים הקיימים, בלי סימן החלוקה / ובלי AVERAGE. עצבו לשתי ספרות.
Goals per Match = DIVIDE ( [Total Goals], [Matches Played] )
ממוצע של מה:AVERAGE(Fact_PlayerMatchStats[Goals])
היה מחזיר 0.06 — ממוצע לשורת שחקן-משחק, לא למשחק. כשהמדד בנוי משני מדדים קיימים, המכנה
מוגדר במפורש ואתם יודעים בדיוק מה חילקתם. DIVIDE עדיף על / כי הוא מחזיר ריק
במקום שגיאה כשהמכנה אפס.
המדד מתגלגל אוטומטית לכל הקשר: גררו אותו לטבלת המועדונים והוא
יחזיר את הקצב של כל מועדון בנפרד — ראו את התובנה בתרגיל 2.4.
תוצאה: 1.98 שערים למשחק.
1.4 · Total Assists — המדד השני
צרו מדד בשם Total Assists שמסכם את Fact_PlayerMatchStats[Assists]. המדד משרת את הגרף המשולב בתרגיל 2.10.
Total Assists = SUM ( Fact_PlayerMatchStats[Assists] )
תוצאה: 9,169 בישולים (6.11 למשחק).
1.5 · Knockout Goals — CALCULATE ראשון
צרו מדד בשם Knockout Goals שמחזיר את השערים בשלבי הנוקאאוט בלבד, עם CALCULATE ותנאי על Dim_Stage[Stage_Type].
מה קורה כאן: CALCULATE מוסיפה את התנאי לבועת הסינון ורק אז
מריצה את [Total Goals]. הפילטר יושב על עמודת טקסט בטבלת המימד, זורם דרך הקשר
אל Fact_Matches ומשם אל 50,799 שורות העובדה — בלי שום JOIN.
תוצאה: 671 — 22.59% מכלל השערים. הפירוק לפי שלב: Final 20 · Group Stage 2,299 · Quarter-Final 189 · Round of 16 370 · Semi-Final 92
1.6 · Home Goals — CALCULATE על טבלת עובדות אחרת
צרו מדד בשם Home Goals שמחזיר את השערים של הקבוצה המארחת. שימו לב: ב-Fact_PlayerMatchStats אין עמודת בית/חוץ — היא ב-Fact_ClubMatchStats[Home_Away].
Home Goals =
CALCULATE (
SUM ( Fact_ClubMatchStats[Goals_For] ),
Fact_ClubMatchStats[Home_Away] = "Home"
)
למה לא על טבלת השחקנים: המידע פשוט לא קיים שם. הוא ב-
Fact_ClubMatchStats, שבה שורה לכל קבוצה בכל משחק. שני המדדים חיים תחת אותם
סלייסרים כי שתי הטבלאות מחוברות לאותם מימדים — וזה בדיוק מה שמודל כוכב טוב נותן.
יש כאן יתרון ביתיות אמיתי: 58.8% מהשערים למארחת,
ו-44.2% מהמשחקים הסתיימו בניצחון בית (תיקו 28.5%, ניצחון חוץ
27.3%).
בדיקת שפיות: 1,794 + 1,257 =
3,051. שימו לב שהשלם כאן הוא 3,051 ולא
2,970, כי טבלה זו כן כוללת שערים עצמיים.
תוצאה: 1,794 — 58.8% (חוץ: 1,257).
1.7 · % of Competition Goals — ALL משחררת את הפילטר
צרו מדד בשם % of Competition Goals: חלקו את [Total Goals] בסך שערי כל התחרות — CALCULATE שמסיר את הסינון מ-Dim_Club באמצעות ALL. עצבו כאחוז, שתי ספרות.
% of Competition Goals =
DIVIDE (
[Total Goals],
CALCULATE ( [Total Goals], ALL ( Dim_Club ) )
)
מה עושה ALL: המונה חי בבועה של השורה (מועדון אחד), והמכנה
משוחרר מסינון ולכן תמיד מחזיק את כל התחרות. בשורת ה-Total המונה כבר שווה למכנה — וזו
הבדיקה שהמדד נכתב נכון.
תוצאה: המועדון המוביל (Dynamo Kyiv) מחזיק 3.16% · שורת ה-Total מציגה 100.00%.
1.8 · Club Status — IF מול ממוצע התחרות
צרו מדד בשם Club Status שמחזיר טקסט: "מעל הממוצע" אם המועדון קלע 46 שערים או יותר, ואחרת "מתחת לממוצע".
Club Status =
IF ( [Total Goals] >= 46, "מעל הממוצע", "מתחת לממוצע" )
מאיפה 46: 2,970 ÷ 64 = 46.41 —
ממוצע השערים למועדון. המדד מחזיר טקסט ולכן מתאים לטבלה, לא לקארד מספרי.
שאלת בונוס: שלושה מועדונים עומדים על 46 שערים בדיוק. מי שיכתוב
> במקום >= יקבל 27 במקום 30 — בדיוק סוג הטעות ששווה לתפוס בשיעור.
הסדר קובע: SWITCH עוצר בתנאי הראשון שמתקיים. אם ≥ 40 ייכתב
ראשון, כל מועדוני הצמרת יסווגו "אמצע" והשכבה העליונה תישאר ריקה. הארגומנט האחרון, בלי
תנאי לפניו, הוא ברירת המחדל.
תוצאה: 12 "צמרת" · 31 "אמצע" · 21 "תחתית".
1.10 · Tier Color — SWITCH שמחזיר צבע
צרו מדד בשם Tier Color שמחזיר קוד HEX לפי [Club Tier]: צמרת #132449, אמצע #F5C518, ברירת מחדל #A9B4CC. כאן התבנית הרגילה של SWITCH, בלי TRUE().
שתי הצורות של SWITCH זו לצד זו: בתרגיל הקודם השתמשנו ב-TRUE()
כי התנאים הם השוואות טווח; כאן הביטוי הוא מדד טקסט והערכים הם התאמה מדויקת.
המלכודת הנפוצה: SWITCH משווה מחרוזות בהתאמה מדויקת. רווח אחד בסוף
מחרוזת ייכשל בשקט, בלי הודעת שגיאה, וכל המועדונים יקבלו את צבע ברירת המחדל. העתיקו את
המחרוזות מהמדד הקודם, אל תקלידו מחדש.
המדד לא מוצג בשום ויזואל — הוא משמש רק את העיצוב המותנה בתרגיל 3.2.
1.11 · Club Rank — RANK
צרו מדד בשם Club Rank שמדרג את המועדונים לפי [Total Goals] באמצעות RANK על ALL ( Dim_Club[Club_Name] ), עם ORDERBY בסדר יורד. דורש Power BI מגרסת 2023 ואילך.
Club Rank =
RANK ( ALL ( Dim_Club[Club_Name] ), ORDERBY ( [Total Goals], DESC ) )
מה עושה ALL: מוחקת את סינון השורה ומחזירה את כל 64 המועדונים
לרשימת המתמודדים — בלעדיה, בשורה של מועדון אחד יש מתמודד יחיד ואין את מי לדרג.
מה שונה מ-RANKX: ברירת המחדל של ORDERBY היא ASC, ולכן
בלי DESC המועדון החלש יקבל מקום 1 — ההפך מ-RANKX. בשורת ה-Total הפונקציה מחזירה
ריק, כי אין "שורה נוכחית" לאתר ברשימה.
תוצאה: Dynamo Kyiv = 1 · Lazio = 64.
1.12 · Leader Goals ו-% of Leader — INDEX
צרו מדד בשם Leader Goals שמחזיר בכל שורה את השערים של המועדון הראשון ברשימה — CALCULATE עם INDEX ( 1, … ). בונוס: מדד % of Leader — DIVIDE של המדד הבסיסי ב-[Leader Goals], כאחוז עם ספרה אחת.
ההיגיון של ארבעת המספרים:1, ABS = מתחילים במקום 1
המוחלט, ראש הרשימה · 0, REL = עוצרים 0 צעדים ממני, כלומר אצלי. אם תחליפו
ל-1, ABS ← 3, ABS תקבלו עמודה קבועה עם סכום שלושת הגדולים — מילה אחת הופכת חלון
נודד לחלון קבוע.
בדיקת שפיות מובנית: השורה האחרונה חייבת להיות בדיוק 2,970. אם לא, משהו בחלון שבור.
1.14 · Total Attendance — טבלת עובדות שלישית
צרו מדד בשם Total Attendance שמסכם את Fact_Matches[Attendance]. עצבו עם Display units = Millions ו-decimal places = 1.
Total Attendance = SUM ( Fact_Matches[Attendance] )
למה זה חשוב: המדד מוכיח שהמודל מחבר שלוש טבלאות עובדה תחת
אותם סלייסרים. בחרו עונה בסלייסר — שערים, בישולים וקהל יתעדכנו יחד.
שימו לב:Attendance_Pct בקובץ שמור כשבר (0.71–0.99).
עצבו אותו כאחוז ב-Power BI, אל תכפילו ב-100.
תוצאה: 68,442,087 צופים · ממוצע 45,628 למשחק.
2.1 · רקע, כותרת ומגש KPI
עמוד 1 של הדשבורד — רקע, כותרת ומגש שעליו יישבו הקארדים.
גווניםשלושה בלבד: נייבי #132449, זהב #F5C518 ואפור ניטרלי
רקעקליק על קנבס ריק ← Format your report page ← Canvas background ← גרסה בהירה מאוד של הנייבי ← Transparency = 0%
כותרתInsert ← Text box ← "ליגת האלופות — חדר המצב של התחרות"
מגשInsert ← Shapes ← Rectangle ← רצועה רוחבית ← Rounded corners ← Send to back
הצורה חייבת לשבת מתחת לקארדים. אם היא מכסה אותם — Format ← Arrange ← Send to back.
2.2 · תמונות — חיפוש והוספה
שני קבצי תמונה יהפכו את הדוח ממטלה לדוח שנראה מקצועי.
חיפושכדורגל או גביע ברקע שקוף — הוסיפו transparent PNG לחיפוש וסננו ב-Tools ← Color ← Transparent
גודלקובץ ברוחב 300px לפחות; קטן מדי ייראה מטושטש כשתמתחו אותו
יחסFormat image ← Scaling = Fit. שינוי גודל תמיד מפינה ולא מהצד
אל תשתמשו בלוגו של UEFA או של מועדון. אלה סימנים מסחריים רשומים, והנתונים בקובץ ממילא מומצאים — לוגו רשמי על נתונים מומצאים הוא בדיוק מה שאסור. השתמשו בתמונה גנרית מ-Unsplash או Pexels.
2.3 · ארבעת הקארדים — רק מדדים
בנו 4 קארדים מעל המגש, כל אחד מציג מדד שכתבתם. עצבו קארד אחד במלואו ואז שכפלו ×3 והחליפו את השדה.
Total Goals · Matches Played · Goals per Match · Total Attendance
ארבעת הקארדים והערכים המאומתים
קארד
המדד
ערך שיוצג
סך שערים
Total Goals
2,970
משחקים
Matches Played
1,500
שערים למשחק
Goals per Match
1.98
סך קהל
Total Attendance
68.4M
שתי מלכודות תצוגה: (1) Matches Played חייב
Display units = None, אחרת יוצג "1.5K" במקום "1,500". (2) בקארד הקהל קבעו
decimal places = 1 במפורש — בברירת המחדל Power BI בוחר לבד ומספר הספרות לא
יהיה אחיד מול שאר הקארדים.
יישרו: Ctrl+Click על ארבעתם ← Group ← Distribute horizontally ← Align top.
2.4 · גרף עמודות — שערים לפי מועדון
בנו Clustered column chart עם Dim_Club[Club_Name] בציר X ו-[Total Goals] בציר Y. מיון יורד, Data labels = On, ציר Y מ-0. 64 מועדונים הם הרבה — הוסיפו Top N = 20 בחלונית Filters.
X-axis = Dim_Club[Club_Name]
Y-axis = [Total Goals] ← המדד, לא העמודה
Sort = Total Goals, descending
שישה מובילים ושלושה אחרונים
#
מועדון
שערים
% מהתחרות
1
Dynamo Kyiv
94
3.16%
2
Liverpool FC
78
2.63%
3
Celtic FC
77
2.59%
4
Bologna FC
76
2.56%
5
AZ Alkmaar
72
2.42%
6
Arsenal FC
70
2.36%
62
Sevilla FC
20
0.67%
63
Athletic Club
16
0.54%
64
Lazio
13
0.44%
התובנה החשובה של הדשבורד — ומלכודת פרשנות קלאסית:
Dynamo Kyiv מובילה עם 94 שערים ו-Lazio סוגרת עם
13 — פער של פי 7.2. אבל גררו את
[Goals per Match] לאותה טבלה ותקבלו 1.08 מול 1.08 —
בדיוק אותו קצב. כל ההבדל הוא השתתפות: 87 משחקים מול 12,
כי לא כל מועדון עולה לתחרות בכל עונה (2 עד
10 עונות). זה בדיוק ההבדל בין מדד מצטבר למדד יחס, וזו הסיבה
שדשבורד עם סכומים בלבד יכול להטעות לחלוטין.
המוביל: Dynamo Kyiv — 94 שערים (3.16% מהתחרות).
2.5 · גרף קו — מגמת שערים לאורך הזמן
בנו Line chart עם Dim_Date[Full_Date] בציר X ו-[Total Goals] בציר Y. אם רואים 12 נקודות בלבד — לחצו על החץ המזלגי (Expand all down one level) עד רמת Month.
מה רואים: שיא בעונת 2020/21 עם
292 שערים, שפל ב-2022/23 עם 224.
ברמת החודשים: 8 חודשים עם משחקים בלבד, שיא ב-October
עם 777 שערים.
החורים בקו אמיתיים: שלב הבתים מרוכז בסתיו, ואין משחקים בפגרה.
העקומה החודשית אינה מעידה על "עונה חזקה" אלא על לוח המשחקים — וזו הסיבה שחייבים
Mark as date table.
שיא: 2020/21 עם 292 שערים.
2.6 · עמוד 2 וסלייסר העונה
פתחו עמוד שני בשם "זרקור מועדונים ושחקנים" עם אותו רקע ואותה משפחת צבע.
עמוד+ בתחתית ← שם: זרקור מועדונים ושחקנים ← אותו רקע קנבס — עקביות
סלייסרSlicer ← שדה Dim_Season[Season_Label] ← Format ← Slicer settings ← Style = Tile
עיצובמתחו לרוחב מתחת לכותרת · נבחר = הגוון הכהה, לא-נבחר = בהיר
בדקו שהסלייסר משפיע על כל הוויזואלים בעמוד. ויזואל שלא מגיב — כנראה בנוי על עמודה מ-Fact_Matches ולא מהמימד.
2.7 · טבלת המועדונים — כאן חיים IF ו-SWITCH
בנו Table עם Dim_Club[Club_Name] ושבעת המדדים: Club Rank, Total Goals, % of Competition Goals, % of Leader, Running Goals, Club Status ו-Club Tier. מיון יורד, Totals = Off.
ההבדל בין שני המדדים:Club Status משווה לממוצע
שמחושב מהדאטה (46.41), ו-Club Tier משווה לספים קבועים שאנחנו קבענו.
מועדון יכול להיות "מתחת לממוצע" ועדיין בשכבת "אמצע" — שני מדדים, שתי שאלות עסקיות שונות.
למה Totals = Off: פונקציות חלון מחזירות ריק בשורת הסיכום, כי אין
"שורה נוכחית" לאתר ברשימה.
בנו Clustered bar chart עם Dim_Player[Player_Name] בציר Y ו-[Total Goals] בציר X. בחלונית Filters: Filter type = Top N ← Show items: Top 10 ← By value = [Total Goals].
Y-axis = Dim_Player[Player_Name]
X-axis = [Total Goals]
Filter = Top N, 10, by [Total Goals]
עשרת הקלעים המובילים
#
שחקן
עמדה
שערים
1
Mateo Wagner
Second Striker
12
2
Alessio Sorensen
Left Winger
11
3
Andre Hoffmann
Centre Forward
11
4
Aaron Perrin
Left Winger
10
5
Idrissa Zlatko
Right Winger
10
6
Riccardo Escobar
Right Winger
10
7
Andres Rossi
Left Winger
9
8
Erik Peeters
Attacking Midfielder
9
9
Felix Marchetti
Right Winger
9
10
Minjun Brennan
Centre Forward
9
מקרה תיקו לשיעור: הערך במקום העשירי הוא
9 שערים, ו-5 שחקנים עומדים עליו בדיוק. פילטר Top N עם
ערכים זהים בגבול יחזיר יותר שורות מהצפוי — במצבי תיקו מוסיפים שובר-שוויון (למשל מיון משני
לפי בישולים או דקות משחק). זו התנהגות תקינה של Power BI, לא באג.
המוביל: Mateo Wagner (Second Striker) — 12 שערים.
2.9 · Matrix — מדינה × שלב בטורניר
בנו Matrix עם Dim_Country[Country] בשורות, Dim_Stage[Stage_Name] בעמודות ו-[Total Goals] בערכים. Style presets = Minimal · Cell elements ← Data bars = On.
זו התובנה של כל הדשבורד: חלוצים מחזיקים
52.5% מהשערים אבל רק 33.8% מהבישולים, בעוד הקשרים
הם ההפך — 37.8% מהשערים ו-50.4% מהבישולים. אותו
מודל, אותו ויזואל, שני מדדים, שני סיפורים.
שוערים עם 0 שערים: זו התנהגות נכונה ולא חור בדאטה.
בגרף עמודות רגיל הסדרה הזו הייתה נמעכת לתחתית — ולכן דווקא כאן שני צירים הם הבחירה
הנכונה, והכלל "אל תשתמשו בשני צירים" לא חל.
המובילה: Forward — 52.5% מהשערים.
2.11 · ניווט ופוליש
הוסיפו כפתורי ניווט בין שני העמודים והשלימו את הפוליש.
צבעו את טבלת המועדונים (תרגיל 2.7) בלי לכתוב אף חוק ביד — הצבע מגיע מהמדד Tier Color שכתבתם בתרגיל 1.10.
Format visual <- Cell elements
Series: Club Tier
Background color = On <- fx
Format style = Field value
What field should we base this on? = [Tier Color]
למה זה חזק יותר מ-Rules: החוקים בתרגיל 3.1 חיים בתוך ויזואל
אחד — שינוי סף מחייב תיקון בכל ויזואל בנפרד. המדד Tier Color הוא מקור אמת יחיד:
שינוי אחד בקוד ה-SWITCH מתעדכן בכל מקום שבו הוא משמש.
אם הטקסט לא נקרא על הרקע הכהה — הפעילו גם Font color
באותה דרך עם מדד צבע-טקסט משלכם.
שתי הטכניקות מייצרות בדיוק את אותה חלוקה: 12 / 31 / 21.
סיכום — כל התוצאות במקום אחד
טבלת אימות מרוכזת לכל 14 המדדים ולכל ויזואל במטלה. פתחו אותה רק אחרי שסיימתם — היא נותנת את כל התשובות.
כל התוצאות המאומתות במקום אחד
מדד / רכיב
תוצאה מאומתת
Total Goals
2,970
סך שערים ב-Fact_Matches (כולל עצמיים)
3,051 — הפרש של 81
Matches Played
1,500 (COUNT היה מחזיר 50,799)
Goals per Match
1.98
Total Assists
9,169 (6.11 למשחק)
Knockout Goals
671 (22.59%)
Home Goals
1,794 (58.8%) · חוץ 1,257
% of Competition Goals
מוביל 3.16% · Total 100.00%
Club Status (IF)
30 מעל · 34 מתחת · ממוצע 46.41
Club Tier (SWITCH)
12 צמרת · 31 אמצע · 21 תחתית
Club Rank (RANK)
Dynamo Kyiv = 1 · Lazio = 64
Leader Goals (INDEX)
94 בכל שורה · האחרון 13.8%
Running Goals (WINDOW)
שורה אחרונה = 2,970
Total Attendance
68,442,087 · ממוצע 45,628
המועדון המוביל
Dynamo Kyiv — 94 שערים ב-87 משחקים
מוביל הקליעה
Mateo Wagner — 12 שערים
עונת השיא
2020/21 — 292 שערים
גרף משולב
חלוצים 52.5% מהשערים · קשרים 50.4% מהבישולים
כל התוצאות אומתו ב-pandas מול UCL_PowerBI_Model.xlsx
(50,799 שורות עובדה), וכל 44 הקשרים נבדקו תכנותית — 0 מפתחות יתומים,
0 מפתחות ריקים, 0 תלויות מעגליות ו-0 נתיבי סינון כפולים.
אפשר לנווט גם בכפתורים שבראש המסך, בחצי המקלדת, ובטלפון בהחלקת אצבע