יום שבת, 28 בינואר 2012

רשמים מקליקויו 11

השבוע חזרתי מכנס שבו הציגו את קליקויו 11 עם מספר יכולות מעניינות.
היכולות העיקריות: 
 קליינט WEB  משופר
מבחינתי - אולי היכולת החשובה ביותר. נכון שלא מדובר בפיצ'ר חדש אלא רק בשדרוג טכנולוגיה, אבל בעולם של היום, יכולת WEB-ית אמתית היא עניין הכרחי. לטעמי, הגרסאות שעד 11 לא היו מספיק טובות בתחום זה - מאקרו'ס לא תמיד רצים, הבדלים מסוימים בתצוגה, ותחושה כללית שזה לא לגמרי דף אינטרנט כמו שהוא אמור להיות. בגרסה 11 אנו מדברים כבר על HTML5, וההתרשמות הראשונית שלי היא שמדובר בקפיצת מדרגה משמעותית. 
 ניתן לשתף סשן בין משתמשים (מעין WEBEX)
כאן QlikTech די מקדימים את זמנם. ברור שהיכולת של משתמשים בארגון להסתכל יחד על הנתונים ולנהל עליהם שיחה בזמן אמת, היא מהפכנית. לא ברור כמה ארגונים כבר בשלים לכך היום, אבל זה בטח יעזור להגיע לשם.
אפשרות להוסיף הערות על אובייקטים במודל
ממשיך את מגמת הפיצ'ר הקודם - מאפשר דו-שיח בין משתמשים בנוגע למידע, גם אם שיחה אמתית אינה אפשרית. למשל עובד יכול לבצע סינון מסוים על גרף ולהוסיף הערה: "שיפרנו את מהירות הטיפול בתיקים החודש". לאחר מכן המנהל שלו ייכנס, יוכל לשחזר את הסינונים, ואז לכתוב הערה אחרת: "אבל החודש היו הרבה פחות תיקים לטיפול" ולהפנות לסינון אחר. ממבט שטחי נראה שאין אפשרות לייעד את ההערה למשתמש מסוים - נקווה שיפותח בהמשך. 
ניהול סטים של Set Analysis 
בהחלט עשוי להקל את העבודה עם הפונקציונליות החשובה הזאת. 
 יצירת דוחות פשוטים ע"י המשתמש
ממשק שבו המשתמש יכול לבחור שדות רצויים (ממדים ומדדים) וכך להרכיב בעצמו טבלת נתונים פשוטה. אמנם היה אפשרי גם עד עכשיו ע"י מאקרו, אבל תמיד טוב שישנה יכולת מובנית.

יום רביעי, 25 בינואר 2012

קישור בין טבלאות שלא על בסיס שוויון

כידוע, קליקויו מקשר בין טבלאות ע"פ שדות עם שמות זהים. יש לכך יתרון בקלות הפיתוח (לא צריך להגדיר את הקשרים באופן מפורש), אך גם חיסרון - כאשר רוצים לקשר ע"פ אופרטור שונה משוויון.
למשל, נניח שאנחנו רוצים לקשר בין טבלת מוצרים לטבלת סניפים, כך שכל מוצר יקושר לסניף שבו הוא לא קיים (נכון שניתן להציג חיתוך כזה בתצוגה, אך לפעמים ישנו צורך כזה בסקריפט). הקישור הוא על בסיס האופרטור "שונה".
בשאילתת SQL זה כמובן פשוט מאוד - יוצרים JOIN עם סימן "שונה מ-". בקליקויו זה לא אפשרי.
באותו אופן אנו עשויים לרצות לקשר על בסיס "גדול מ" ו"קטן מ", ואופרטורים נוספים.
אמנם בקליקויו קיימת האפשרות של intervalmatch, אך היא מכסה רק חלק מהמקרים - קישור על בסיס טווח ערכים חופף.
ובכן, מי שמכיר בסיסי נתונים היטב, יודע שלמעשה בכל Join, בסיס-הנתונים מבצע תחילה Cross Join, כלומר יוצר את כל הקומבינציות האפשריות בין רשומות שתי הטבלאות, ורק לאחר מכן גוזר מתוך כמות הרשומות (המפלצתית בד"כ) את הרשומות הרצויות, ע"פ משפט השוויון.
אנחנו יכולים להשתמש באותו עיקרון. אמנם בבסיס הנתונים הפעולה מתבצעת באופן פנימי ללא fetch ולכן במהירות עצומה, ואילו אנו נסבול מביצועים איטיים, אבל זה כמובן רק הסקריפט. עם זאת על רשומות רבות זה בד"כ לא יעבוד בגלל חריגת זיכרון.
אם-כן, הדרך היא להביא את הטבלה הראשונה, ואז במשפט Join להביא את הטבלה השנייה, כאשר אין כל שדה משותף ביניהן. לאחר מכן על הטבלה הגדולה שנוצרה, נוכל לבצע את צמצום הרשומות ע"י משפט Where.

קריאה מרשימות שרפוינט

אחת היכולות החזקות בקליקויו היא האפשרות לקרוא בקלות ממגוון סוגים של מקורות נתונים. אחד ממקורות הנתונים האפשריים הינו Web Service.
בארגון שבו עושים שימוש ב-Microsoft Sharepoint, ניתן לנצל יכולת זו לקריאה מרשימות שרפוינט באמצעות Web Service פנימי של שרפוינט, שמאפשר להציג כל רשימה כ-XML.
למי שלא מכיר, שרפוינט היא סביבה Web-ית לשיתוף מידע בארגון (עם הזמן התפתחה גם כתשתית פיתוח לאתרי אינטרנט בכלל), כאשר השימוש הנפוץ הוא שיתוף מסמכים, אולם ניתן ליצור גם רשימות שרפוינט מותאמות אישית בתור מעין מערכת קלה. שרפוינט מאפשר קישור בין רשימות שונות, כך למשל ניתן לנהל רשימה של לקוחות, ואז ברשימת הזמנות ליצור שדה "לקוח" המבוסס על רשימת הלקוחות.
כאמור, לשרפוינט ישנו Web Service אשר מחצין רשימות כ-XML, משם הקליקויו יכול לקרוא.
להלן דוגמה ל-URL:
http://my-sharepoint-server/my-site/_vti_bin/owssvr.dll?Cmd=Display&XMLDATA=1&RowLimit=0&List={216d6c83-5dbf-48e4-8d69-ace8e833c19b}
כמובן יש לשנות בהתאם את שם השרת, שם האתר (כולל היררכיית אתרים אם ישנה) ומזהה ה-GUID של הרשימה.
בתוך הסקריפט בקליקויו, נלחץ על כפתור Web File, ובתיבת Internet File נדביק את ה-URL. במסך הבא נבחר את סוג הקובץ XML,  ותחת Tables נבחר xml/data/row ונלחץ Finish. בקוד שנוצר בסקריפט ניתן להשאיר את טבלת xml בלבד ולמחוק את שתי הטבלאות האחרות שנוצרות.
מכאן ואילך ניתן להשתמש בנתונים כמו כל נתונים אחרים.