
OrderDate בטבלת Orders הוא ברמת יום, ולכן נשארים ברזולוציה של יום.Surrogate Key מסוג int, עם identity, כמפתח הטבלה ובלי null.Date מסוג datetime.FullDateUK (יום, חודש, שנה) ו-FullDateUSA (חודש, יום, שנה), כל אחד כ-char(10).MonthNum כ-int ו-MonthName כ-varchar.YearNum כ-int, DayOfYear, DayOfWeekNum מספרי ו-DayOfWeekName כמחרוזת (varchar(10)), ו-DayOfMonth.QuarterNum, DayOfQuarter ו-WeekOfMonth, מספרים שלמים.char של שישה תווים.@d מסוג datetime שמתחיל בתאריך ההתחלה, startdate ו-enddate, ולולאת while שמכניסה שורה בכל סיבוב (insert into הטבלה) ומקדמת יום. פרטי המילוי יתבצעו בהרצאה הבאה.join מטבלת fact או לכל שאילתה ממערכת ה-BI, בלי מניפולציה.הטקסט המלא של הדקות הראשונות בהרצאה «יצירת Dimension של תאריך» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
לאחר שיצרנו בשיעורים הקודמים את שלושת הטבלאות Dimensions של Customer, Employee ו-Product, ניצור היום Dimensions נוסף, הוא Dimensions מנדטורי בהרבה מאוד המערכות של Data Warehouse.
עליו דיברנו בשיעורים הקודמים, זה ה-Dimensions שמכיל לנו את התאריכים, Dates. כדי ליצור זאת, אז מדובר בעצם שוב בטבלה, שבטבלה בעצם אנחנו רוצים לתת אוסף של כל התאריכים שרלוונטיים לנו לתוך ה-Database.
בטבלה הזאת אנחנו פשוט נותנים את כל התאריכים row by row. כל שורה מייצגת את הרזולוציה הקטנה ביותר של התאריכים שאותם אנחנו רוצים להציג ואיתם אנחנו רוצים לעבוד ב-data warehouse.
במקום הזה נשאלת השאלה אם אנחנו רוצים לרדת לרזולוציה של ימים, אולי מתאימה לנו רק רזולוציה של שבועות, אולי רזולוציה של חודשים, אולי מתאימה לנו בכלל לרדת רזולוציה יותר drill-down לרמת שעות, או שניות, ועוד ועוד ועוד.
ההחלטה הזאת צריכה להתקבל ברמת החברה על מנת לאמוד את הדאטה שלנו כדי שנוכל לרדת באיזה רזולוציה מינימום אנחנו רוצים לראות את הנתונים שלנו, אנחנו רוצים לראות את הסיכומים, את הדוחות שלנו, מהו הפילוח זמן הקטן ביותר שנוכל לתת כאן במערכת BI להנהלה או בדוחות שלנו.
בשביל להבין את זה צריך לראות את המערכת התפעולית, לאן המערכת התפעולית שלנו מגיעה. מאחר ואנחנו מדברים כאן על מערכת של בסיס נתונים בנופווינד, אם נסתכל על אורדרס, נראה שהרזולוציה שם של מועד המכירה הוא רזולוציה ברמה של ימים.
נמצאנו איפה למדים שאנחנו רוצים להישאר כאן ברזולוציה של יום, אבל כדי לדעת לתת את כל הפילוחים אנחנו צריכים לתת איזושהי טבלת רפרנס שתיתן לנו את כל הימים, All Days, שרלוונטיים בעצם למערכות שלנו.
All Relevant Date. איך אנחנו עושים זאת? אז אנחנו נבנה כאן טבלה עם העמודות הרלוונטיות, אבל הטבלה עצמה לא סתם תכיל רק את התאריכים עצמם, אלא היא תיתן לנו וריאציות נוספות כיצד אנחנו יכולים לעלות גם מעבר לרמה של יום, לעלות לרמה של שבוע, של רבעון,
של חודש וכו' וכו'. תחילתו של כל טבלה, כמו שאנחנו מכירים בעבודה עם Dimensions, אז אנחנו יוצרים את ה-Surgate Key, במקרה הזה הוא יכול להיות int, אבל הוא המפתח של הטבלה, אנחנו ניצור אותו כאידנטיטי ונציין עליו שהוא באמת המפתח של
הטבלה מבחינתנו של הנתונים עצמם ולכן הוא גם לא יכול לקבל דעה. מכאן ואילך אנחנו ניתן תיאור של התאריך עצמו, אז הנה יש לנו כבר דייט והוא יהיה מסוג דייט טיים, אבל לא נסתפק רק בתיאור של התאריך עצמו אלא ניתן וריאציות שונות שבהם אנחנו יכולים לתשאל את הטבלה הזאת כדי להגיע לפורמט של תאריך.
למשל, יכול להיות שישאלו אותנו את התאריך בפורמט של מחרוזת, אז בואו נעשה את זה full-date time באזור לפי uk בפורמט שעובדים איתו ב-uk, ואותו אנחנו נציין על ידי char 10 וזה יהיה בעצם date in ddmm format.
כלומר אנחנו נציג מכאן ואילך את התאריך במספר פורמטים על מנת לתת מענה לכל join אפשרי מטבלת fact אלינו, או לכל שאילתא אפשרית מתוך מערכת ה-BI, על מנת לשלוף את השורה הזאת ללא שום מניפולציה.
למשל, אני ארצה להציג את החודש months. למרות שאני יכול להציג אותו בפונקציה פשוטה, אבל אני ארצה כבר לכתוב אותו כאן כעמודה. אני ארצה להציג כאן את העיר, תכף אנחנו נציין כבר את שמות העמודות, אני רק מקדים. אני ארצה לציין מה זה day of week, מהו היום בשבוע של אותו יום.
אולי אני ארצה גם לציין את ה-day in months, מהו היום בחודש שאנחנו מציינים כאן מבחינת המספרים עצמם. אני ארצה לציין את ה-day of week אולי כ-number במספר הראשון, השני, השלישי, ואולי גם אני ארצה את ה-day of week בצורה של name.
ייתכן שגם את החודש אנחנו נצטרך כ-number, ונצטרך גם את ה-month כ-name. ומכאן ואילך אנחנו בעצם ערוכים ללכת ולכל רזולוציה שבה אנחנו חושבים שנידרש לשאול את עצמנו מתוך המערכת של ה-BI, אז אנחנו מביאים כאן את הרשומה המתאימה שתתאר את אותו תאריך.
אני יכול לחשוב על קוורטר, באיזה רבעון אנחנו יכולים להיות, ואני יכול גם לחשוב על דבר נוסף שיכול להיות Week of Months אולי, באיזה שבוע מבחינת המספור החודשי אנחנו נמצאים.
אם יש לי ב-Quarter באיזה רבעון אני נמצא, אני יכול גם לשאול את עצמי באיזה יום אני נמצא מבחינת הרבעון עצמו. Day of Quarter, כמו שעשיתי לעצמי Day in Month, Day of Month, באיזה יום בחודש אנחנו נמצאים, באיזה יום בשבוע אנחנו נמצאים, באיזה יום בשנה אנחנו נמצאים,
Day of Year, באיזה יום מבחינת סדרים של ימים מ-1 עד 365 ימים, באיזה ימים אנחנו נמצאים כאן? 1 עד 365.
באילו ימים מ-1 עד 35? כאן ה-day of year שלנו יהיה בעצם 1 עד 31, בטווח של ערכים כאלו. Day of quarter כרבעון, כיום שנמצא לנו בעצם מבחינת כל הרבעונים עצמם.
יכולים לחשוב על עוד וריאציות נוספות, אולי אני ארצה גם סתם פורמטים משונים כמו