טיפ בנושא Business Objects-כיצד נשתמש בDefault Context במקרה של שימוש במימדים בלבד (במקרה זה מתארים היררכיה ארגונית). 

 

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

 

הסכמה מכילה, 2 טבלאות Fact: Fact A, Fact B וכן שני מימדים משותפים: Dim A ,,Dim B. בנוסף ישנו מימד שלישי: Dim C המהווה טבלת קשר בין Dim A לDim B.

כמובן שנגדיר 3 Contexts:

Dim A<-Fact A<-Dim B

Dim A<-Fact B<-Dim B

Dim A<-Dim C <-Dim B

לצורך ההמחשה,ניצור 2 תיקיות של אובייקטים:

היררכיה

מכילה, Dimensions :אובייקט מdim a בשם dim_a_name, אובייקט מdim_b בשם dim_b_name.

מדדים

מכילה Measures: אובייקטים מטבלאות הFacts, sum_a,sum_b

הבעיה: אם ניקח אובייקטים ממחיצת היררכיה ואובייקט ממחיצת מדדים, הBO יגש לContexts הרלוונטי בהתאם למדד\ים הנבחר. אך במצב שבו ניקח אובייקטים ממחיצת היררכיה בלבד, הBO לא ידע באיזה context לבחור ולכן יפתח מסך הבחירה של הContext.

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

הפתרון:

ניצור את הפתרון בשלבים:

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

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

למשל Dim_C..field=1

המטרה היחידה של פילטר זה היא לגרום לכך שהBO יעבור דרך הContext של Dim C, לכן אנחנו צריכים לוודא שהוא לעולם לא יסנן רשומות מטבלת הDim_C.

לצורך זה נשתמש בטריק קטן ונוסיף לפילטר את הפרדיקט 1=1, כך שהפילטר המלא יהיה:

1=1 or dim_c.field=1.

ותמיד יחזיר True.

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

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

לצורך זה, נשתמש בAggregate_Aware:

נרשום טבלת Incompatibility:

 (X מסמן Incompatible)

היררכיה

מדדים

אובייקטים\טבלאות

 

X

Dim_C

 

 

Dim A, Dim B

 

וכמובן שנגדיר אותה בAggregate Navigation

כעת, נשכלל את הפילטר מקודם:

1=1 or @aggregate_aware(dim_c.field, dim_a.field)=1

הערה: בחרנו בפילטר זה את dim_a.field, אך יכולנו באותה מידה לבחור ב dim_b.field. רצוי לבחור את אותה טבלה שמבחינה עסקית נשתמש בה תמיד או כמעט תמיד בהיררכיה.

לסיכום:

תוך שאנו זוכרים שהפילטר יופעל רק כשנשתמש באובייקטים מתיקיית "היררכיה", המשמעות של הפילטר במלים היא:

"כשאנו משתמשים באובייקטים מתיקיית "היררכיות", הכניסו את טבלת dim_c לתחביר הsql (רק כדי למנוע את מסך בחירת הContexts), אם נשתמש באובייקטים נוספים (במקרה זה "מדדים"), גרמו לטבלת dim_a להכנס לתחביר ה SQL במקום, דבר שלעצמו לא ישנה דבר מאחר שבכל מקרה בחרנו באובייקטים מ"היררכיה".

חדשות dwh.co.il

BI&BigData

07 אפריל 2020

bi\dwh in israel

רשימת קורסים

קורס ה Bo Designer Master הוא קורס ייחודי שפותח בא ...
קורס ה SQL Wiz הוא קורס מיוחד המלמד חסר נסיון בSQL ...
בקורס זה אנו נלמד כיצד לפתח דוחות באמצעות הWebinte ...
בקורס זה אנו נלמד כיצד לפתח דוחות באמצעות הWebinte ...
הSDK של הקליינט של הBusiness Objects מרחיב את האפש ...
בסדנא זאת, אנו נלמד על כלים מיוחדים עבור הDesigner ...
קורס ה Deski\Client-Business Objects, נועד לאפשר פ ...
תנו לנו לייק לקבלת עדכונים שוטפים