אנא אפשר JavaScript כדי להשתמש בתכונות הנגישות תכונות נגישות של אתרים על ידי UserWay
top of page
Nissim Elaluf

Dangerous Bomb – “Referential integrity”…

עודכן: 24 בפבר׳ 2024



הי חברים


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


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


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


פצצה ששמה “Referential integrity”


=============================================================


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


מה ? מה? מה?


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


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


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


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


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


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


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


  1. טבלת מוצרים

  2. טבלת מכירות


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


משהו כזה





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




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


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


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


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




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


BOOM


למה ?


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


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


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


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


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


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


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


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


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


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






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


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


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


נתראה בהמשך

תגובות


bottom of page