English French German Spain Italian Dutch Russian Portuguese Japanese Korean Arabic Chinese Simplified

SSRS: נוסחאות על ציר הזמן...

שלום לכם,

מי שעוסק ב BI בכלל וב SSRS בפרט יודע עד כמה חשוב להכיר ולחלץ נתונים שונים מתאריכים.
חוץ מזה שזה כיף גדול, שימוש בתאריכים וחישובי זמנים זה חובה בעולם ה BI. על כן, צירפתי לכם בפוסט הנוכחי לא מעט נוסחאות שאני בטוח שיהיו שימושיות בבניית דוחות SSRS.
 
 
הפונקציה הראשונה והחביבה עלי היא ()Datepart שיודעת לחלץ מתאריך מסויים נתונים שימושיים עבור הדוח.
נצא מנקודת הנחה ששם שדה התאריך הוא MyDate והוא שווה ל: 
16/12/2012 11:41:07 AM 
 
הנה טבלה שמכילה את הפרמטר בנוסחה והערך שהיא תחזיר לנו:
 

פרמטר
מבנה הנוסחה
תוצאה
SecondDatePart(“s”, Field!MyDate.Value)07
MinuteDatePart(“n”, Field!MyDate.Value)41
HoursDatePart(“h”, Field!MyDate.Value)11
Day of WeekDatePart(“w”, Field!MyDate.Value)1
Day of MonthDatePart(“d”, Field!MyDate.Value)16
Day of YearDatePart(“y”, Field!MyDate.Value)351
Week of YearDatePart(“ww”, Field!MyDate.Value)50
MonthDatePart(“m”, Field!MyDate.Value)12
QuarterDatePart(“q”, Field!MyDate.Value)4
YearDatePart(“yyyy”, Field!MyDate.Value)2012
 
 
פונקציה נוספת שחביבה עלי במיוחד היא ()Dateformat שמחזירה לנו פורמטים שונים של תאריכים. הפונקציה חביבה עלי במיוחד בגלל שניתן להשתמש בקיצורים.
גם הפעם נניח ש:
MyDate= 16/12/2012 11:41:07 AM
 
 
 
מבנה הנוסחה
תוצאה
FormatDateTime(Field!MyDate.Value,1)
16-12-2012
FormatDateTime(Field!MyDate.Value,2) 16/12/2012
FormatDateTime(Field!MyDate.Value,3)
Dec-16-2012
FormatDateTime(Field!MyDate.Value,4) Dec-16-12
 

פונקציה נוספת שמאפשרת גמישות בפורמט התאריכים היא ()Format, שימו לב שניתן לבנות פורמטים שונים בקלילות.


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


 והדוגמאות.... 

מבנה הנוסחה
תוצאה
Format(Field!MyDate.Value,”dd-MM-yyyy”)
16-12-2012
Format(Parameters!Date.Value,”dd/MM/yyyy”) 16/12/2012
Format(Parameters!Date.Value,”MMM-dd-yyyy”)
Dec-16-2012
Format(Parameters!Date.Value,”MMM-dd-yy”) Dec-16-12
 
 
להתראות בפעם הבאה.
חיים.

מיון פרמטרים ב SSRS מרשימת SharePoint

שלום לכם...מזמן לא כתבתי פה והסיבה העיקרית היא שאני עסוק בעבודה מעל הראש...המון פרוייקטים...המון לחץ והחשוב מכל המון SharePoint ו BI.
לאחרונה יצא לי לעבוד המון ב SSRS שהוא כלי נפלא להפקה ויצירת דוחות. כמובן שהוא מתממשק עם SharePoint כך שאנחנו יכולים להפיק דוחות מנתונים השמורים ברשימות.
עם כל הסימפטייה שלי לכלי הזה, כשרוצים לסנן פרמטרים שנישלפים מרשימת SharePoint לא ניתן לעשות זאת בקלות.
ויותר מזה ב MSDN כתוב שלא ניתן לעשות זאת:
"You cannot change the sort order or specify groups in the graphical query designer"

קבלו דרך לבצע זאת בעזרת WorkAround נחמד ומעט קוד.

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

כדי לבצע מיון נבצע את השלבים הבאים:

בשלב הראשון נכניס את הקוד הבא ל Report Properties:
Public Shared Function sortObject(ByVal spstr As Object(), _
              ByVal lblStr As Object(), ByVal iCol As Integer) As Object()
    Dim tempLbl(UBound(lblStr)) As Object
    Dim tempVal(UBound(spstr)) As Object
    tempLbl = lblStr
    Array.Sort(lblStr)
    For i As Integer = 0 To UBound(lblStr)
        For j As Integer = 0 To UBound(tempLbl)
            If lblStr(i) = tempLbl(j) Then
                tempVal(i) = spstr(j)
                Exit For
            End If
        Next
    Next
    If iCol = 1 Then
        Return tempVal
    Else
        Return lblStr
    End If
End Function
וכך זה ניראה:

בשלב השני נגדיר Dataset נוסף לשדה ממנו אנחנו יוצרים פרמטר (בדוגמה שמו Dataset1).

לאחר מכן נגדיר את הפרמטר הראשון מתוך שניים הנה ההגדרות שלו:

לאחר מכן נגדיר את הפרמטר השני לפי ההגדרות הבאות:



בשורת ה Label וה Value נזין את הערך הבא:


=Code.sortObject(Parameters!Parameter1.Value, Parameters!Parameter1.Label, 2)


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

ולבסוף התוצאה הממויינת:






להתראות בפעם הבאה,
חיים.



איך לבצע Join/Merge לשתי רשימות ולבצע תצוגה משותפת.

חישבו לעצמכם כמה נחמד זה אם היינו יכולים ליצור תצוגה של שתי רשימות או יותר כאשר אנחנו מקשרים את הרשימות בעזרת שדה משותף כלשהו...
למעשה אם נאפיין מראש ובצורה נכונה את מבנה הרשימות של אתר ה SharePoint שלנו נגיע למבנה רשימות שמזכיר לגמרי מבנה נתונים רלציוני או בקיצור RDBMS.

מה שאומר שיש לנו את היכולת בעזרתו המופלאה של ה SharePoint Desiner לבצע שאילתות SQL ללא קוד.

שתי השאילתות הן:

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name

או

SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2
איך ליצור Linked Data source:
נפתח את ה SharePoint Desiner נקליק על data sources (מסומן ב 1) וניבחר Linked Data source (מסומן ב 2).
לאחר לחיצה על Linked Data source יפתח החלון הבא:

ניבחר ב Configure Linked Source ומהחלון שניפתח ניבחר את הרשימות שנירצה לחבר:



נקליק על NEXT וניראה את החלון הבא:
לפנינו שתי אפשרויות:
  • Merge - שמאפשר לנו בדיוק כמו ב SQL לבצע UNION ALL (כפי שמודגם למעלה), חשוב שבמקרה הזה יהיו לנו אותן השדות בשתי הטבלאות.
  • Join - שמאפשר לנו בדיוק כמו ב SQL לבצע INNER JOIN (כפי שמודגם למעלה), ובמקרה הזה חשוב שיהיה לנו שדה משותף שנוכל להשוות אותו.
בלחיצה על Finish נגיע לחלון האחרון, בלשונית GENERAL נעניק שם למקור נתונים:



בלשונית Source-->Source-->Edit-->Fields נוכל לבחור איזה שדות יופיעו לנו בDesigner.



בהדגמה בהמשך אני יתייחס לאפשרות השנייה שהיא JOIN מהסיבה שהיא יחסית "מורכבת יותר".


יצירת תצוגה של שתי רשימות בעזרת שימוש ב Linked Data source:

לאחר שהגדרנו את מקור הנתונים ניצור את התצוגה. בשלב הראשון ניצור עמוד חדש ב Designer.
ניתן ליצור עמוד ASPX או עמוד WebPart.



בעריכת העמוד נוסיף Empty Data View או שניבחר את ה Data View  שיצרנו:
בחלון ה Data Source Details ניבחר את השדות שנירצה להציג מהרשימה הראשונה וניבחר ב Multiple Item View.
הנה התוצאה לאחר שהוספתי עמודה נוספת (חשוב מאוד להמשך):
הפעם ניבחר שדות מהרשימה השנייה וכשסמן העכבר בתוך העמודה החדשה שהוספנו ניבחר את השדות מהרשימה השנייה והפעם ניבחר ב Joined SubView:
לאחר ההקלקה על Joined SubView יפתח חלון שיבקש את השדות המקושרים, ניבחר שדה מכל רשימה.


והתוצאה:




העיצוב:

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



  • לסמן את השורה הריקה בטבלה ולמחוק את התוכן שלה בשורת הקוד, התוכן יראה כך:  




והתוצאה הסופית:

 


להתראות בפעם הבאה,

חיים.

פריט לא ניתן למחיקה\עידכון - הודעת Read Only

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



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

אז הנה פתרון מבית היוצר שלי...

בשלב הראשון פתחתי את תפריט הרשימה ובחרתי ב Compiance Details כדי לקבל מידע נוסף שיעזור בפתרון התקלה.


בחלון שניפתח קיבלתי את הפרטים הבאים, השורה שמסומנת בחץ קירבה אותי לפתרון.



והפתרון:
ניכנס ל List Settings ומשם ל Record declaration settings:


בחלון ההגדרות שיפתח נשנה את ההגדרות ל: Always allow the manual declaration of records:




נחזור ל תפריט הרשימה ונחר שוב ב Compiance Details, הפעם ניראה שינוי בשורת ה Record Status:




נילחץ על ה Undeclare record, נסגור את החלון ונמחק את הרשומה - הפעם היא תימחק.

להתראות בפעם הבאה,
חיים.


כיצד להוסיף כפתור מותאם אישית בסרגל ה Ribbon

שלום לכם...

לפעמים בפיתוח ויישום אתר Sharepoint אנחנו רצים מהר מידי בלי לחשוב רגע על הדרך הנכונה לתוצאה.
ואם אתם סקרנים מדוע אז אספר לכם...השבוע קיבלתי מייל מאחד הקוראים של הבלוג. כשראיתי את כתובת השולח ישר זיהיתי -  מכר ותיק שהפגיש אותי לראשונה עם SharePoint.
כששוחחנו קצת בטלפון הוא סיפר שהוא שכר מפתח .net כדי שיוסיף לאתר ה SPS שלו כפתורים. השאלה הראשונה ששאלתי הייתה, מה תפקידם? מה הם אמורים לעשות?
לא אלאה אתכם ביותר מזה...אבל הוא בזבז כסף על משהוא שהוא היה מסוגל לעשות לבד.

במאמר הבא תקבלו הסבר מפורט כיצד להוסיף כפתורי פעולה מותאמים אישית לסרגל ה RIBBON (רצועת הכלים).




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

כפתורי הפעולה יכולים לבצע את הפעולות הבאות:

  • ניווט לטופס.
  • הפעלת זרימת עבודה.
  • ניווט לכתובת URL

  1. ניפתח את ה SharePoint Designer וניבחר ברשימה שאליה נירצה להוסיף כפתור מותאם אישית.
  2. לאחר בחירת הרשימה יפתח לנו חלון חדש עם מאפייני הרשימה.
  3. נילחץ על "פעולות מותאמות אישית"  (מסומן ב 1)

  1. במסך החדש שניפתח נילחץ על "פעולה מותאמת אישית".
  2. בתפריט המשנה שיפתח ניבחר את מיקום הכפתור כפי שהוסבר בתחילת המאמר.


  1. בחלון שיפתח נזין שם, תיאור(לא חובה) וניבחר את סוג הפעולה:


ניתן להזין הגדרות מתקדמות באותו החלון ממש...אם רק נגלול מעט מטה:


באפשרויות המתקדמות ניתן להוסיף אייקון - מומלץ בגודל 32X32 אם כי ניתן גם בגודל 16X16 (אבל זה יהיה קטן מידי).
בשדה "מסיכת זכויות" ניתן לקבוע איזה משתמשים יוכלו להשתמש בלחצן - על כך במאמר אחר.
שדה "מספר רצף" מאפשר לנו לסדר את הכפתורים הסרגל בסדר שאותו ניבחר - פשוט מספרו את הכפתורים בסדר המבוקש.


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


חיים.