• ברוכים הבאים
    לאתר הקורסים שלנו!

  • קורסים בBO,SQL וDWH

    לקטלוג הקורסים המלא, הקישו כאן
  • חומרי לימוד מקוריים ובעברית

    אנו משקיעים משאבים רבים כדי שחומר הלימוד יהיה מובן ומעודכן

    כל חומרי הלימוד מפותחים על ידנו וכתובים בעברית
  • יחס אישי וסבלנות אין קץ

    אנו מסבירים את החומר בסבלנות ועונים על כל שאלה

    יש לנו סבלנות לכל אחד
  • מדריכים מנוסים

    אצלנו המדריכים מנוסים הן בנושאי הקורס והן בהדרכה
  • 1
  • 2
  • 3
  • 4
  • 5
  • קורס הSQL המהפכני, המלמד SQL מההתחלה , לא רק את תחביר הפקודות אלא גם את כל הדינמיקות השונת המתרחשות בשפה.
    הקורס נלמד על מגוון בסיסי נתונים כדי לחקות את סביבת העבודה לאחר סיום הקורס.
    קראו עוד
  • בקורס זה אנו מלמדים כיצד לפתח דוחות באמצעות הWebintelligence. הקורס שם דגש על מספר נושאים, כגון הבאת נתונים מהDB באמצעות יצירת שאילתא, יצירה ועיצוב אובייקטים גרפים דוגמת, טבלה וגרף, ושימושיות למשל כדי לתזמן דוח. הקורס מלווה בתרגול רב, חלק נקודתי וחלק על ידי תרגילים מסכמים.
    קראו עוד
  • בקורס זה אנו נלמד כיצד לפתח דוחות באמצעות הWebintelligence של תוכנת Business Objects בגרסא 4.x . הקורס הוא קורס בן יום אחד למשתמשים אשר מכירים את הBO בגרסאות ישנות שלו, אשר שונות בצורה מהותית מגרסא 4. הקורס כרגיל מלווה בתרגול ובהרבה טיפים.
    קראו עוד
  • קורס ה Bo Designer Master הוא קורס ייחודי שפותח בארץ המקנה למשתמש מיומנויות מקצועיות בפיתוח עולמות תוכן באמצעות כלי הDesigner של Business Objects. קורס זה מדמה את סביבת העבודה של הDesigner וכן את המצבים והבעיות בהם נתקל בעבודתו. הקורס מועבר באמצעות סביבות של בסיסי נתונים "חיים" המכילים מודלים הקרובים מאד למודלים האמיתיים הנמצאים בפרויקטים. התלמיד בוחר את בסיס הנתונים שעליו רוצה לפתח את עולמות התוכן. (ישנן שתי אפשרויות: Sql Server או Oracle.)
    קראו עוד
  • למדתי מספר קורסים של אתר dwh.co.il בנושאי Business Objects. למרות שאני מנוסה מאד בתחום הBI למדתי דברים רבים ומעניינים שפתחו לי אפשרות לבצע דברים חדשים בעבודה היומיומית....
    קראו עוד
  • לאחר שמערכת הBO הוטמעה בארגון , החלטנו להרחיב את היריעה ולהכניס עוד משתמשים למעגל כותבי הדוחות. לצורך זה הזמנו קורסי Business Objects מאתר dwh.co.il. הקורסים של האתר היו מותאמים בדיוק למה שהיינו צריכים, המדריך הסביר בסבלנות....
    קראו עוד
  • dwh,אני חייב לכם תודה על הקורס שהעברתם לנו כאן בישראכרט - קורס מצויין ברמה גבוה, עם המון תכלס דרך תרגולים בה גם אנשי ה-BI המנוסים ביותר שלנו הצליחו ללמוד ולחדש...
    קראו עוד
  • DWH.CO.IL העבירו קורס Business Objects לקבוצת מנהלים ואנליסטים בביטוח ישיר ,הקורס הועבר בצורה מקצועית ויעילה ונגע בנקודות החשובות בעבודה היומיות....
    קראו עוד
  • במסגרת הטמעת מערכת הBusiness Objects בארגון , הזמנו קורס infoview באתר dwh.co.il....
    קראו עוד
  • הזמנו לבזק את אחת מהסדנאות BO Design למתקדמים. בהתחלה לא ידענו אם זה באמת מה שאנחנו צריכים, מאחר ויש לנו ניסיון רב בDesign בארגון....
    קראו עוד
  • פיתוח הקורסים

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

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

מדוע נוצר Synchronization וכיצד מטפלים בו?

לפניכם מאמר ב ביזנס אובג'קטס\business objects:מדוע נוצר Synchronization וכיצד מטפלים בו?

 

כאשר הBO יוצר יותר ממשפט SQL אחד, יכולים להיווצר שני מצבים:

Join: הBO יודע כיצד לחבר את התוצאות של SQL`s לכדי שאילתא אחת.(נקרא בגרסא 4 fullouter join)

Synchronization: הBO אינו יודע או אינו יכול לחבר את הSQL`s לכדי שאילתא אחת. (נקרא בגרסא 4 multiflows)

מיוצר לציין שברוב המקרים נשאף למצב של join.

נמחיש את הנושא באמצעות הדוגמא הבאה:

לפניכם עולם, המורכב מ:

2 טבלאות Fact:  Fact_Arizot_Sales(מכירות אריזות) Fact_Wine_Sales (מכירות יין)

2 מימדים משותפים: Dim_Customer(לקוחות)  Dim_Time_Hour (מימד זמן)

מימד נוסף המשויך לFact_Wine_Sales בלבד, dim_wine_type (מימד יין)

הסכמה נראית כך:

article003-1

 

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

Dim_Customers-> Fact_Arizot_Sales->Dim_time_Hour

Dim_customers->Fact_wine_sales->dim_Time_hour->Dim_Wine_Type

הערה: לצורך הקיצור רשמנו את הטבלאות ולא את הJoins.

כמו כן, יצרו אובייקטים בהתאם לטבלאות:

זמנים: dim_time_hour

לקוחות: dim_customers

סוגי יין: dim_wine_type (המימד המשויך רק לfact אחד)

מדדים: מכירות יין משוייך לטבלת Fact_wine_sales וכן מכירות אריזות המשויכות לטבלת Fact_Arizot_Sales.

article003-2

 

בואו נסקור את הדינאמיקה של הBO במקרה זה:

אם ניקח אובייקטים מהמימדים המשותפים (זמנים, לקוחות) וכן מדדים משני הFacts (מכירות יין, מכירות אריזות), יווצרו 2sql`s והBO יחבר את התוצאות לפי המימדים המשותפים:

article003-3  

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

 

 article003-4

 

article003-5

הבעיה מתחילה , כאשר אנו ננסה להכניס לתוך השאילתא אובייקט נוסף מהמימד המשויך לטבלה אחת בלבד (מימד יין), לדוגמא: שם יין. מבחינה עסקית , אין קשר למימד זה לטבלת הFact  השניה: Fact_Arizot_Sales.

במלים אחרות: הBO לא יכול לתאר בשאילתא אחת את מכירות האריזות יחד עם שם היין.

article003-6

 

במצב כזה: הBO ייצור 2 Sql`s , אחד לכל Fact, ולא יצליח לחבר אותם, במלים של BO: יצור Synchronization  בין השאילתות:

 

 article003-7

 

 article003-8

הדרך שבה הדבר יבוא לידי ביטוי משתנה בין הDeski לבין הWebi:

 

בDeski: השאילתא תשבר לשתי שאילתות משנה:

 

 article003-9

 אשר ימרחו על המסך:

 article003-10

 

בWeb, תיווצר שאילתא אחת, אך יוצגו כברירת מחדל 2 טבלאות , אחת מתחת לשנייה: (לצורך ההדגמה העלנו את הטבלה התחתונה לימין הטבלה העליונה)

 

 article003-11

 

כך או כך,במקרה של Synchronization  התצורה על המסך עלולה לבלבל את המשתמשים ולכן אנו רוצים להימנע ממנה.

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

נשתמש בחבר ותיק: Aggregate_Aware.

נגדיר את טבלת הFact_Arizot_Sales כincompatible כלפי האובייקטים של המימד "האחר" (dim_wine_type), כלומר האובייקטים תחת ספריית "סוגי יין".

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

sum(FACT_ARIZOT_SALES.QUANTITY)

יוגדר:

@aggregate_aware(sum(FACT_ARIZOT_SALES.QUANTITY))

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

article003-12

 

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

בואו נשכלל את הרעיון:

אנו רוצים שבמקרה שילקח measure אשר לא תואם למימד בשאילתא, תופיע הודעה אחרת למשתמש.לדוגמא -9999999 במקום הערך של הMeasure הבעייתי.

היינו רוצים\מצפים במקום:

@aggregate_aware(sum(FACT_ARIZOT_SALES.QUANTITY))

 

להשתמש ב:

@aggregate_aware(sum(FACT_ARIZOT_SALES.QUANTITY),-9999999)

לצערנו זה לא יעבוד, מאחר והBO דורש שבכל חלק של ה@aggregate_aware תופיע טבלה.

לכן, אנו נאלצים להתחכם:

טבלת הFact השניה: Fact_wine_sales היא טבלה שמין הסתם תעבוד עם כל המימדים בשאילתא, לרבות האובייקטים ממימד היין, לכן נשתמש בה, יחד עם טריק אלגברי פשוט: נבחר שדה נומרי כלשהו מהטבלה ,נכפילו ב0 ונחסיר 9999999.

למשל:

@aggregate_aware(sum(FACT_ARIZOT_SALES.QUANTITY),FACT_WINE_SALES.QUANTITY*0-9999999)

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

כלומר,

article003-13

 

יציג תוצאות רגילות:

article003-14

 

בעוד שהוספת אובייקט ממימד יינות :

 

 article003-15

יגרום להצגת -999999

 

 article003-16

פתרון זה הוא הרבה יותר יפה, אך עדיין לא מושלם. אנו רוצים שבמקום המספר -9999999 תוצג ההודעה : "לא ידוע". הבעיה היא שהmeasure הוא מסוג number ולכן לא הולך ביחד עם מחרוזת , כגון "לא ידוע".

בעיה זאת נפתור בדרך אחרת:

אם נוסיף למספר כלשהו את הערך NULL התוצאה תהיה NULL.

נבצע זאת באובייקט:

@aggregate_aware(sum(FACT_ARIZOT_SALES.QUANTITY),FACT_WINE_SALES.QUANTITY*0-9999999+null(

המשמעות היא שבכל פעם שניקח את הmeasure מאריזות יחד עם אובייקט ממימד יינות הBO יחזיר NULL. כעת, כל שנותר לנו לעשות הוא ללכוד NULL  זה.

לצורך העניין, נשתמש במנגנון object format. (קליק ימני על אובייקט, object format)

בלשונית number, בחלק של Undefined נכניס את ערך שיופיע כאשר הערך שיוחזר מהDB יהיה NULL.

  article003-17

 

בואו ננסה להריץ את אותה שאילתא:

article003-18

 

 article003-19

 

רק ליתר בטחון, נריץ את אותה שאילתא ללא שם יין:

article003-20

 

ונקבל

 

 article003-21

שימו לב שגם במקרה זה בחלק מהערכים במכירות אריזות יש "לא ידוע". דבר זה נובע מהעובדה שהקשר בין שני הSQL`s הוא למעשה חיבור outer join ברמת הBO. מכאן היכן שיש צירוף של תאריך ושם לקוח , אשר קיים לו ערך  במכירות יין ולא קיים לו ערך במכירות אריזות, יופיע כnull, אשר יתורגם ללא ידוע.

ובא לציון גואל!!

 

תנו לנו לייק לקבלת עדכונים שוטפים