קשרים

נושאים

עקבו אחרינו

קשרים קשרים קשרים,

הם יכולים לגרום להרבה בלאגן ולשגע אותנו במידה ולא משתמשים בהם כמו שצריך…

אז מה זה קשרים ולמה זה חשוב לנו לנהל במודל אותם כמו שצריך?

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

למה צריך קשרים?

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

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

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

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

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

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

  1. טבלת מכירות
  2. טבלת מוצרים
  3. טבלת לקוחות
  4. טבלת סוכנים

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

לרוב, בצד אחד של הקשר ימצאו ערכים ייחודיים ואילו בצידו השני של הקשר ימצאו ערכים שחוזרים על עצמם.

כך זה נראה בתוך ה POWER BI:

נוכל לראות מה היחס בין שתי הטבלאות ומי מפלטר את מי :

כל המוצרים בטבלת המוצר הינם ייחודיים (מסומן בסיפרה 1 בתרשים) ואילו המוצרים בטבלת המכירות חוזרים כל עצמם כמה פעמים (לפי הסימן כוכבית *)  – כלומר כל מוצר נמכר כמה פעמים לפחות.

סימן החץ (בצהוב) מסמל את כיוון הפילטור של המידע. נפרט בהמשך את משמעות כיוון הפילטור.

אם נלחץ פעמיים על הקשר ביניהם יפתח לנו חלון ובו הפירוט של הקשר בין שתי הטבלאות

Cross filter direction

אחד דברים החשובים שיש לשים לב בהתווית קשרים טבלאות הוא כיוון הפילטר – Cross Filter Direction (מספר 3 בצילום הנ"ל).

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

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

מה זה אומר? זה אומר שאם נשים על גבי גרף/טבלה בדוח עמודה מטבלת המוצרים – לדוגמא, את ה Service_Code וגם מדד שסופר שורות שמבוסס על טבלת המכירות אז נקבל תוצאה הגיונית.

לשם החידוד אם נעשה הפוך – נשים על גבי גרף/טבלה את ה Service_Code (מטבלת מכירות) ונספר שורות מטבלת המוצרים אז נקבל תוצאה לא הגיונית עם מריחה של המספרים על פני המוצרים השונים.

אז הכלל הוא פשוט – תמיד נשאף לבנות מדדים על בסיס טבלאות מסוג FACT ואת המידע בדוח מציגים בהצלבה עם עמודות מטבלאות ה DIM.

Cardinality

המשמעות של אפשרות זו היא היחס בין שתי הטבלאות. האפשרויות הן:

  1. אחד לאחד – כאשר מופיעים הערכים בצורה ייחודית בשתי הטבלאות
  2. אחד לרבים – כאשר מופיעים הערכים בצורה ייחודית בטבלה אחת ואילו בטבלה השניה הערכים חוזרים על עצמם.
  3. רבים לרבים – כאשר הערכים חוזרים על עצמם בשתי הטבלאות.

המינוחים המקובלים לשתי סוגי העמודות שנקשר בינהן:
Primary Key – PK זוהי עמודה ובה קיימים ערכים ייחודים בלבד.  

Foreign Key – FK בעמודה זו נמצא המפתח הנ"ל אך בצורה שחוזרת על עצמה

 

עריכת קשרים קיימים באמצעות מדדים

אני חייב לציין שקשרים בין הטבלאות הוא אינו דבר מוחלט וגזירה משמים.

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

  1. USERELATIONSHIP
  2. CROSSFILTER
  3. TREATAS

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