פרק בניתוח מערכות DWH

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

 

ההגדרה הפשוטה ביותר של SCD :

 

SCD היא טבלת Dimension השומרת היסטוריה

בואו נדגים את הנושא באמצעות מודל פשוט.

לפנינו טבלת Fact המתארת מכירות בחברת מוצרי צריכה.

Fact_Sales

המכילה את השדות הבאים:

Sales_Date- תאריך המכירה

Agent_id- קוד סוכן המכירות

Product_Id- קוד מוצר נמכר

Quantity- מספר פריטים שנמכרו

total- סה"כ סכום המכירה

את שדה ה Agent_Id , מפענחת טבלת המימד, Dim_Agents, המכילה את  השדות הבאים:

Agent_id- קוד סוכן המכירות

Agent_name-שם הסוכן

Agent_Region- אזור מכירה

 בואו נראה, ערכים לדוגמא: ) נתמקד בסוכן מספר 1)

Fact_Sales

total

Quantity

Product_id

Agent_id

Sales_date

1000

5

2

1

1/1/2010

900

10

5

1

1/2/2010

1300

20

7

1

7/9/2010

3000

15

9

1

5/1/2011

9000

10

12

1

1/2/2011

1200

6

17

1

5/3/2011

 

Dim_Agents

Agent_Region

Agent_Name

Agent_id

South

John Smith

1

 

כעת אם נרצה, למצוא את סכום המכירה לפי אזור, נשתמש בטבלת הdim_agents כדי למצוא את האזור. SQL, לדוגמא:

Select sum(total), agent_region
From fact_sales,dim_agents
Where fact_sales.agent_id=dim_agents.agent_id
Group by agent_region

נקבל

South    16400

כעת, בוצע שינוי ארגוני ובתאריך 1/1/2011, סוכננו היקר עבר מאזור South לאזור North, כמובן שטבלת הDim השתנתה והיא כעת:

Agent_Region

Agent_Name

Agent_id

North

John Smith

1

 

במידה ונריץ את הSQL שוב, נקבל הפעם

North    16400

וכאן בעצם טמונה הבעיה. המכירות שבוצעו לפני 1/1/2011, אשר צריכות להיות משויכות לSouth, ישויכו לNorth מאחר וNorth הוא האזור הנוכחי של agent 1.

אחת מהדרכים הנפוצות ביותר לפתור בעיה זאת הוא השימוש בScd (Slowly Changing Dimensions)

ישנם מספר סוגים של SCD`s, הנפוץ מבניהם, נקרא SCD Type2, ובו נתמקד. הרעיון הוא פשוט:

נבחר תכונה או תכונות במימד (במקרה זה, Agent_Region) ונתעד כל שינוי בתכונה בצירוף התאריכים מ\עד.

לדוגמא, לטבלה המימד, dim_agents, ניצור טבלה נוספת, scd_agents המתארת את השינוי המדובר. השדות של טבלה זאת יהיו:

Agent_id קוד סוכן המכירות

Agent_region אזור מכירה

Date_from תאריך מ  שבו התכונה התקיימה. הרשומה הראשונה תכיל את התאריך המינימלי בFact או לשם פשוט, תאריך נמוך בצורה קיצונית, למשל 1.1.1911

Date_to תאריך עד שבו התכונה התקיימה. הרשומה האחרונה, תכיל תאריך גבוה בצורה קיצונית, למשל 1.1.9999

Is_Current שדה זה הוא שדה כן\לא המתאר האם הרשומה המסוימת היא הרשומה האחרונה לagent

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

Is_Current

Date_to

Date_from

Agent_region

Agent_id

0

1/1/2011

1/1/1911

south

1

1

1/1/9999

1/1/2011

north

1

 

חיבור לFact Table

כדי לחבר את הטבלה החדשה שיצרנו ל Fact Table, יש למצוא לכל agent_id בטבלת הFact את המקביל לו בטבלת הSCD ואשר התאריך  בטבלת הfact נופל בין התאריכים בטבלת הSCD.(זאת הסיבה המדויקת מדוע בחרנו לאכלס את התאריכים בטבלת הSCD בתאריכי קיצון.) נראה את הSQL לדוגמא:

Select sum(total), agent_region
From fact_sales,scd_agents
Where fact_sales.agent_id=scd_agents.agent_id and fact_sales.sales_date  between scd_agents.date_from and scd_agents.date_to
Group by agent_region

 

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

לאחר ההרצה, נקבל את התוצאה הבאה:

 South 3200

North 13200

הצלחנו לפתור את הבעיה, שכן המכירות לפני 1/1/2011 שויכו לSouth, בעוד המכירות לאחר 1/1/2011 שויכו לNorth.

 

חלק 2 של המאמר בכתובת הזאת.

 

חדשות dwh.co.il

BI&BigData

07 אפריל 2020

bi\dwh in israel

רשימת קורסים

קורס ה Bo Designer Master הוא קורס ייחודי שפותח בא ...
קורס ה SQL Wiz הוא קורס מיוחד המלמד חסר נסיון בSQL ...
בקורס זה אנו נלמד כיצד לפתח דוחות באמצעות הWebinte ...
בקורס זה אנו נלמד כיצד לפתח דוחות באמצעות הWebinte ...
הSDK של הקליינט של הBusiness Objects מרחיב את האפש ...
קורס ה Deski\Client-Business Objects, נועד לאפשר פ ...
בסדנא זאת, אנו נלמד על כלים מיוחדים עבור הDesigner ...
תנו לנו לייק לקבלת עדכונים שוטפים