לאחרונה נתקלתי במאמר המסביר את השימוש בשאילתא מקוננת ליצירת פילטרים. לדוגמא, אם יש לנו טבלת מכירות עם מספר סוכן, תאריך מכירה וסכום מכירה ואנו רוצים לכתוב פילטר השולף רק את תאריך המכירה האחרון של כל סוכן. הדרך המוצעת היא על ידי משהו בסגנון:
א (table.sales_date=(select max(q.sales_date) from table as q where q.agent=table.agent
החלק הטוב שהוא שזה פועל והתוצאות נכונות. החלק הרע הוא שלא ממש ניתן ליצור אובייקטים למשתמש באמצעות שיטה זאת.
הסבר: אין ממש קשר בין השאילתא הפנימית לחיצונית לכן אם המשתמש יבצע חיתוך כלשהוא בשאילתא החיצונית זה לא יבוא לידי ביטוי בשאילתא הפנימית ולכן התוצאה לא תצא נכונה. לדוגמא, אם המשתמש יבחר לבצע חיתוך ולראות רק את הנתונים של הרבעון האחרון של 2008, השאילתא הפנימית תציג את התאריך המקסימלי בכלל. כלומר יוצגו רק הסוכנים אשר תאריך המכירה המקסימלי שלהם יהיה ברבעון האחרון 2008.
ניתן כמובן להתגבר על בעיה זאת באמצעות @prompt בתוך השאילתא הפנימית לכל מימד חיתוך, אך כמובן שברוב המקרים שיטה זאת אינה אפשרית.
ידע אמפירי מלמד אותנו שפילטרים מסוג זה בונים, אך ורק ולדוחות ספציפים ולאחר מכן יש לשים אותם בhide ורק במקרים מעטים כפילטרים לשימוש חופשי על ידי המשתמשים.
לפני מספר חודשים , כתבתי מאמר בנושא זה, אתם מוזמנים להכנס אליו בכתובת: