
IsCurrentEnd עם הערך false.UPDATE שסוגרת את הרשומה הישנה מוסיפים לצד EndDate גם IsCurrent = ?. פרמטרים ממופים לפי סדר סימני השאלה: 0 הוא EndDate, 1 הוא IsCurrent ו-2 הוא Product ID. הדובר גם מראה שאפשר לכתוב 0 קבוע בפקודה במקום פרמטר.IsCurrentTrue עם true, וממפים אותה לעמודה IsCurrent בהכנסה.StartDate, EndDate, IsCurrentIsCurrentEnd (false), IsCurrentTrue (true)EndDate IS NULL ו-ProductID = ?הטקסט המלא של הדקות הראשונות בהרצאה «SCD - Slowly Changing Dimension - חלק 3» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
שלום לכם. בשיעורנו היום אנחנו נמשיך בנושא של Slowly Change Dimension. נעביר את הכל ככה למרכז. Slowly Change Dimension אנחנו בעצם יוצרים כלי לליטור שינויים בתוך טבלת היעד שלנו.
בדרך כלל זה בתוך טבלת ה-Dimensions. שינויים שנעשו בתוך הטבלאות מקור, אנחנו לא רוצים לאבד את ההיסטוריה, אלא רוצים לפעול בהתאם למתודולוגיה, כפי שראינו כאן של ה-Slowly Change Dimension, המתודולוגיות הטייפים השונים.
טייפ אחד ושתיים, כאמור, ראינו אותם בדוגמה הקודמת. אולם ראינו שבדוגמה הקודמת ניתן על ידי האובייקט של SSIS לממש או שינויים ברמה של עמודה של Current, או שינויים ברמה של תאריכים יחד עם העמודות של Start ו-End.
נסביר זאת ונדגים זאת. כאשר אנחנו פותחים את ה-Slowly Change Dimension, את האובייקט עצמו, אנחנו נבוכים לנוכח הוויזארד שנמצא לנו.
מאחר והוויזארד מאפשר לנו שינויים היסטוריים, קפצתי מהר מאוד לעמוד של ה-Historical Attribute Change, כאשר אנחנו רוצים לשמור נתונים היסטוריים ולא לדרוס את הנתון על ידי הערך החדש.
כדי לעשות זאת אנחנו חייבים לקבל החלטה דיכוטומית, לעבוד בעמודה שמציינת לנו Current ואקספיירד, או לעבוד בשתי עמודות שמציינות לנו תאריך התחלה ותאריך תוקף.
חיבור של שתי האפשרויות הללו, העבודה גם כך וגם כך, הוא בלתי אפשרי דרך תהליך הוויזארד, ובשיעור הקרוב אני רוצה להדגים כיצד אנחנו בכל זאת יכולים לממש אותו בתהליך שלנו, מה אנחנו צריכים לעשות.
על מנת להתחיל את התהליך, דבר ראשון אנחנו ננקה את טבלת Products, טבלת פרודקטס נקייה, טבלת פרודקטס כרגע שלפנינו אם אנחנו נבוא לנתח אותה ולהבין מה יש לנו בה.
נראה שבתוך טבלת פרודקטס יש לנו כרגע שתי עמודות תקורה started ו-end date שהן בעצם מאזינות לנו לנתוני התחלה וסוף תוקף כל רשומה לייצג מתי הרשומה עצמה ולידית באילו טווח של תאריכים.
הוספנו עמודה נוספת עמודת is current המציינת בצורה בוליאנית ולכן מספיק לשדה data type b על מנת לייצא ברמה של true או false, ברמה של 0 ו-1, ברמה של yes ו-no, האם העמודה כרגע היא current או שהיא expired.
עמודה שהיא expired אנחנו מציינים אותה ב-0, עמודה שהיא current אנחנו מציינים אותה ב-1. חזרה לתהליך ה-SSS שלנו. בתוך תהליך ה-SSS, כאשר כנפגנו את כל השדות עצמם, יש לנו עדיין כאן הודעת שגיאה של ה-quantity, הדבר הזה קורה מכיוון שאנחנו צריכים להתאים את הגודל שיש לנו בשתי השדות הללו לגודל שיש אותו בתוך הטבלה.
40 ו-20 זה בהתאמה 80 ו-40, מאחר וזה יוניקוד. כאן מדובר בגודל של הבתים שלנו, אבל מאחר ותווים אנחנו ביוניקוד יכולים להכניס רק חצי, אז בעצם כאן אנחנו יכולים להכניס בפרודקט ניים רק 40 תווים, כאילו ב-Quantity Parents אנחנו יכולים להכניס
20 תווים, זה בדיוק מה שרשמנו כאן. ההודעה לא תיעלם עד שלא נתקן את כל התהליך כולו ב-Slowly Change Dimension, וזה בדיוק מה שאנחנו עומדים לעשות ברגעים הקרובים. בואו ניכנס מהר מאוד לויזארד ונראה מה אנחנו צריכים לעשות כאן.
בתוך הויזארד אין מה לבצע שינויים, אני רק עושה אותם על מנת להדגים וליישר קו. בחירה של העמודות המתאימות, בחירה אילו עמודות אנחנו הולכים על פיקס, מה אנחנו הולכים על צ'יינג'ינג ומה אנחנו הולכים על היסטוריקל.
מזכיר לכולם שבפרודקט ניים ויוניט פרייס הלכנו על היסטוריקל. ולאחר מכן צריך לקנפג כל אחד מהדברים הללו. כאן אנחנו בחרנו עבודה מול סטאר דייט ואנד דייט.
אני מסיים את התהליך, שומר אותו ומעדכן. הכל בא על מקומו כרגע בשלום והאובייקטים שלנו תקינים. אבל כרגע אנחנו רק מנטרים לפי סטאר דייט ואנד דייט.
אם אנחנו רוצים לעשות גם ניטור ברמה של is current, כאן נדרשת מאיתנו עבודה ידנית בשתי הקומפוננטות כדלקמן.
הקומפוננט הראשונה בחץ של ה-historical. בחץ מצד ימין, החץ של ה-changing, הוא לא מעניין אותנו. ברגע שיש שינויים, מה קורה כאן? יש כאן פקודה שבה צריך ללכת ולעדכן את הנתונים של unit price, ברגע שזה product ID של 0 ו-end date is null.
כלומר אנחנו מעדכנים רק במקום שבו זה ריק. אז כאן אנחנו, אין לנו מה לגעת, אולם כאשר אנחנו מעדכנים שורה חדשה בעצם, מכניסים שורה חדשה, אנחנו רוצים לסגור את השורה הקודמת.
כדי לסגור את השורה הקודמת, מה שעשינו, יצרנו משתנה end date והכנסנו לו את התאריך. על אותה צורה אנחנו צריכים ליצור משתנה is current, נקרא לזה end, לסגור, וכאן אנחנו נכניס לו false כי אנחנו רוצים בעצם לסגור את הערך עצמו ולהכניס כאן לאותה רשומה להכניס כאן false.
דבר נוסף שאנחנו רוצים לעשות במידה ובקומפוננטה כאן אנחנו בעצם עושים update לתוך ה-end date שאנחנו מכניסים את הנתון עצמו ואת ה-where end date is null. כלומר בקומפוננטה כאן אנחנו מעדכנים את התאריך של סוף הרשומה הקודמת צריך גם כאן לעדכן את זה לאפס isCurrent שווה
לאפס, מאחר ויש לנו כאן שני עדכונים בפסוקית ה-set אז אני מפריט ביניהם על ידי פסיק hardcoded אני מכניס כאן isCurrent שווה לאפס. כמובן שאני יכול להשתמש במשתנה שלי באותה עמודה אבל מאחר וזה כאן טריוויאלי אז אנחנו יכולים לעשות זאת, נראה את הדוגמה בהמשך.
בדריווט קולום כאן אנחנו רוצים ליצור מצב שבו יש לנו כבר רשומה חדשה. כלומר, יש לנו ערך חדש שבו אנחנו רוצים להכניס ל-ease current להכניס לו דווקא טרום, ואני אכתוב כאן שזה טרום, ובהכנסה של הרשומות בתוך מפינג צריך לזכור גם כאן שאני לוקח את הערכים ולוקח את ה-ease current true,
ואותו אני מכניס לשדה הזה. is current לעדכן אותו ל true. כרגע זאת תהיה הרשומה הנוכחית. כדי לשמור על אחידות, אני רוצה לחזור גם לפקודה כאן.
וכאן בחרנו להכניס ערך שהוא hardcoded. is current שווה 0. לחלופין, שימו לב מה אני יכול לעשות. אני יכול לקחת עוד פרמטר, להשתמש ב-is current end ולהוסיף אותו כפרמטר.
איך אנחנו עושים זאת? אני חוזר אל הפקודת sql ובמקום לרשום כאן 0 אני רושם כאן סימן שאינה.