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

  • קורסים ב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 בארגון....
    קראו עוד
  • פיתוח הקורסים

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

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

איך מאתרים הכפלת רשומות במהירות?

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

 

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

 

לפנינו טבלת סוכנים עם מכירות לסוכן:

article004-01

בטבלה זאת, שדה  agent_id הוא המפתח ושדה agent_sales_num הוא הנתון המספרי. השדות האחרים מתחברים לטבלאות אחרות אשר מפענחות אותם.

כמובן שאם נבצע שאילתא הסוכמת את agent_sales_num, ברמה של agent_id, נקבל תוצאות תקינות (agent_id הוא המפתח):

SELECT     agent_id, SUM(agent_sales_num) AS agent_sales_num

FROM         agents

GROUP BY agent_id

והתוצאה תהיה:

article004-02

אם נשכלל את השאילתא ונחבר את שתי הטבלאות הנוספות: טבלת ערים (cities)

article004-03

וטבלת מחלקות (divisions)

article004-04

כלומר בשאילתא הבאה:

SELECT     agents.agent_id, SUM(agents.agent_sales_num) AS agent_sales_num

FROM         agents ,

                 cities ,

                divisions

where agents.agent_city_id = cities.city_id

and agents.agent_division_id = divisions.division_id

GROUP BY agents.agent_id

שוב, התוצאה תהיה תקינה:

article004-02

הבעיה מתחילה שנרצה להוסיף טבלה נוספת בעלת יחס של אחד לרבים לטבלת הagents, לדוגמא  טבלת כתובות (addresses):

article004-05

אם תשימו לב, לסוכן 1 ישנן שתי כתובות, לכן אם נוסיף טבלה זאת לשאילתא:

SELECT     agents.agent_id, SUM(agents.agent_sales_num) AS agent_sales_num

FROM         agents ,

cities ,

divisions,

addresses

where agents.agent_city_id = cities.city_id

and agents.agent_division_id = divisions.division_id

and agents.agent_id=addresses.agent_id

GROUP BY agents.agent_id

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

article004-06

הסיבה היא כמובן  שבטבלת הכתובות מוזנות שתי כתובות לסוכן מספר 1, מכאן ה100 המקורי הוכפל במספר רשומות הכתובת הקיימות לכל סוכן. אגב, אותו הדין לסוכן מספר 2, אלא שלו מוזנת רק כתובת אחת לכן לא נראה הכפלת רשומות.

מצב זה הוא כמובן לא תקין ונשאלת השאלה: כיצד ניתן לאתר שהבעיה היא בטבלת addresses?

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

למזלנו, ישנה שיטה הרבה יותר טובה ומהירה. כדי לאתר הטבלה הבעיתית, נבצע את הפעולות הבאות:

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

2. ניקח את השאילתא המקורית ונבצע עליה את הפעולות הבאות:

2.1 נוסיף לחלק הwhere את הערך אחד של המפתח שבחרנו (במקרה זה, סוכן 1)

2.2 בחלק הselect נחליף את כל מה שרשום ל * .

2.3 נסיר את הgroup by מהשאילתא

בקיצור, נהפוך את השאילתא מ:

SELECT     agents.agent_id, SUM(agents.agent_sales_num) AS agent_sales_num

FROM         agents ,

cities ,

divisions,

addresses

where agents.agent_city_id = cities.city_id

and agents.agent_division_id = divisions.division_id

and agents.agent_id=addresses.agent_id

GROUP BY agents.agent_id

לשאילתא:

SELECT    *

FROM         agents ,

cities ,

divisions,

addresses

where agents.agent_city_id = cities.city_id

and agents.agent_division_id = divisions.division_id

and agents.agent_id=addresses.agent_id

and agents.agent_id=1

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

במקרה שלנו, נריץ את השאילתא:

article004-07

החלק המסומן הוא התוצאה הנכונה מוכפלת במספר הרשומות (2).

שימו לב שרשומה 1 ו2 זהות לחלוטין, אך כשנמשיך לגלול ימינה, נראה את ההבדל ברשומות:

article004-08

ההבדל בין השורות הוא הדבר שגורם להכפלת הרשומות. לכן ברור לנו שההכפלה נגרמת מטבלת הכתובות. מצאנו את הבעיה במהירות!

הערות:

  1. שיטה זאת תהיה טובה גם למקרה שבו הכפלת הרשומות נגרמת כתוצאה ממכפלה קרטזית, כלומר אם לדוגמא , שכחנו בשאילתא את הjoin המחבר את טבלת agents לטבלת divisions.
  2. המקרה היחידי (שעולה לי כרגע בראש) שבו שיטה זאת לא תפעל הוא מקרה הקצה שבו הטבלאות עצמם מזובלות בערכים כפולים לדוגמא, אם בטבלת ערים היו שתי רשומות זהות עם קוד עיר =1, שיטה זאת לא הייתה מצליחה לעלות על מצב כזה. כאמור זה מקרה קצה, במיוחד במקרים שבהם מגדירים מפתחות על הטבלאות. אך במידה ונתקלנו בשתי רשומות זהות לחלוטין, אחד מהטבלאות בשאילתא מכיל רשומות כאלה.
תנו לנו לייק לקבלת עדכונים שוטפים