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

01/01/2010

כיצד להריץ שאילתת SQL לשליפת נתונים מה-OLAP

Filed under: Uncategorized — תגיות: , , , , , , , — גרי רשף @ 14:43

לפני מספר שנים עבדתי על מערכת דוחות ב-Reporting Services שהתבססה על קוביות OLAP.

אחד הדוחות היה מאוד מורכב ולא ניתן היה לבצע אותו בעזרת MDX (כלומר- שליפה מקוביית ה-OLAP), ונאלצנו בלתי ברירה להתבסס על טבלת ה-Fact  שב-SQL Server (טבלת המקור של הקוביה).
זה יצר בעייה חדשה: ב-OLAP מומשה מערכת הרשאות שאיפשרה למנהל של כל אזור לראות רק את הנתונים של האזור שלו, אבל כל זה לא היה קיים בטבלת ה-Fact, והדוח שיצרנו היה מאפשר לכל אחד לעיין בכל הנתונים..

מה עושים? לבנות מערכת הרשאות מקבילה ב-SQL Server זה בלתי אפשרי- תקציב הפיתוח כבר נוצל, היינו אמורים לסיים בהקדם את הדוחות, ולהקמת מערכת כזו נדרש אפיון, פיתוח, בדיקות וכו'..
בסוף נמצא פתרון פשוט שלא הצריך כל שינוי: הוספנו לשליפת ה-SQL הנ"ל (מתוך טבלת ה-Fact) תנאי מהסוג של (..) Where Ezor In כשהביטוי בתוך הסוגריים היה שליפה של האזורים מתוך ה-OLAP (מה שהבטיח שכל אחד קיבל רק את האזורים להם הייתה לו הרשאה).

כיצד שולפים אם כך בעזרת שאילתת SQL נתונים מה-OLAP (מדובר בדוגמה שבניתי בבית ולא במקרה המסויים הנ"ל):

1. ניצור Linked Server לקוביה (צירפתי צילום מסך של ה-Object Explorer):

EXEC sp_addlinkedserver

@server='OlapServer',                           –שם שבחרתי

@srvproduct=",

@provider='MSOLAP',                             –שם שמור

@datasrc='USER-1FC9E5F6D8\SQL2008',       –Object Explorer => OLAPשם שרת ה

@catalog='Analysis Services Tutorial'           –Object Explorer => Databases לבחור

2. נשלוף נתונים מהקוביה כך (יש לבנות MDX מתאים):

SELECT "[Product].[Product Line].[Product Line].[MEMBER_CAPTION]" As Product

FROM OPENQUERY(OlapServer,'Select   [Measures].[Internet Sales-Total Product Cost] On 0,

[Product].[Product Line].[Product Line] On 1

From     [Analysis Services Tutorial];')

Order By "[Measures].[Internet Sales-Total Product Cost]";

בדוגמה זו ניתן לראות כיצד להתייחס לשמות ה"שדות" מחוץ לפונקציית OpenQuery.

3. ב-SQL 2008 ניתן לשלוף גם כך:

EXEC ('Select     [Measures].[Internet Sales-Total Product Cost] On 0,

[Product].[Product Line].[Product Line] On 1

From  [Analysis Services Tutorial];') AT [OlapServer];

4. ניתן לשלוף גם ללא יצירת Linked Server:

SELECT a.* FROM OpenRowset('MSOLAP','DATASOURCE=USER-1FC9E5F6D8\SQL2008; Initial Catalog= Analysis Services Tutorial;', 'Select [Measures].[Internet Sales-Total Product Cost] On 0 From [Analysis Services Tutorial];') as a

הפואנטה בשלוש השליפות הנ"ל (סעיפים 2-4) היא שניתן לפמות בהן גם לקוביה וגם לטבלאות רגילות ולבצע בינהן Join או התניות אחרות.

מודעות פרסומת

להגיב »

עדיין אין תגובות.

RSS feed for comments on this post. TrackBack URI

כתיבת תגובה

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

הלוגו של WordPress.com

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

תמונת Twitter

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

תמונת Facebook

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

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s

בלוג בוורדפרס.קום.

%d בלוגרים אהבו את זה: