מאי 10 2012

כנס SQL Server Explore 2012

מאת: נושאים: כנסים

 

10-11.6.12 | מלון דניאל, הרצליה 
*ההשתתפות בתשלום

מיקרוסופט בשיתוף ג'ון ברייס מכללת הי-טק מזמינות אותך ליומיים של אימון מקצועי מתקדם, המיועד ל-DBAs , מפתחים ומקצועני BI ויכלול מגוון רחב של סמינרים ממוקדים, שיועברו על ידי מיטב המרצים ואנשי המקצוע בארץ. 

בכנס ישנם סמינרים רבים בנושא SQL Server  ו- BI. בין הנושאים הקשורים ל- BI :

  • Building enhanced reporting applications using reporting services
  • Self-service BI solutions
  • Building a front end BI solution based on SharePoint 2010‎
  • Managing BI projects successfully
  • SQL Server Integration Services – enterprise ready ETL
  • Take Analysis Services to the extreme
  • Microsoft business intelligence solutions – the high view
  • Microsoft in-memory BI solutions
כל אחת מהסדנאות הינה של יום שלם כך שהרבה מאד חומר מועבר בהן. לפני שנתיים הייתי בכנס דומה ואני ממליץ על כך בחום. 

לפרטים נוספים והרשמה לחצו כאן

Share

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

מאי 10 2012

תובנה מכנס BI

לפני מספר שנים חלה מהפיכה. כוחם של הצרכנים עלה באופן משמעותי מול החברות המספקות שירותי ומוצרים. שתי דוגמאות של חברות שלא הבינו זאת:  תקלת שירות של אמריקן איירליינס אשר שברו ללקוח גיטרה ואחר כך זלזלו בפנייתו גרמה לו להעלות סרטון ליו-טיוב. מדובר בזמר (גיטרה) אשר יצר שיר על האירוע והסרטון זכה ביוטיוב ל 11 מליון צפיות ואלפי תגובות.
מחאת הקוטג' החלה מכמה אנשים שהתלוננו שהמחיר גבוה מידי. הנהלת תנובה לא ידעה להעריך את עוצמת המחאה בזמן אמת ולבסוף תנובה ספגה ירידה משמעותית בהכנסות וההנהלה פוטרה.
בעבר לא יכול היה לקוח שנפגע להוציא את קולו כך שמיליוני אנשים ישמעו אותו.
לארגונים בכלל ולמערכת BI מהווה נושא זה אתגר גדול מבחינה טכנולוגית וניהולית. עד היום מדדו ארגונים את "שווי" הלקוח בשני אופנים:
1. על פי פעילות הלקוח מול החברה: לקוח שקנה הרבה או שאופי קניותיו מראה שיש לו פוטנציאל לקניה גדולה סווג בצורה שונה מלקוח קטן שאין לו פוטנציאל פיתוח.
2. שמות מפורסמים: כאשר נציג השירות הטלפוני של החברה מזהה את השם אברי גלעד לדוגמה, השירות הופך אוטומטית לשירות VIP.
מעתה, ארגונים שלא ירצו לספוג נזק תדמיתי ועסקי קשה כמו תנובה ואמריקן איירלינס אשר המקרה שלהם תואר לעיל, יצטרכו למדוד לקוחות על פי עוצמתם התקשורתית במדיות החדשות: רשתות חברתיות, בלוגים וכדומה.
ארגונים יצטרכו להשקיע במערכות לניקוד לקוח על פי עוצמת הקול שלו ברשת: כמות חברים בפייסבוק, כמות עוקבים בטוויטר, האם יש לו בלוג? כמה קוראים יש לבלוג שלו וכו'.

Share

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

מאי 02 2012

איך לעשות Log Shipping בשעה אחת

מאת: נושאים: ETL

 

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

מערכת ה- CRM של החברה אוספת מידע עצום.

במסגרת הפרויקט יש צורך להעביר מספר פעמים ביום את הרשומות החדשות משרת ה- CRM אל ה- Staging Area של מערכת ה- BI.

שרת ה- CRM נמצא במקום פיסי שונה משרת ה- BI והחיבור בינהם מבוסס על האינטרנט (חיבור לא מהיר ביותר).

הפתרון שנבחר כדי להביא את הרשומות החדשות משרת ה- CRM אל שרת ה- BI הוא Log Shipping. אני לא DBA ולמרות זאת ניסיתי לבצע את ההגדרות הדרושות. כימעט הצלחתי אבל עם כימעט לא
הולכים למכולת.

התקשרתי לולינור וביקשתי עזרה. נפגשתי עם עידו וכמו שאומרים פאף…. תוך שעה הכל פעל.

תודה עידו.
לפעמים טוב לדעת לקבל עזרה.

Share

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

מרץ 18 2012

התקנת SQL Server 2012

מאת: נושאים: כללי

סיימתי להתקין את SQL Server 2012 על המחשב שלי. כפי שנכתב בעבר בעת התקנת SSAS יש לבחור במודל OLAP קלאסי או ב- Tabular Mode. אני בחרתי ב- Tabular. תוכלו לראות את תהליך ההתקנה כאן: SQL Server 2012 install

Share

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

מרץ 12 2012

מפגש משתמשי BI של מיקרוסופט

מאת: נושאים: Hebrew,כנסים

הרשמה: http://biug29.eventbrite.com/

ב- 28.3.2012, יום רביעי יערך מפגש משתמשי BI של מיקרוסופט. המפגש יערך במשרדי מיקרוסופט ברעננה, רח' הפנינה 2.

במפגש יציג רונן חן את מנגנון האבטחה של מיקרוסופט – קרברוס. יודגם כיצד להשתמש בקרברוס על רכיבי ה- BI השונים: Reporting Services, Excel Services PerformancePoint.

לוח זמנים:

17:30 התכנסות וכיבוד קל

18:00 קרברוס חלק I

19:00 הפסקה מתוקה

19:15 קרברוס חלק II

20:30 A&Q

21:00 סיום מתוכנן

על המרצה:

רונן חן, מנטור טכנולוגי. מנהל קהילת ה-BI במיקרוסופט ישראל, מרצה ותיק בטקאד, אירועי SharePoint ו SQL, ומכהן בתפקיד סמנכ"ל טכנולוגיות בPyramidAnalytics.com.

 

image

צילום: קובי קנטור

 

הרשמה: http://biug29.eventbrite.com/

Share

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

מרץ 07 2012

SQL Server 2012 RTM – גרסת ייצור להורדה

מאת: נושאים: ETL,כלי קצה

מיקרוסופט שחררה את הגרסה הסופית של SQL Server 2012. ניתן להורידה מכאן:

בהמשך אכתוב על מספר תכונות חדשות.

חג פורים שמח.

Share

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

מרץ 07 2012

ארוע ההשקה הוירטואלי של SQL Server 2012 – היום אחר הצהריים

היום בשעה 18:00 לפי שעון ישראל יחל אירוע ההשקה הויטואלי של SQL Server 2012. האירוע מכיל כמות גדולה של הרצאות. בין ההרצאות הקשורות ל- BI:

  • הרצאה בנושא ColumnStore Index – שיטת אינדוקס חדשה שנועדה לביצועים גבוהים באמצעות שמירת עמודות של טבלה בזיכרון.
  • Unlocking the Value of Big Data with Microsoft Business Intelligence
  • Rapid Data Exploration: Powerful Self-Service Analysis with PowerPivot
  • Managed Self-Service BI: End User Created, IT Managed
  • Credible, Consistent Data: Going Under the Hood with the New BI Semantic Model
  • Credible, Consistent Data: Improving Data Quality with the New Data Quality Services
  • Credible, Consistent Data: Empowering IW / Data Experts to Efficiently Manage Important Data with the New Master Data Services Add-In for Excel
  • Credible, Consistent Data: Introducing New Team-based Data Integration with Integration Services

תכנית מלאה אפשר לראות כאן

הרשמה חינם – כאן

Share

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

מרץ 05 2012

הצגת SQL Server 2012 – ערן שגיא

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

שיפור איכות הנתונים דורש השקעת תיכנות גדולה. כדי לסייע, פותחו  ב- SQL Server 2012 שני שירותים אשר תפקידם לטפל בשני ההיבטים של שיפור איכות הנתונים:

1. שיפור איכות: תל אביב, תל-אביב, יפו ו- ת"א כולם הם אותה עיר. רשומות לקוח המגיעות עם אחת מהאפשרויות לכינוי העיר תל אביב , יעודכנו לשם עיר אחיד. דוגמא נוספת: כתובת הדואר האלקטרונית שלי נרשמה: rimon@olap במקום rimon@olap.co.il.

2. במערכת ה- CRM רשום שלקוח מסויים גר בעפולה. במערכת הנהלת החשבונות רשום שהלקוח גר בחיפה. היכן גר הלקוח שלנו ?

הבעיה שתוארה בסעיף הראשון תטופל על ידי שירות חדש המטפל בבעיות הקשורות לכתיב הנתונים. שגיאות איות וכדומה. רכב זה נקרא Data Quality Service – DQS. רכיב זה משתמש באלגוריתמים הדומים לאלו של data mining על מנת לנסות ולתקן שגיאות בנתונים. בנוסף הוא מכיל מנוע כללים ידני אשר מאפשר למפתח להכניס כללי תיקון שונים. אוסף הכללים שאמור לשפר את איכות הנתונים נשמר בתוך רכיב Knowledge management. באמצעות רכיב זה ניתן גם לבטל כפילויות של נתונים. SSIS מתחבר אל רכיב זה באמצעות פעולה הנקראת DQS cleansing. הפלטים של פעולה זו הינם נתונים תקינים ונתונים שאוסף החוקים הקיים לא הצליח לתקנם והם יכולים להשמר במקום אחר.

הבעיה שתוארה בסעיף השני, דהיינו כיצד לדאוג שמאפיינים שונים של הישויות העסקיות שלנו יהיו זהות בכל מערכות המידע שלנו מטופלת באמצעות שירות Master Data Services – MDS.

SSIS יודע להשתמש בשני שירותים אלו. שירות ה- DQS מאפשר ל- SSIS לבצע LOOKUP חכם וכך לוודא שהמערכת מתייחסת ל- ת"א, תל-אביב, תל-אביב, יפו כעיר אחת ויוצרת אחידות במימד המכיל את שם העיר.

ה- DMS אמור לשרת למעשה לא רק את ה- BI אלא את כל מערכות הארגון. זהו שירות המחזיק נתונים בדוקים ותקינים של מאפייני הלקוח לדוגמה. יהיה הגיוני אם גם מערכת הנהלת החשבונות וגם מערכת ה- CRM יבדקו (ויעדכנו) בשירות זה היכן גר הלקוח.

SSIS – שיפורים:

1. UNDO – אפשר להחזיר לאחור פעולה שגויה בזמן הפיתוח.

2. כשיש תהליך המחובר בין שני תהליכים אחרים ומוחקים אותו, שני התהליכים שמעליו ומתחתיו נשארים מחוברים.

3. מיפוי מהיר יותר של שדות מ- Sourceאל Target.

4. כתיבה מחדש של המנוע הפנימי. כל המערכת חיה בתוך SQL SERVER. לאחר הפצת ה- Packageלשרת ה- DBA מקבל אחריות ויש לו יכולת, מסביבת התחזוקה לשנות את ערך הפרמטרים דרכם הוא יכול להריץ את אותו תהליך פעם אחת על סביבת פיתוח ופעם שניה עם סביבת ייצור. כך אפשר ש- 4 פרויקטים שונים ירוצו על שרת מסויים ולאחר מכן על שרת אחר מבלי שהמפתח יצטרך להתערב.

5. רכיב ה- TOOLBOX נמצא מחוץ לויזואל סטודיו וכך אם משדרגים גרסת ויזואל סטודיו אין פגיעה בכלי הפיתוח ונחסכות בעיות התאימות שהיו.

SQL Server data tools – סביבת פיתוח ה- BI. כל Package היה יישות נפרדת עד גרסת 2012. זה גרם לבעיות למשל של לוגים וסיסמאות בין מפתחים שונים. עתה ישנו מונח ה- Project. כל ה- Packages שתחת Project מכירים אלו את אלו וחולקים למשל פרמטרים. ישנה אפשרות לנהל פרמטרים אשר יכולים להשתנות בזמן ריצה ופרמטרים שרק ה- DBA יכול לשנות בעת הפעלה (למשל שם שרת). שם השרת כדוגמה הוא פרמטר שמשותף לכל ה- Packages והוא ניתן לשינוי בעת הפעלה בלבד אך לא בזמן ריצה.

ניתן לבצע שיתוף של חיבור (Connection) בין packages שונים. פעולה הדומה לשיתוף חיבור ב- SSRS 2008 R2. באופן זה, כפי שתואר לעיל קל הרבה יותר לשנות פרמטרים בחיבור.

SSIS הינו רכיב חיצוני והוא מנהל בצורה מרוכזת את הצפנת התהליכים. כך נחסכות מאיתנו בעיות של איזו סיסמא צריך כדי לפתוח PACKAGE מסויים, מה קורה כשרוצים לשדרג את  SQL Server וכו'. ה- packages נשמרים בתוך רכיב ייעודי: integration services catalog.

ישנה מערכת חדשה אשר תפקידה לנטר בצורה יעילה את הדיווח על תוצאת הריצה (הצליחה / נכשלה וכו').

Self service BI

בעולם זה ישנם שני רכיבים: אנליזה של נתונים: PowerPivot

רכיב הדוחו"ת של נתונים: PowerView אשר תלוי בכך שיש גם SharePoint.

SharePoint  מאפשר הפצת גליון אקסל עם PowerPivot באופן webi .

במצב זה SharePoint מזהה שמדובר בגליון אקסל עם דטה בייס (PP). הדטה עובר הסבה ונשלח לשרת OLAP אשר הינו חלק משייר פוינט . האקסל עצמו מוצג ע"ג שייר פוינט. כך גליון האקסל יכול להציג הנתונים דרך ה- WEB אולם כלי קצה אחרים יכולים להתחבר אל בסיס הנתונים שיצר גליון זה.

לדברי מיקרוסופט אקסל באופיס 15 יקבל דחיפת BI חזקה קדימה.

DAX הינו שפת החישובים של PowerPivot. זוהי שפה פשוטה יותר מאשר MDX והיא דומה במידה מסויימת לנוסחאות הרגילות של אקסל.

PowerPivot הינו מנוע OLAP עם מנוע הדחיסה VertiPack, אשר דוחס את הנתונים והאינדקסים. העבודה עם הנתונים מבוצעת כאשר הם נשארים דחוסים. דבר זה מאפשר להחזיק על מחשב עם 4GB נתונים בגודל 20-40 GB. באופן כללי מומלץ להשתמש עם גרסת 64 BIT אשר תאפשר כמות אפילו גדולה יותר של נתונים.

ארבע גרסאות SSAS מיועדות להיקפים שונים של משתמשים וכמות נתונים:  

  • גרסה למשתמש בודד -  PowerPivot: פועל  על תחנת המשתמש כתוסף חינמי לאקסל 2010. גרסה זו מוגבלת מוגבלת כיוון שלא רוצים שהיא תמוטט את שרת ה- SharePoint בעת העבת מודל נתונים אל השרת.כיוון שזו גרסה למשתמש בודד היא אינה כוללת מודל הרשאות. לאחר ייצוא ל- SharePoint ניתן לשלוט בגישה אל הנתונים בשיטת הכל או כלום. כלומר מי שיכול לראות את הדף רואה את כל הנתונים ולא רק סניף מסויים לדוגמה.
  • גרסה לצוות – SharePoint and SSAS Server. התקנה של שרת SSAS במצב Integrated mode על SharePoint. מצב זה מאפשר למי שיצר מודל PowerPivot להפיצו לצוות עבדוה באמצעות העלאתו אל שרת SharePoint. כל נתוני ה- PowerPivot עולים אל ה- RAM של שרת ה- SharePoint בכל פעם שמשתמש נכנס אל העמוד הכולל את ה- PowerPivot. כאשר אף אחד לא מחובר לגליון  SSAS מוריד לדיסק את הנתונים עד הפעם הבאה שישהו נכנס לקובץ. הרשאות מבוצעות כאמור דרך ה- SharePoint בשיטת "הכל או כלום" ולכן זה מתאים לצוות עבודה ולא לרמת הארגון כולו.
  • גרסה ארגונית – CORPORATE BI – TABULAR MODE – מהווה שרת SSAS לכל דבר אך בנוי ב- RAM. מכיל מודל הרשאות עצמאי. מצוין כאשר מסתכלים על רמה מפורטת של הנתונים. ניתן לבצע IMPORT למודל PowerPivot אשר נמצא ב- SharePoint. פרוייקט אופייני יכול להתחיל ממשתמש שיצר מודל PowerPivot והעלה אותו לשרת SharePoint. לאחר זמן מה, מנהל המערכת רואה שדף זה משמש אנשים רבים ואז מעבירו לניהול יעיל יותר באמצעות יצוא של הנתונים אל שרת SSAS ייעודי, כך שיהיו תמיד בזיכרון ולא רק על פי דרישה. מצב זה מצאים למבני נתונים אשר אינם דורשים חישובים מורכבים מצד אחד וכן דורשים ירידה לרמה נמוכה ביותר (לדוגמה מספר חשבונית) מהצד השני.
  • CORPORAE BI – MOLAP – מודל רב מיימדי קלאסי.מצויין כאשר משתמשים ברמת מקרו – נתונים סיכומיים ו/או חישובים מורכבים.

DirectQuery תכונה חדשה של SSAS במצב Tabular. כפי שנרשם לעיל, מצב זה מאפשר ירידה לרמה מפורטת של הנתונים במהירות כיוון שכל הנתונים נשמרים בזיכרון השרת. ברם, במערכת עם נפח נתונים גדול, לא ניתן בפועל לשמור את כל הנתונים בזיכרון ה- RAM. לצורך כך, נוצרה אפשרות ה- DirectQuery. מגדירים במודל הנתונים אלו נתונים עולים לזיכרון ה- SSAS עם הפעלתו ואלו נתונים נשארים בבסיס הנתונים הרלציוני. המשתמש מפנה את כל השאילתות שלו אל שרת ה- SSAS באמצעות שאילתות DAX. כאשר SSAS מזהה שנדרשים נתונים אשר נשארו בטבלאות בסיס הנתונים הרלציוני, הוא מוסיף לשאילתת ה- DAX של המשתמש גם שאילתת SQL אותה הוא מחולל בעצמו ולבסוף מציג למשתמש בצורה שקופה נתונים שהושגו משתי השאילתות (DAX מ- Tabular ו- SQL מ- SQL Server relational table).

דו"ח מ- SSRS – נמצא בתוך SharePoint בצורה מוטמעת לגמרי. ניתן להגדיר פרקי זמן מסויימים לעדכון הנתונים.באמצעות רכיב Alerting ניתן להפיץ את הדו"ח במייל כאשר שדה מסויים עולה ב- 40% לאחר הגדרה שאת הבדיקה נבצע כל יום בשבע בבוקר.

בין הכלים החדשים אשר ייחשפו ב- 2012 נמצא גם מחולל דוחו"ת חדש – PowerView (לא לבלבל עם PowerPivot). PowerView הינו מחולל דוחו"ת מבוסס Sliver Light אשר מופעל על ידי המשתמש הסופי על מנת ליצור דוחו"ת. שני תנאים חייבים להתקיים על מנת להשתמש ב- PowerView:

1. התקנת SharePoint enterprise edition.

2. התקנת SQL Server analysis services 2012 business intelligence edition or enterprise edition במצב Tabular.

PowerView פועל מתוך sharePoint מול שני מקורות נתונים בלבד: SSAS Tabular mode או גליון PowerPivot אשר נשמר ב- SharePoint. שתי תכונות יפות של PowerView הוצגו:

א. יכולת לבנות מספר דוחו"ת ולשמור אותם יחד כמו סוג של מצגת PowerPoint. לשם הצגה למשל מול הנהלת החברה. כמובן שכל הדוחו"ת שומרים על הקשר עם בסיס הנתונים ולכן ניתן גם לשנותם וגם לרענן את נתוניהם בכל עת.

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

לסיכום: הרבה כלים חדשים וטכנולוגיות מעניינות. אפשר לראות שמישהו במחלקת השיווק במיקרוסופט אוהב תוכנות עם עוצמה (PowerPivot, PowerView, PowerPoint). בקרוב יוצגו (אולי) הכלים: PowerToThePeople, או כלי שיחזיר אותי לצעירותי כחקלאי בקיבוץ: PowerTakeOff.

 

Share

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

פבר' 20 2012

SSAS can forgive but never forget*

מאת: נושאים: כלי קצה

While you create a new dimension in SSAS, it tries to guess the name you like to give to your dimension. For example: If the table name is DimCustomer then SSAS will think you like to call the dimension that is based on that table: Dim Customer. Well, I don't like spaces on objects. It makes my life harder while I need to refer to this object on a code (call it [Dim Customer] instead of DimCustomer). For that reason I usually rename the dimension to a name without spaces. SSAS accept the rename request and up until now I thought everything is ok. But, as the title implies, SSAS never forget.

The change of the dimension name made the dimension name different from the dimension ID.

image

You may use the cube forever without any difficulty after that change. But as it happened to me, if you try to give permission on part of the data of that dimension to a user, SSAS start giving you a confusing error message like:

The 'Rosh Zevet' attribute in the 'Dmn Menael Lakoah' dimension has a generated dimension security expression that is not valid.DimensionPermission (1, 2) The dimension '[DmnMenaelLakoah]' was not found in the cube when the string, [DmnMenaelLakoah].[Rosh Zevet].[yuval kedmi], was parsed

You may ask yourself, how can the permission I choose using the BIDS interface (just choose one member of the dimension) could 'generate a dimension security expression that is not valid' ?

Later it said that it can't find a dimension that you clearly see it is part of the cube.

image

 

I have noticed that the dimension name as I know it (without spaces) shown on the dimension list.

Inside the brackets I could see the original dimension name (which I already forgot because I rename it long time ago).

I tried to rename the dimension again and give it the original name SSAS gave it, [Dmn Menael Lakoah] . Everything works well. Half a day went to the trash but at the end the user got his permission.

I have opened a Microsoft connect feedback. If, like me you think than should be improved, please vote for it here:

https://connect.microsoft.com/SQLServer/feedback/details/725825/after-renameing-dimension-on-ssas-there-is-error-while-trying-to-give-permission-on-the-member-level-of-this-dimension

*  Kennedy, John F. : "Forgive your enemies, but never forget their names."

more_720x300_en

 

Share

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

פבר' 20 2012

Avoid Divide By Zero Error on SSRS

מאת: נושאים: כלי קצה

SSRS functions (as all functions) doesn't like number divided by zero. But, SSRS function behaves weird when they meet an expression that can lead to divide by zero error.

A common report will show the amount of sale compare the target sales. To check if the sales amount meets the target we will divide the sale amount by the target. If one of the store managers on our network haven't entered the planned sale amount yet, it will be zero (on the null) and will cause an error. To keep our report (and gauge) clean, we will try a simple error handling.

For example I used the database ContosoRetailDW. You may download this database from here. I think this database is simpler than AdventureWorks and I prefer to make my demos on it.

I update the target of Amsterdam store and made it zero:

update [dbo].[FactSalesQuota] set SalesAmountQuota=0 , SalesQuantityQuota=0 where storekey=240 /* Contoso Amsterdam Store */and ScenarioKey=2 /* Target */

After that I built the query that will be used by the report. The query show sales compare to target for five stores.

 


select
    StoreName
    , sum(SalesAmount) as SalesAmount
    , sum(SalesAmountQuota) as SalesAmountQuota

 

from (
SELECT
      s.StoreName
      , SalesAmount
    , 0 SalesAmountQuota
  FROM dbo.FactSales f inner join dbo.DimStore s on f.StoreKey=s.StoreKey
  where s.StoreKey between 240 and 245 /* 5 Stores Only, To keep the report simple */

 

union all

 

 select s.StoreName
    , 0 as SalesAmount
    , SalesAmountQuota
 from dbo.FactSalesQuota F inner join dbo.DimStore s on f.StoreKey=s.StoreKey
 where f.ScenarioKey=2 /* Budget */
 and   s.StoreKey between 240 and 245
) H
group by     StoreName

I had to use the Union operator instead of join to connect the quota table into the sale table because there could be a store that sold something but doesn't have quota yet and there could be a store that has a quota defined but hasn't sold anything yet.

The Query returned those results:

I have build a report with the expression Amount Sales / Quota to show how well did we meet our goals.

image

After running the report I got a #Error on Amsterdam store. image

I decide to change the expression and add the IIF condition to help SSRS deal with the divide by zero that make his life harder. I wanted just to tell it, if the quota is zero, don't bother to calculate, just show empty cell. It looks like:

= iif(Fields!SalesAmountQuota.Value=0,"", Fields!SalesAmount.Value /

 

Fields!SalesAmountQuota.Value)

To my surprise, nothing changed.

After I spent some research time I found that SSRS like so much to calculate numbers that it does so even if it's not needed.

In an IF condition expression there are two expressions that only one of them should be shown up, depend on the condition. However, SSRS tries to calculate both the shown expression and the expression that it should not show. In our example, the IIF check and see that sales quota = 0 and that empty cell ( " " ) should be seen . But since it does calculate all the expressions, it also tries to calculate the expression on the FALSE part of the IIF. At that point it again makes the divide by zero error and fail the whole expression as error divide by zero. To avoid that error you should write the formula with two IIF conditions:

=  iif(Fields!SalesAmountQuota.Value=0,"",Fields!SalesAmount.Value
/iif(Fields!SalesAmountQuota.Value=0,1,Fields!SalesAmountQuota.Value))

Now, all calculations on the expression can be calculated without error. Let's check:

The first IIF:

Quota = 0 –> put "" (empty cell)

Quota <> 0 –> Sale / Quota if Quota <> 0 or Sale / 1 if Quota = 0 . At this point, unlike SSRS we know that quota <> 0 (it was checked on the first IIF) but we have to write it like that to make sure that SSRS will be able to calculate all parts of the IIF while quota = 0.

image

I think this is not the most efficient way to calculate expressions. Unfortunately SQL Server 2012 reporting services work on the same way.

I have opend a Microsoft connect feedback on that topic. You may vote for it here:

https://connect.microsoft.com/SQLServer/feedback/details/725800/ssrs-iif-function-calculate-both-true-and-false-part-of-the-iif-expresion

Adv

 

Share

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

הבא »