content top

הרצת SSRS Subscription עם SQL – חלק ב' – שימוש ב-ETL

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

במאמר הזה אני אציג כיצד להריץ את כל ה-Subscriptions של דוח אחד או יותר, פתרון שניתן להתאים לצרכים נוספים. הפעם אשתמש בתהליך ETL של SSIS, ספציפית ב-Foreach Loop בכדי להגיע לתוצאה הרצויה. לריענון ב-Foreach Loop ניתן להקליק בקישורים הבאים:

https://msdn.microsoft.com/en-us/library/ms141724.aspx

https://www.simple-talk.com/sql/ssis/implementing-foreach-looping-logic-in-ssis-/

 

דבר ראשון נצטרך ליצור Solution חדש ב-Integration Services וליצור Configuration Manager אל ה-DataBase של "ReportServer" .

בתוך הפתרון, נתחיל עם יצירה של משתנה (Variable) שאותו נצטרך בשביל לולאה (Foreach Loop) שאותה ניצור עוד מעט. סוג המשתנה חייב להיות Object, כי אנחנו ניתן לו טבלה מלא (Full table result set).

נמשיך עם יצירה של משתנה שני מסוג String. המשתנה הזה ייכנס לשימוש בתוך הלולאה.

1

 

עכשיו אנו ניצור "Execute SQL Task", נלחץ לחיצה כפולה עליו, נחבר אותו ל-DataBase של "ReportServer". גם נשנה את ה-Result Set ל-"Full Result Set"  (על מנת שהוא יעביר את כל הטבלה). הסקריפט הבא יחזיר את כל ה-Subscriptions הרלוונטיים לדוחות המוחזרים. נכניס אותו כעת:

SELECT SubscriptionID

FROM [ReportServer].[dbo].[ReportSchedule]

JOIN [ReportServer].[dbo].[Catalog]

ON ReportID = ItemID

WHERE CHARINDEX('AdventureWorks', Name) >0

 

שנו את ה-Where כדי להתאים לצרכים שלכם. זכרו שהוא צריך להחזיר את המפתח של הדוחות הרצויים. בדוגמא שלי החזרתי את כל ה-Subscriptions של הדוחות שבשמם יש AdventureWorks.

2

בשלב זה אנו נעשה שימוש במשתנה הראשון שייצרנו, ה-LoopVariable, בתוך ה-Result Set כך:

3

Result Name חייב להיות "0", שאומר שה-Data Set הראשון שהשאילתה מחזירה תגיע למשתנה. מכיוון שהשתמשנו ב-Full Result Set נקבל פלט של תוצאה אחת בצורת טבלה.

 

בשלב הבא אנו ניצור לולאת Foreach Loop ונלחץ עליה פעמיים. נלך ל-Collection tab, נשנה את Enumerator ל-"Foreach ADO Enumerator", נבחר את המשתנה הראשון שיצרנו (מסוג Object) ונשנה את ה-Mode ל-"Rows in the first table".

4

נלך ל-"Variable mapping" ונוסיף את המשתנה השני שיצרנו (מסוג String), האינדקס יהיה "0".

5

כעת אנו נייצר עוד SQL Task ונכניס אותו לתוך ה-Foreach Loop ונלחץ עליו פעמיים. נוודא שה-Result Set הוא "None", נחבר אותו ל-DataBase של "ReportServer" ונוסיף את הסקריפט שייצרנו בחלק א' של הפוסט (http://www.sqlserver.co.il/?p=6312):

Exec [ReportServer].dbo.AddEvent @EventType='TimedSubscription', @EventData= ?

הסקריפט יריץ את כל ה-Subscriptions שקיבלנו בפלט של ה-SQL Task הראשון.

6

כעת נלך ל-"Parameter mapping" ונוסיף את המשתנה השני, נשנה את סוג המשתנה ל-Varchar ואת שם המשתנה ל-"0".

7

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

 

בהצלחה

איתי שולץ


כתיבת תגובה

האימייל לא יוצג באתר. (*) שדות חובה מסומנים

11 − 5 =