דלג לתוכן הראשי
DataFusion
הנדסת נתונים

Referential Integrity: הפצצה המסוכנת במסד הנתונים

יצרתם סכמת כוכב ? שימו לב יכול להיות שהכל נראה פצצה אבל יכול להתפוצץ לנו בהמשך ...

נכתב על ידי ניסים אלאלוף1 בינואר 20245 דקות קריאה

הי חברים

יצא לכם לבנות מודל בPower Bi

יצרתם סכמת כוכב ? שימו לב יכול להיות שהכל נראה פצצה אבל יכול להתפוצץ לנו בהמשך ...

היום ננסה להבין קצת בפצצות וללמוד איך לנטרל אחת

פצצה ששמה "Referential integrity"

טוב אז נתחיל במילים פשוטות כמו שאנו אוהבים "referential integrity" זה בעצם בעברית "שלמות הפנייה"

מה ? מה? מה?

מי פונה בכלל למי? ולמה זה צריך להיות מושלם ?!

זוכרים את המאמר על בניית מודל ? – לינק לסקרנים ...

אז דיברנו על קשרי גומלין בין טבלאות, קשרי יחיד לרבים ועוד

PBI נותן לנו את כל האפשרויות כמעט בבניית המודל אך לעיתים אנו יכולים לטמון לעצמינו פח.

**בואו נתחיל בדוגמה **

יש לי אתר מכירות ייחודי

בבסיס הנתונים יש לי 2 טבלאות מאוד חשובות

משהו כזה

תמונהתמונה

2 טבלאות בסיסיות

כעת מה תהיה התוצאה אם נחשב את כמות המוצרים הייחודית מטבלת המוצרים ?

תמונהתמונה

תוצאה של המדד הפשוט - לא מפתיע לעת עתה

נכון - התוצאה הלא מפתיעה היא 3

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

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

תמונהתמונה

אותו מדד שכתבנו למרות שאנו כותבים בפירוש לספור ערכים ייחודיים בטבלת המוצרים יחזיר לנו כעת 4!!!

**BOOM **

למה ?

אנו יודעים שכל מפתח בצד של טבלת הרבים (מכירות) צריך התאמה בצד היחיד (מוצרים), המכירה החדשה של מוצר עם קוד 4 הינה ללא התאמה,

Pbi  רוצה לפצות על כך ופשוט מוסיף שורה ריקה "Blank" בטבלת המוצרים ש"תתאים" לכל הערכים של קוד מוצר בטבלת המכירות שאין להם התאמה

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

הבעיה שלא ניתן לראות את השורה הזו ולא תדעו שהיא בכלל קיימת!

התוצאות של מדדים רבים שתעשו יצאו שגויים.

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

אז איך בודקים ומפקחים על זה?

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

באמצעות הפונקציות EXCEPT ו- List.RemoveMatchingItems, בהתאמה.

להלן הבדיקה בDAX

תמונהתמונה

DAX SLN

בתוצאה אנו נקבל טבלה ונקווה שהיא תחזור ריקה 😊

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

מקווה שנתתי ערך

נתראה בהמשך

הנדסת נתונים

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

נתכנן יחד ארכיטקטורת נתונים שמתרחבת עם הארגון.