PracticU

יצירת Dimension של תאריך

בלי כתוביותעם כתוביות
PracticU › קורס SSIS › יצירת Dimension של תאריך
מילון מושגים:
מחסן נתונים - מסד נתונים מרכזי שמרכז נתונים ממקורות שונים לצורך ניתוח ודיווח, ולא לתפעול שוטף.
שאילתה - בקשה למסד נתונים לשלוף, להוסיף, לעדכן או למחוק נתונים, לרוב בשפת SQL.
טבלה - מבנה במסד נתונים שמאחסן נתונים בשורות ועמודות. כל שורה היא רשומה וכל עמודה היא שדה.
Northwind - מסד נתונים לדוגמה של מיקרוסופט, המדמה חברת מסחר ומשמש ללימוד ולהדגמת שאילתות SQL.
עמודה - שדה בטבלת מסד נתונים שמחזיק ערך מסוג מסוים עבור כל שורה, למשל שם או תאריך.
סקריפט - קובץ המכיל רצף פקודות שמבוצעות על ידי מפרש, לרוב כדי להפוך משימות לאוטומטיות.
ETL - תהליך של חילוץ נתונים ממקורות, עיבודם והטענתם ליעד כמו מחסן נתונים (Extract, Transform, Load).
Join - פעולת SQL שמשלבת שורות משתי טבלאות או יותר על בסיס קשר ביניהן.

יצירת Dimension של תאריך
בהרצאה בונים טבלת Dimension של תאריכים ל-Data Warehouse, כזו שמאפשרת לשלוף כל תאריך בכל פורמט או פילוח בלי חישובים בזמן השאילתה.
מה צריך להחליט לפני הבנייה
1. רזולוציה: שורה בטבלה מייצגת את היחידה הקטנה ביותר שרוצים לנתח, ימים, שבועות, חודשים, שעות או שניות. ההחלטה נעשית ברמת החברה, ותלויה בדאטה. במערכת התפעולית Northwind שדה OrderDate בטבלת Orders הוא ברמת יום, ולכן נשארים ברזולוציה של יום.
2. טווח: מחליטים מאיזה תאריך עד איזה תאריך הטבלה מכילה.
השלבים העיקריים
1. מפתח: Surrogate Key מסוג int, עם identity, כמפתח הטבלה ובלי null.
2. התאריך עצמו: עמודת Date מסוג datetime.
3. פורמטים כמחרוזת: FullDateUK (יום, חודש, שנה) ו-FullDateUSA (חודש, יום, שנה), כל אחד כ-char(10).
4. פילוח לפי חודש: MonthNum כ-int ו-MonthName כ-varchar.
5. פילוח לפי שנה ושבוע: YearNum כ-int, DayOfYear, DayOfWeekNum מספרי ו-DayOfWeekName כמחרוזת (varchar(10)), ו-DayOfMonth.
6. פילוח לפי רבעון ושבוע בחודש: QuarterNum, DayOfQuarter ו-WeekOfMonth, מספרים שלמים.
7. פורמט נוסף: עמודה נוספת לפורמט של חודש ושנה, כ-char של שישה תווים.
8. יצירת הטבלה: מריצים את הסקריפט והטבלה נוצרת. אפשר להוסיף עוד עמודות ופורמטים בלי הגבלה, ובלבד שכל שורה מייצגת יום אחד במספר אופנים.
9. תוכנית המילוי: משתנה @d מסוג datetime שמתחיל בתאריך ההתחלה, startdate ו-enddate, ולולאת while שמכניסה שורה בכל סיבוב (insert into הטבלה) ומקדמת יום. פרטי המילוי יתבצעו בהרצאה הבאה.
שימו לב
1. תהליכי ETL עתידיים יוודאו שהתאריך החדש קיים בטבלה, ואם לא, יכניסו אותו.
2. העמודות הרבות נועדו לתת מענה לכל join מטבלת fact או לכל שאילתה ממערכת ה-BI, בלי מניפולציה.
אחרי ההרצאה אפשר לתכנן ולהגדיר טבלת Dimension של תאריכים עם רזולוציה ופורמטים מתאימים.
השיעור הבא בקורס: מילוי ערכים בטבלת Dimension

פרקי ההרצאה: יצירת Dimension של תאריך

  1. 00:00

    טבלת Dimension לתאריכים

  2. 00:38

    בחירת רזולוציית הזמן

  3. 01:31

    רזולוציית יום לפי Northwind

  4. 02:23

    הגדרת Surrogate Key לטבלה

  5. 03:01

    פורמטים שונים של התאריך

  6. 03:39

    עמודות חודש ויום בשבוע

  7. 04:34

    רבעון ושבוע בחודש

  8. 05:08

    יום בשנה ויום ברבעון

תמלול ההרצאה: יצירת Dimension של תאריך

הטקסט המלא של הדקות הראשונות בהרצאה «יצירת Dimension של תאריך» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    לאחר שיצרנו בשיעורים הקודמים את שלושת הטבלאות Dimensions של Customer, Employee ו-Product, ניצור היום Dimensions נוסף, הוא Dimensions מנדטורי בהרבה מאוד המערכות של Data Warehouse.

  2. 00:14

    עליו דיברנו בשיעורים הקודמים, זה ה-Dimensions שמכיל לנו את התאריכים, Dates. כדי ליצור זאת, אז מדובר בעצם שוב בטבלה, שבטבלה בעצם אנחנו רוצים לתת אוסף של כל התאריכים שרלוונטיים לנו לתוך ה-Database.

  3. 00:29

    בטבלה הזאת אנחנו פשוט נותנים את כל התאריכים row by row. כל שורה מייצגת את הרזולוציה הקטנה ביותר של התאריכים שאותם אנחנו רוצים להציג ואיתם אנחנו רוצים לעבוד ב-data warehouse.

  4. 00:43

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

  5. 01:03

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

  6. 01:25

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

  7. 01:41

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

  8. 01:57

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

  9. 02:19

    של חודש וכו' וכו'. תחילתו של כל טבלה, כמו שאנחנו מכירים בעבודה עם Dimensions, אז אנחנו יוצרים את ה-Surgate Key, במקרה הזה הוא יכול להיות int, אבל הוא המפתח של הטבלה, אנחנו ניצור אותו כאידנטיטי ונציין עליו שהוא באמת המפתח של

  10. 02:36

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

  11. 03:01

    למשל, יכול להיות שישאלו אותנו את התאריך בפורמט של מחרוזת, אז בואו נעשה את זה full-date time באזור לפי uk בפורמט שעובדים איתו ב-uk, ואותו אנחנו נציין על ידי char 10 וזה יהיה בעצם date in ddmm format.

  12. 03:21

    כלומר אנחנו נציג מכאן ואילך את התאריך במספר פורמטים על מנת לתת מענה לכל join אפשרי מטבלת fact אלינו, או לכל שאילתא אפשרית מתוך מערכת ה-BI, על מנת לשלוף את השורה הזאת ללא שום מניפולציה.

  13. 03:39

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

  14. 03:58

    אולי אני ארצה גם לציין את ה-day in months, מהו היום בחודש שאנחנו מציינים כאן מבחינת המספרים עצמם. אני ארצה לציין את ה-day of week אולי כ-number במספר הראשון, השני, השלישי, ואולי גם אני ארצה את ה-day of week בצורה של name.

  15. 04:18

    ייתכן שגם את החודש אנחנו נצטרך כ-number, ונצטרך גם את ה-month כ-name. ומכאן ואילך אנחנו בעצם ערוכים ללכת ולכל רזולוציה שבה אנחנו חושבים שנידרש לשאול את עצמנו מתוך המערכת של ה-BI, אז אנחנו מביאים כאן את הרשומה המתאימה שתתאר את אותו תאריך.

  16. 04:42

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

  17. 04:58

    אם יש לי ב-Quarter באיזה רבעון אני נמצא, אני יכול גם לשאול את עצמי באיזה יום אני נמצא מבחינת הרבעון עצמו. Day of Quarter, כמו שעשיתי לעצמי Day in Month, Day of Month, באיזה יום בחודש אנחנו נמצאים, באיזה יום בשבוע אנחנו נמצאים, באיזה יום בשנה אנחנו נמצאים,

  18. 05:21

    Day of Year, באיזה יום מבחינת סדרים של ימים מ-1 עד 365 ימים, באיזה ימים אנחנו נמצאים כאן? 1 עד 365.

  19. 05:34

    באילו ימים מ-1 עד 35? כאן ה-day of year שלנו יהיה בעצם 1 עד 31, בטווח של ערכים כאלו. Day of quarter כרבעון, כיום שנמצא לנו בעצם מבחינת כל הרבעונים עצמם.

  20. 05:49

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

לקורס המלא: קורס SSIS אונליין

ההרצאה הקודמת: יצירת Dimension

ההרצאה הבאה: מילוי ערכים בטבלת Dimension

הרצאות קשורות מקורסים אחרים

  • הצגת תאריך יצירת הקבצים בלינוקס
  • Dimension Resource

קורסים נוספים במסלול

  • קורס DBA אפליקטיבי - שפת SQL למתחילים
  • קורס NoSQL - MongoDB
  • קורס BI - ניתוח מסדי נתונים - Qlik Sense
  • קורס Power BI