Showing posts with label Best practices. Show all posts
Showing posts with label Best practices. Show all posts

Sunday, November 11, 2012

Exists or not exists- that is the answer


Using more complex queries that can answer simple question like who bought product A but didn't bought product B? Or in another Case: which customers from the customer’s table don’t have an order in the order table ,is one of the abilities that we would like to give for the users and allow them to use it simply and freely as we can.

In order to do that we can use in some cases the sub query method which is good and solid, but in some cases using the Exist \ not exist would be better.
And why is that?

There are first of all performance differences that makes the exists operator make a better work of evaluating which is the driving table and by doing so , use in some cases the appropriate index ,there is also the ability to work with nulls.
For a better understanding of the differences between Exists and subquery read here:





Using the Island resort we will use the Customer and the Sales tables in order to answer a simple question:

Who are the customers who haven’t paid so far?

  1. first we will build the following predefined condition using this syntax:



SELECT Customer.cust_id
FROM Customer

WHERE NOT EXISTS

(select Sales.cust_id from Sale where Customer.cust_id=Sales.cust_id)





  1. We will create a simple query that returns the customers ID’s :

  1. The result will be getting just those customers who don’t have any invoice :




Saturday, November 7, 2009

רשמים מעבודה עם ה- Auditor

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

1. הביצועים בעת הרצת דוחות על בסיס הנתונים של ה- Auditor עשויים להיות מחרידים ואף לייצר Deadlock בעת גישה לטבלאות שעסוקות בלקבל נתונים מה- Repository,ההמלצה שלי היא כמו בכל בסיס נתונים תפעולי ועל זה יושב ה- Auditor בסופו של דבר לייצר Data Mart קטן שיעביר את טבלאות ה- Auditor לסביבה יומית ולשם מומלץ
לטעון את טבלאות ה- View לטבלאות רגילות,לאנדקס ולפרטש את טבלאות ה- AUDIT_EVENT וה- AUDIT_DETAIL כדי לקבל ביצועים טובים , הנתונים הרי לא חייבים להיות Online.

2. מלבד סט הדוחות הבסיסי שה- Auditor מספק ניתן ליצור דוחות מעניינים כמו:
איזה משתמש לא פעיל מעל X זמן,איזה דוחות לא הורצו מעל –X זמן,כמה דוחות כפולים יש ב- Repository,איזה תקלות מכאניות (גישה ל-DB,הרשאה לא מתאימה,Login שגוי) נגרמות למשתמשים,מתי פעם אחרונה נכנס כל משתמש למערכת,מה אחוז השימוש במערכת.

3. סטטיסטיקה בסיסית כמו כמות דוחות,כמות דוחות לעולם,כמות משתמשים,כמות דוחות למשתמש ניתנת אף היא להפקה (מצריך פיתוח של דוחות נוספים לא חלק מהדוחות שבאים עם ההתקנה).

4. נתון מעניין שגיליתי:ניתן לאתר דוחות כבדים למערכת שבד"כ מעידים גם על בנייה לא נכונה.

המשוואה אומרת שבערך 100MG =  חמש מליון רשומות,דוחות מעין אלו הם דוחות מהגיהינום שמעידים על צבירה אדירה של נתונים ושימוש לא נכון במחולל הדוחות,דוח "דוחות כבדים" סייע לי לאתר כמה "פושעי דוחות" שלא בנו דוחות כיאות והתייחסו למערכת ככלי לצבירת נתונים למקרה שיום הדין יגיע,הכי חשוב שה-DB יהיה אצלם....
מיותר לציין אך מצאתי דוחות ששוקלים מעל 700MG....את החשבון תעשו לבד...
מעבר לכך אם נתווכח האם הדוח אכן צריך להגיע למימדים אלו (המשתמש רוצה "להקפיא" את דוח הכנסות 2008)
ניקוי/איפוס הדוחות הנ"ל תיטיב עם ה- Repository מאחר והיא תצמצם את גודלו ואת העובדה שבעת שמושכים דוח גדול כזה נוצר כאמור עומס על המערכת.

5. נתון מעניין נוסף שמצאתי היה האפשרות לקבל חיווי על ה-SQL של הדוח מה שטורם רבות כמובן לניטור הדוח,הבעיה הגדולה שמצאתי בנתון זה שרק דוחות שבוצע להם Edit  ,ה-SQL שלהם מתועד.
ניתן בהחלט להשתמש בכלי אוטומטי או לכתוב סקריפט שיפתח את הדוחות וישלים את המשימה
אבל זה עשוי להיות מורכב ולא יציב (פתיחה של אלפי דוחות שחלקם כבדים,על חלקם יש הרשאות,Table Mapping ועוד)
ופה כבר עשוי להיכנס עוד כלי למשימה ה-MDM : Meta Data Manager שיכול להציג גם את ה-SQL של כל דוח לפי עולם.

6. אם הדוחות אמורים לשמש את התמיכה כדאי ליצור טבלת משתמשים משודרגת שתכיל מידע כמו שם המשתמש,טלפון,מייל ושם חטיבה/מחלקה ולטעון אותה לסכימת ה- Auditor.

7. מינוס נוסף הוא שתאריך הראשי המתעד הוא AUDIT_EVENT.Start_Timestamp והוא קיים ברמת שעה ודקה,אם יש לכם Prompts עם תאריכים (בלי LOV כמובן!) המשתמשים יצטרכו להכניס תאריך בפורמט של שעה ודקה – מומלץ לבצע Trunc על התאריך או להשתמש בשדה ה. Audit_Event.Start_date

8. לא שצריך כלי ניטור בשביל זה אבל : מ-8 עד 10 בלגן של דוחות משתמשים והרצות,ב-12 הכול נרגע ואחרי סעודת הצהרים מי שחוזר לעבוד עם דוחות הוא כנראה באמת משתמש רציני....

9.אם אתם מעוניינים לתחקר את כל הדוחות,לצפות ב-SQL שלהם ולראות דוחות שגדולים מ-X מגה תצטרכו לייצר Aliases או לשטח את טבלת ה-Audit_Detail מאחר והיא מחזיקה את הערכים הנ"ל באותה עמודה בטבלה.

10.מומלץ לטעון את ה-LOV של שדות ה-DETAIL_TYPE.Detail_Type_Description
וה-DETAIL_TYPE.Detail_Type_Description לטבלאות Dummy שטוחות ואז לבצע Nested LOV בינהם כך שתוכלו לבחור בסוג פעולה Universe Name ותחתיו לבחור את שם העולם הספציפי.

Thursday, September 10, 2009

The Complete Edit Formula Guide -ספר הפונקציות השלם ל-BO

נכון שספר ה- Help של ה- Deski קצת קמצן,בספר הזה שהוא די עתיק בעצמו תוכלו לקבל מידע רחב וברור יותר
כולל דוגמאות על עולמות ה- Demo מה המשמעות וההתנהגות של כל נוסחא ונוסחא:

http://www.qdrive.net/yoavl/file/43254/40e7e62c79597e8ed5da5153658b98aa

Sunday, July 26, 2009

התנהגות Shortcut Joins

במסמך הבא תוכלו לקרוא על השימוש Shortcut Joins בדיזיינר,מתי להשתמש בהם,מגבלות השימוש בהם ואיך לעקוף מצבים בהם לא ניתן להשתמש ב- Shortcut Joins....
במצגת השנייה תוכלו ללמוד על מגבלות ה - Shortcut Joins :

Thursday, June 25, 2009

שיפור רשימות ערכים עייפות

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

http://www.qdrive.net/yoavl/file/5645/15bdc862c0f1fe0f255408c151b41d5a


2.ומי שרוצה לרדת ממש לעומק מוזמן לקרוא כאן את המצגת שנכתבה ע"י Michael Aarons ומכילה גםכמה טריקים מגניבים של Prompts:

http://www.qdrive.net/yoavl/file/5646/2090aedef6783a97b8d618015a11653b


Friday, November 28, 2008

ANSI 92 - פרמטר ב-Designer

החל מגרסא 6 ניתן לשנות את הגדרות ה- SQL בעולם בכלל ובאובייקטים נבחרים בפרט על מנת ליצור אופטימיזצייה של ה- SQL בשאילתות,להלן האפשרויות,אך נקדים ונאמר כי הפיצ'ר נתמך ברוב ה- DB's ,
ב- Oracle רק החל מגרסא 10,על כן בדקו קודם שסוג וגרסאת ה-DB שלכם תומכת בפיצ'ר זה.

אז מה הוא נותן לנו ? דרך תפריט ה-file-->parameters ,לשונית ה-parameter
נשנה את הפרמטר הראשון ANSI 92 מ- N ל- Y :

כעת נבחין במס' שינויים ביכולות העולם:

1. ניתן לבצע Full Outer Join בין טבלאות :


2. רוב ה- DB's זורקים את ה- Joins לפסוקית ה- Where (טרה לא...)

ANSI 92 מעביר אותם אל פסוקית ה- From:
לפני:

אחרי השינוי ל-ANSI 92 :


המשמעות היא שה- SQL שנוצר כעת עשוי להיות אופטימלי מאחר וה- Joins מתבצעים כבר ברמת ה- From ,כך שכמות הרשומות שהשאילתא צריכה לעבד מצטמצמת כשמגיעים ל- where

(ארקדי ודימה אומרים שתמיד עדיף ככה וכך גםה-execution plan של ה-SQL...)

3.אפשרויות עריכה מתקדמות ב- Join

אפשרות זו קובעת איזה אובייקטים שהמשתתש בוחר בתנאי השאילתא יעברו לפסוקית ה- From,כאשר ניתן לבחור בחלונית זו רק את אותם אובייקטים המבוססים על הטבלאות ב- Join,המשמעות היא שוב שביצועי השאילתא עשויים להיות טובים יותר...


















א.אפשרות ראשונה :
Default behavior / No objects in FROM = אובייקטי התנאי נשארים בפסוקית ה-FROM :

ב.אפשרות שניה :
כל- All objects in FROM= אובייקטי התנאי יועברו ל- FROM :

ג.אפשרות שלישית:

Selected objects in FROM = רק האובייקטים הנבחרים יועברו לפסוקית ה- FROM


בסה"כ הכל ANSI 92 נותן אפשרויות שליטה מתקדמות בייצור ה-SQL הגנרי בעולם ויכול לשפר את כל מבנה העולם.עכשיו מה שנשאר לכם זה רק לדבר עם איגור ה-DBA שיבדוק האם יש באמת שיפור בשאילתות....

Sunday, November 23, 2008

Universe Designed for Dashboards Metrics

מהם כללי הבניה של עולם שנוצר עבור שעונים (dashboards) ב- BOXI ?
כיצד ניתן ליצור אופיטמיזצייה של הדוחות והשעונים שיופקו על גבי עולם כזה?
קראו הכל כאן:

Saturday, November 22, 2008

General Best Practices in Universe Design

מצ"ב לינק למצגת המתארת בקווים כלליים (יש תמונות!) איך ליצור Universe יעיל,המצגת מתאימה לדייזנרים בתחילת דרכם
וגם למנוסים שהיו רוצים לקרוא בכלליות על יסודות ה-Designer :

http://www.gaboug.org/archive/200809_UniverseBestPractices.ppt