הבלוג של גרי רשף

03/10/2010

אופציית Multi-Value ב-Reporting Services

שייך לקטגוריה: Uncategorized — תגים: , , , — גרי רשף @ 21:41

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

Select *

From sys.objects

Where schema_id=@S;

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

מסך הגדרת הפרמטרים כולל גם אפשרות Multi-Value: ניתן יהיה לבחור ערך אחד או יותר מתוך הרשימה:

clip_image002

במקרה כזה (אם נבחר ב-Multi Value)- יש לשנות את השליפה הנ"ל לשליפה הבאה:

Select    *

From    sys.objects

Where    schema_id In (@S);

הסינטקס הזה לכאורה שגוי- נסו להריץ את הקוד הבא ותקבלו שגיאה מכיוון שבעמודה schema_id יש מספרים ו-S@ הוא טקסטואלי:

Declare @S Varchar(Max);

Set @S='1,4';

Select *

From sys.objects

Where schema_id In (@S);

Go

ואם נפלטר עמודה טקסטואלית- אמנם לא נקבל שגיאה, אך גם לא את התוצאות המקוות:

Declare @S Varchar(Max);

Set @S='S,U';

Select *

From sys.objects

Where type In (@S);

Go

הסיבה ברורה- המערכת מתייחסת למשתנה S@ כאל ערך בודד, ואין אף שורה בה עמודת type מכילה את הערך 'S,U'..

מדוע זה כן עובד ב-SSRS? כנראה מפני שהמערכת הופכת את ה-SQL לדינאמי, בערך כמו בדוגמה הזו:

Declare @S Varchar(Max),

@SQL Varchar(Max);

Set @S='1,4';

Set @SQL='Select * From sys.objects Where schema_id In ('+@S+');'

Exec(@SQL);

Go

ומה קורה כשמפעילים פרוצדורה המפעילה שליפה ולא שליפה באופן ישיר?

המערכת תפעיל את הפרוצדורה באופן דינאמי כנ"ל, אבל הפרוצדורה עצמה תרוץ כפי שכתבנו אותה, והשליפה שבתוכה לא תפעל כמתוכנן.. כיצד נכתוב את השליפה בתוך הפרוצדורה כך שתעבוד?

פתרון:

Declare @S Varchar(Max);

Set @S='1,4';

Select *

From sys.objects

Where ','+@S+',' Like '%,'+Cast(schema_id As Varchar)+',%';

Go

3 תגובות »

  1. [...] מבעייה פשוטה יותר שטיפלתי בה בעקיפין מספר פעמים בעבר (אופציית Multi-Value ב-Reporting Services, יחס של רבים לרבים ללא טבלת עזר) ואציג אותה כאן בצורה [...]

    פינגבאק מאת חיתוך בין רשימות - גרי רשף — 09/01/2012 @ 21:09

  2. [...] מבעייה פשוטה יותר שטיפלתי בה בעקיפין מספר פעמים (אופציית Multi-Value ב-Reporting Services, יחס של רבים לרבים ללא טבלת עזר) ואציג אותה כאן בצורה [...]

    פינגבאק מאת חיתוך בין רשימות - Israel Database Portal — 07/11/2011 @ 12:35

  3. [...] מבעייה פשוטה יותר שטיפלתי בה בעקיפין מספר פעמים בעבר (אופציית Multi-Value ב-Reporting Services, יחס של רבים לרבים ללא טבלת עזר) ואציג אותה כאן בצורה [...]

    פינגבאק מאת חיתוך בין רשימות « הבלוג של גרי רשף — 24/08/2011 @ 19:28


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

כתיבת תגובה

Fill in your details below or click an icon to log in:

WordPress.com Logo

אתה מגיב באמצעות חשבון WordPress.com שלך. Log Out / לשמור )

Twitter picture

אתה מגיב באמצעות חשבון Twitter שלך. Log Out / לשמור )

Facebook photo

אתה מגיב באמצעות חשבון Facebook שלך. Log Out / לשמור )

Connecting to %s

ערכת עיצוב: Shocking Blue Green. בלוג בוורדפרס.קום.

Follow

Get every new post delivered to your Inbox.

הצטרפו אל 25 שכבר עוקבים אחריו