top of page
Search

For Each Loop Container - תרגיל שביצענו בכיתה‎

  • class928417
  • Oct 12, 2014
  • 3 min read

**** מייל מרן ****

היי,

להלן תיאור "צעד אחר צעד" של הפעולות של משימה שביצענו בכיתה.

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

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

הפעולות שביצענו:

1. ב Control Flow - יצירת For Each Loop Container

2. יצירת משתנה מסוג String - קראנו לו VarLoop.

שימו לב: בעת יצירת המשתנה - השדה "Value" מהווה ערך ברירת מחדל. הוא לא חייב להיות ואלידי - אפשר לשים שם סתם אותיות - אבל חשוב שלא יהיה ריק. זאת כיוון שאם יהיה ריק, התוכנית תוציא שגיאות עוד לפני הריצה שלה. לדוגמא: בהכנת ה Task של העברת הקובץ, תהיה שגיאה שה Variable שלנו מוגדר כ Source והוא ריק.

3. עריכת ה Container:

3.1. ב Collection נגדיר את ה Enumerator כ Foreach File Enumerator (זה ה Default גם ככה)

3.2. (עדיין ב Collection) נגדיר את ה Folder בו נמצאים הקבצים המיועדים לטעינה + העברה

3.3. (עדיין ב Collection) נודא שב Retrieve file name מוגדר "Fully qualified" - זה אומר שבכל מעבר (איטרציה) של הלולאה המסלול של הקובץ (Path) השם של הקובץ (Name) והסוג שלו (Extension) יובאו כפלט (ומכאן המילה Retrieve).

3.4 ב Variable Mappings , תחת Variable נבחר את VarLoop. ונודא שה אינדקס הוא 0. כעת בכל איטרציה השם המלא של הקובץ ישמר במשתנה שלנו.

3.5 נסיים ונלחץ על OK

4. עדיין ב Control Flow - ניצור משימת DataFlow ונציב אותה בתוך ה For Loop Container

5. ניצור משימה נוספת של File System Task ונציב גם אותה בתוך ה Container.

6. כיוון שאנחנו מעוניינים שתיווצר תלות בי המשימות - קודם טעינת DataFlow ולאחר מכם העברת הקובץ - נימתח חץ בינהם, כך שה Data Flow יהיה ראשון.

7. ניכנס לתוך ה DataFlow

7.1 נגדיר Flat File Source - וניצור בתוכו Connection Manager שמופנה לאחד הקבצים שאותו נרצה להעביר. זאת מהסיבה שאנחנו נרצה שהמבנה (השדות והdata types) של הקבצים שלנו ישמר ב Connection Manager.

7.2 נגדיר OLE DB Destination ונגדיר בו טבלה שלתוכה נטען את כל הקבצים.

7.3 כעת נותר לבצע את הפעולה שתאפשר לטעינה להתבצע בצורה דינמית - כל איטרציה בLoop ה"אבא" תיישם טעינה של קובץ אחר: ניגש למאפיינים של ה Connection Manager (קליק ימני -> Properties)

7.3.1 במאפיינים נלחץ על "Expressions" ואז נילחץ על האייקון עם 3 הנקודות שלצידו.

7.3.2 ב Property נבחר את Connection String ווכדי להזין לתוכו Expression נלחץ על האייקון (4 נקודות) שלצידו

7.3.3 לתוך ריבוע ה "Expression" נגרור את ה משתנה שלנו - VarLoop

7.3.4 כעת ניתן לבדוק האם הביטוי שלנו תקין (Evaluate Expression) - כלומר האם הערך הDefault שהצבנו במשתנה הוא זה שיוצב ב connection string של ה connection manager הזה. ברור שבשלב ריצת התוכנית - הערך הזה כבר לא רלוונטי - אלא הערך שמגיע מתוך ה For Each Loop לתוך המשתנה VarLoop - הוא שם הקובץ הרלוונטי בכל איטרציה.

שימו לב: השימוש ב SSIS Expressions יכול להיות בכל מני מקומות בתוך פרוייקט SSIS. ראינו כמה דוגמאות:

- תנאים בין משימות ב Control Flow, הגדרות בטרנספורמיות Derived Column, הגדרות למשתנים ועוד.

הפעם השימוש הוא כדי לשנות מאפיינים(Properties) של אובייקטים שונים. תוכלו לקרוא על הנושא בלינק הבא:

8. נחזור לControl Flow וניכנס ל Editor של File System Task:

8.1 ב Operation נבחר ב Move File

8.2 ב Source Connection נרצה להזין משתנה - לכן נשנה את "IsSourcePathVariable" ל True.

+ נזין את המשתנה Var_Loop ב Source Connection4

8.3 ב Destination Connection נזין את תיקיית היעד (אותה ניצור מבעוד מועד). כאן אין שימוש במשתנה, כיוון שהיעד הוא תיקייה ספציפית ולא משהו דינאמי. לכן - IsDestinationPathVariable ישאר כמובן ב False.

9. כעת אפשר להריץ - ניתן ורצוי להשתמש בכלי ה Debugging כדי לעקוב אחרי המשתנה.

זהו...מקווה שמפורט מספיק :-)

בהצלחה - רן.


 
 
 

Recent Posts

See All
Project MDX

נוספו MDX עבור הפרויקט למי שמתקשה. נמצא בלשונית "project" שאול

 
 
 
דוגמאות משלבי הפרויקט

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

 
 
 
קבוצת פייסבוק חדשה לקורס

המרצה במודול החדש ( מודול הפרויקט) פתח קבוצת פייסבוק לכיתה שלנו. הנה הלינק : https://www.facebook.com/groups/JBH9284.17/ שם הקבוצה :...

 
 
 

Comments


bottom of page