הצטרפו לקבוצות שלנו לקבלת עדכונים מרוכזים פעם בשבוע:

ווטסאפ:
http://wa.dwh.co.il
טלגרם:
http://telegram.dwh.co.il

פילטור שדה מתוך רשומת CROSSTAB

More
17 years 8 months ago #2739 by efiv
שלום,
אני מעוניין להציג את כל השורה מתוך CROSSTAB כאשר שדה מסויים באחד העמודות
עונה לי על הדרישה מהפילטר.
לדוגמא- הדוח מורכב ממחלקה ,חודש (12 חודשים שיציגו 12 עמודות) וסכום מכירה.
אני רוצה להציג את כל המחלקה עם 12 החודשים רק במקרה שבחודש 5 יש יותר מ 100 ש"ח.
אציין שניסיתי כמעט הכל.
האם זה בכלל בר ביצוע בפורמט CROSSTAB או שקוגנוס עדיין מוגבל בכך.

Please התחברות to join the conversation.

More
17 years 8 months ago #2790 by דוד פוראי
הי אפי, למה להגיד שהקוגנוס מוגבל? מנסיוני, מבחינת המערכת הכל אפשרי - המגבלה העיקרית היא אצלי בראש.. ;)


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

א. הפתרון הקצר: אם הוא קיים, קוראים לו Supress Rows וצריך לחפש אותו בProperties של ה Crosstab. הוא קיים בכלי אחר, ב Analysis Studio ונדמה לי שראיתי אותו גם ב Report Studio, אבדוק עבורך מחר.

ב. הפתרון הארוך:
כדי להציג או לא להציג שורה שלמה בטבלת הCrosstab, אתה צריך "להפיל" אותה מהתוצר הסופי. כדי לעשות את זה, צריך לבנות Join שיגרום לכך, שבהתקיים תנאי מסוים - לא תוצג כל השורה.
נניח שיש לך 3 מחלקות שמכרו בכל 12 החודשים בשנת 2007.

בונים Query ראשון, עם שדה אחד בלבד: מחלקה. אם תריץ את הQuery הזה עם סינון לפי שנת 2007 למשל, יופיע פלט עם 3 שמות המחלקה (התוכנה מבצעת קיבוץ אוטומטי לפי כל שם מחלקה).
עכשיו הגיע הזמן לבצע מניפולציה על השדה ולהגדיר את התנאי. עושים את זה בשדה עצמו ולא בפילטר:
case
when (Month=5 and Sales<100)
then
(null)
else
(Sales)
end

את השדות Month ו Sales אתה מושך מהקטלוג לתוך השדה.
נניח, שהמכירות של מחלקה B בחודש מאי היו נמוכות מ 100. מה שצפוי להתקבל כעת, כאשר נריץ את הQuery הזה - זו רשימה של A, אח"כ שדה ריק (במקום מח' B, שענתה על התנאי) ו - C.

עכשיו מגיע השלב הבא: בונים Query נוסף, נקרא לו Query2 עם שלושת השדות - מחלקה, חודש ומכירות.
מושכים אובייקט Join ומשלבים בין שני ה Quer-ים, כששם מחלקה שווה לשם מחלקה. הקרדינליות בין השאילתות היא 1..n.
מושכים את השדות מQuery2 לQuery האחרון שהוא התוצר של ה Join.
מה שצפוי להתקבל עכשיו כשמריצים, הוא כמה שורות של מכירה לפי חודש, לכל אחד משתי המחלקות A ו - C. מכיון שB ענה על התנאי והושמט בQuery1, השורות של מחלקה B לא יוצגו.
מכאן - פשוט לגרור אל ה -CrossTab.

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

Please התחברות to join the conversation.

More
17 years 8 months ago #2800 by דוד פוראי
או קיי, כל מה שכתבתי למעלה נכון והגיוני - אבל לא עובד...
אבל יש חדשות:

א. בגירסת קוגנוס 8.4 יש Supress גם בReportStudio.

ב. יש דרך לבצע את זה, ניסיתי וזה עובד:

1. בשלב הראשון אתה מביא את כל שלושת השדות לQuery ראשון.
אתה מחיל פילטרים של תאריך/חודשים, ופילטר נוסף של התנאי שלפיו אתה מעוניין שהשורות יסוננו החוצה. למשל - סכום מכירה גדול מ100. הפילטר הזה, חשוב שיהיה מוגדר כ After Auto Aggregation.
2. אתה מוסיף Data Item שבתוכו אתה סופר חודשים עבור כל שם מחלקה -
count (month for department)

בשדה הזה, אם התנאי של מכירות גדולות מ 100 לא מתקיים עבור חודש מסוים, יופיע מספר שהוא פחות מ 12. (כלומר התנאי לא מתקיים עבור כל 12 החודשים בשנה עבור אותה מחלקה).

3. אתה יוצר Query חדש, גורר אליו את השדות מהקודם - ומוסיף פילטר של שדה (אותו שדה שיצרנו קודם) שווה 12. עכשיו יעלו רק אותן מחלקות שעמדו במכירות של גדול מ100 בכל 12 החודשים.

4. אתה מעלה שוב את שם המחלקה לQuery נוסף, מוסיף שדה חודש ושדה כמות מכירות ומסנן לפי
טווח התאריכים/חודשים המבוקש.
בשלב הזה יכול להיות שתופיע הודעת שגיאה עם Cross Joins, אם כן - צריך ללכת להגדרות ה Query ולסמן Allow בהגדרה של Cross Product Allowed.

5. את הנתונים מעלים לתוך CROSSTAB - מה שיופיע עכשיו הן רק המחלקות שמכרו בכל החודשים מעל 100 (בכל חודש).

זו התחלה.
לגבי בדיקה על חודש מסוים בלבד (כמו הדוגמה שהצגת, שילוב של חודש 5 עם מכירות מעל 100) - צריך להמשיך ולחשוב על זה.

Please התחברות to join the conversation.

Moderators: לינוּר
Time to create page: 0.281 seconds