Εμφάνιση αναρτήσεων με ετικέτα QlikView. Εμφάνιση όλων των αναρτήσεων
Εμφάνιση αναρτήσεων με ετικέτα QlikView. Εμφάνιση όλων των αναρτήσεων

Πέμπτη, 5 Απριλίου 2018

Qlik blogs...

Qlik
Το Qlik community είναι μια εξαιρετική πηγή γνώσης για όλους τους Qlik Developers, είναι δύσκολο να έχεις μια απορία και να μην έχει ήδη απαντηθεί στα forum του... Λογικά δεν θα χρειαστεί κάποιος να ψάξει κάπου αλλού στο internet για να πάρει απαντήσεις στις Qlik αναζητήσεις του, υπάρχουν όμως κάποια blogs με Qlik θεματολογία τα οποία έχουν τιμητική θέση στο feedly μου... Είναι blogs που συντηρούν επιφανή μέλη της Qlik κοινότητας, consultants και developers που η γνώμη τους "μετράει" και με έχουν "ξελασπώσει" με κάποιο post τους ουκ ολίγες φορές...

Τα Qlik blogs του timeline μου είναι τα:

  • QlikView Cookbook: Το blog του θρύλου Rob Wunderlich είναι μια εξαιρετική πηγή για tips, utilities και νέα της Qlik κοινότητας...
  • The Qlik Fix: Είναι το blog του Barry Harmsen, ενός εκ των συγγραφέων του πολύ καλού βιβλίου "QlikView 11 for Developers"... Ενημερώνεται συχνά και στα σχόλια των posts του συχνά ξεκινάνε πολύ ενδιαφέρουσες συζητήσεις...
  • Qlik Tips: Ακόμα ένα blog από τον πολυγραφότατο (Βιβλίο 1, Βιβλίο 2, Βιβλίο 3) Stephen Redmond, με διαρκή παρουσία από το 2009...
  • QlikView Maven: Ακόμα ένα blog με 10-ετή παρουσία στο Qlik σύμπαν...
  • Quick Intelligence: Τελευταίο αλλά όχι καταϊδρωμένο, το blog του επιφανούς μέλους της Qlik κοινότητας, Steve Dark, ενός ανθρώπου που έχει διακριθεί και ξεχωρίσει μεταξύ των υπολοίπων μελών της Qlik κοινότητας για τις γνώσεις και τα επιτεύγματά του...

Πέμπτη, 9 Νοεμβρίου 2017

QlikView - Local directory service provider...

Το QlikView προσφέρει μια πληθώρα επιλογών όσων αφορά τη διαχείριση των χρηστών οι οποίοι θα έχουν πρόσβαση στο Access Point... Κάποιες από αυτές τις επιλογές χρησιμοποιούν NTFS Authorization (το οποίο χειρίζονται τα Windows) και κάποιες DMS Authorization  ( το οποίο χειρίζεται το QlikView)... Κάποιες από αυτές τις επιλογές δεν μπορούν να λειτουργήσουν παράλληλα ακριβώς λόγω αυτή της διαφοροποίησης στο Authorization, όπως ας πούμε ο Active Directory service provider (NTFS) με αυτόν του Custom Directory (DMS)...

Αυτές τις ημέρες εμφανίστηκε μια ενδιαφέρουσα περίπτωση στην δουλειά όταν κλήθηκα να δώσω πρόσβαση στο QlikView  σε χρήστες οι οποίοι δεν ανήκαν στο εταιρικό Active Directory... Όπως προείπα η λύση του Custom Directory απορρίφθηκε αφού δεν ήταν συμβατά τα Authorization types των δύο service connectors (AD και Custom) οπότε η λύση που επιλέχθηκε ήταν αυτή του Local directory provider...  Όπως θα δούμε και στο σχετικό help page της QlikView , o connector χρησιμοποιεί την λίστα των local users ενός επιλεγμένου μηχανήματος (στην περίπτωσή μου ήταν αυτό στο οποίο είναι εγκατεστημένος ο QlikView Server)...

Η διαδικασία ήταν εξαιρετικά απλή... Αρχικά δημιούργησα local windows χρήστες στον server, τους οποίους πρόσθεσα  στο Group των Users του server με δικαιώματα read.... Αν δεν ξέρεις πώς γίνεται αυτό μπορείς να ακολουθήσεις αυτόν τον οδηγό ο οποίος περιγράφει πολύ καλά τα απαραίτητα βήματα, στην περίπτωσή μας απλά δεν βάζουμε τον νέο χρήστη στο Administrators Group... Κατόπιν τα βήματα που υπολείπονται για να ολοκληρωθεί η διαδικασία περιγράφονται περίφημα στο help page της QlikView  και αυτά ακολούθησα κι εγώ, είναι εξαιρετικά εύκολα και κατανοητά... 

Ο χρήστης που θα δοκιμάσει να συνδεθεί στο Access Point θα χρειαστεί να πληκτρολογήσει στον Internet Explorer το url του Access Point, στην περίπτωσή μου δούλεψε μόνο όταν πληκτρολόγησα καρφωτά την IP του server, κάτι τέτοιο δηλαδή http://192.xxx.xx.xx/qlikview/index... Θα εμφανιστεί ένα Windows Login form όπου πρέπει να συμπληρώσει το username και το password του local user που έχουμε δημιουργήσει και... αυτό είναι, συνδέθηκε!

Προσοχή!!! Για να μπορεί ο χρήστης να έχει πρόσβαση σε συγκεκριμένες εφαρμογές πρέπει ο local user που χρησιμοποιεί να έχει πάρει τα κατάλληλα read δικαιώματα στα directories του server που είναι αυτές αποθηκευμένες, διαφορετικά θα έχει πρόσβαση σε ένα κενό Access Point...

Σάββατο, 23 Σεπτεμβρίου 2017

QlikView - Tips and Tricks...

Μικρά tips που φάνηκαν χρήσιμα από τη δουλειά της εβδομάδας που πέρασε:

  • Αν προσπαθούμε να φιλτράρουμε τα data που διαβάζουμε στο load script και να κρατήσουμε μόνο τις τιμές εκείνες που περιέχουν αριθμούς μπορούμε να χρησιμοποιήσουμε την function IsNum ... Υπάρχουν όμως και περιπτώσεις που η IsNum θα επιστρέψει TRUE, πχ '3E4', διότι θα το θεωρήσει scientific numeric format, ενώ εμείς δεν θα θέλαμε κάτι τέτοιο... Μια καλή λύση για να αντιμετωπίσεις τέτοιου είδους προβλήματα είναι η παρακάτω γραμμή κώδικα την οποία απλώς προσθέτεις στο where statement:

    Len(Purgechar(Field, '0123456789'))=0

    Links: Len, PurgeChar

  • Θέλουμε να "καθαρίσουμε" το πεδίο που διαβάζουμε το οποίο είναι αριθμητικό αλλά έρχεται από το data source με προπορευόμενα μηδενικά (leading zeros) στα αριστερά της τιμής; Χρησιμοποιούμε το παρακάτω transformation και η δουλειά μας έχει γίνει:

    Replace(Ltrim(Replace(Field, '0', ' ')), ' ', '0')

    Links: Replace, Ltrim

  • Αν φορτώνετε δεδομένα από data sources όπως το SAP που η ονοματοδοσία των πεδίων επιτρέπει το να ξεκινάει το όνομα του πεδίου από αριθμό, θυμηθείτε ότι αν θέλετε να διατηρήσετε αυτή την ονοματοδοσία στο QlikView θα πρέπει να περικλείσετε το όνομα του πεδίου μέσα σε αγκύλες, όπως φαίνεται παρακάτω, αν δεν θέλετε να σας επιστρέφει error το load script...

    [0MATERIAL]

Κυριακή, 6 Αυγούστου 2017

QlikView and Google Maps integration and more...

Το σημερινό post αφορά τρία links που περιέχουν πληροφορία εξαιρετικά χρήσιμη για εμένα, όπως αποδείχτηκε, τις προηγούμενες μέρες όταν και δούλευα πάνω σε μια εφαρμογή με ένα αρκετά sophisticated dashboard πωλήσεων...

Το πρώτο, από το Analytics Vidhya, περιέχει ένα πολύ καλό οδηγό για τη δημιουργία Box Plot σε QlikView...  Το Box Plot δεν είναι ευρέως χρησιμοποιούμενο chart και απαιτεί αυτός που το διαβάζει να έχει κάποιες γνώσεις στατιστικής και να αντιλαμβάνεται κάποια βασικά μεγέθη αλλά είναι ένα chart που σε εκπαιδευμένα μάτια μπορεί να απεικονίσει γρήγορα και παραστατικά πολύ πληροφορία...

Το δεύτερο link είναι και πάλι από το Analytics Vidhya και είναι ένας εξαιρετικό οδηγός για το πως να ενσωματώσεις Google Maps στην  QlikView εφαρμογή σου χωρίς την χρήση  add ons ή την αναγκαστική χρήση του web view... Είναι μια αρκετά πολύπλοκη υλοποίηση η οποία περιγράφεται όμως βήμα βήμα και η οποία αν γίνει όπως πρέπει ανταμείβει με εξαιρετικά αποτελέσματα...

Το τρίτο link είναι ένα εξαιρετικό δωρεάν on line tool από τη Google, που δίνει τη δυνατότητα στον προγραμματιστή, μέσω ενός πολύ καλού wizard να δημιουργήσει τον χάρτη που θα ενσωματώσει στην εφαρμογή του, οτιδήποτε είναι αυτή, QlikView ή όχι... Οι δυνατότητες παραμετροποίησης του look and feel του χάρτη είναι πολλές και δίνουν τη δυνατότητα να δημιουργήσει πραγματικά κάτι που αντικατοπτρίζει τις επιλογές και το στυλ του κάθε προγραμματιστή χωρίς να τον περιορίζει σε προσχεδιασμένα και "κλειστά"  templates... Το τελικό παραγόμενο του wizard είναι είτε ένα json αρχείο το οποίο ενσωματώνεται κατάλληλα στην κάθε εφαρμογή είτε ένα link η χρήση του οποίου οδηγεί στο επιθυμητό αποτέλεσμα... Ο χάρτης που εγώ κατασκεύασα για την εφαρμογή πάνω στην οποία δούλευα είναι ο παρακάτω:

Map visualization

Κυριακή, 2 Απριλίου 2017

Life of a programmer...

Έχασα 3 μέρες από τη ζωή μου δουλεύοντας ατελείωτες ώρες, δούλεψα Σαββάτο και Κυριακή (από το σπίτι) για να ανακαλύψω μόλις πριν μια ώρα ότι ο λόγος που δεν συμφωνούσαν τα νούμερα στο application που φτιάχνω ήταν μια γαμημένη στρογγυλοποίηση στον υπολογισμό του price, κάποια επιπλέον δεκαδικά ψηφία... Δεν ήταν κάποιο λάθος στον κώδικα της εφαρμογής, στα data της βάσης, κάποιο bug του QlikView αλλά μια γαμημένη στρογγυλοποίηση που δεν είχε γίνει...

Τετάρτη, 8 Μαρτίου 2017

QlikView - Δημιουργία calculated dimension με τα 20 πρώτα members σε άθροισμα τιμών...

Ας υποθέσουμε ότι έχουμε ένα dimension που περιέχει τα Materials που εμπορεύεται η εταιρεία μας και ένα measure που απεικονίζει το Revenue... Έστω ότι θέλουμε να κατασκευάσουμε ένα νέο calculated dimension το οποίο θα περιέχει μόνο τα πρώτα 20 Materials σε άθροισμα Revenue είτε για να το χρησιμοποιήσουμε σε ένα chart είτε για να το χρησιμοποιήσουμε σαν φίλτρο σε ένα drop down box...

Η λύση είναι εξαιρετικά απλή και χρειάζεται μόνο η παρακάτω γραμμή κώδικα για να δημιουργήσει το  calculated dimension:


Η μόνη διαφοροποίηση που υπάρχει ανάλογα με το που θα χρησιμοποιηθεί αυτό το calculated dimension είναι ότι όταν το χρησιμοποιήσουμε μέσα σε ένα chart πρέπει οπωσδήποτε να θυμηθούμε να επιλέξουμε την επιλογή "Suppress Null Values" στα dimension settings έτσι ώστε να μην επιστρέψει τιμές για τα nulls...

Κυριακή, 12 Φεβρουαρίου 2017

QlikView - Reusable measures...

Συνήθως, όταν φτιάχνουμε ένα QlikView app, τα measures που χρησιμοποιούμε είναι συγκεκριμένα, αυτό που αλλάζει είναι η απεικόνισή τους είτε σε table like objects είτε σε γραφήματα διαφόρων ειδών, συνδυάζοντάς τα με όσα και όποια dimensions επιθυμούμε... Το best practice υπαγορεύει ότι τα measures πρέπει να φορτώνονται από το script στην τελική τους μορφή και να χρησιμοποιούνται χωρίς να γράφουμε πολύ κώδικα στα expressions των objects στο layout της εφαρμογής όμως δυστυχώς (ή ευτυχώς, δεν έχω αποφασίσει ακόμα) αυτό δεν συμβαίνει πάντα... Όταν το app είναι μικρό και τα objects λίγα, μια πιθανή αλλαγή στο calculation ενός ή περισσότερων από αυτά δεν είναι κάτι σπουδαίο, όταν όμως έχεις να κάνεις με apps τα οποία κουβαλάνε δεκάδες measures σε δεκάδες διαφορετικά objects τότε μια πιθανή αλλαγή του business logic δημιουργεί τεράστιο πονοκέφαλο στον developer...

Το πρόβλημα αυτό αποφεύγεται με τον εξής απλό αλλά έξυπνο τρόπο... Κάθε ένα από τα measures που χρησιμοποιούμε γίνεται ένα variable το οποίο δημιουργούμε στην οθόνη Variable Overview του QlikView (Settings → Variable Overview)

Variable Overview

Όταν θέλουμε να χρησιμοποιήσουμε αυτό το measure σε κάποιο object, κάνουμε reference το σχετικό variable που έχουμε ήδη δημιουργήσει...  Ο τρόπος που χρησιμοποιούμε το variable στο expression box του κάθε object είναι της παρακάτω μορφής χωρίς την χρήση quotes:

=$(vUnitsSold)
Με την χρήση αυτή της τεχνικής ο developer έχει πολύ μεγαλύτερο έλεγχο της εφαρμογής του, διευκολύνεται και επιβεβαιώνεται ευκολότερα η ορθότητα των δεδομένων που απεικονίζονται και καμία αλλαγή στο business logic δεν προκαλεί πονοκεφάλους αφού το κάθε measure αλλάζει μόνο μία φορά σε επίπεδο variable αλλά η αλλαγή έχει ισχύ σε όλο το app άμεσα και αυτό είναι καταπληκτικό από όποια πλευρά και να το δεις, development ή business! 😊

Τετάρτη, 23 Νοεμβρίου 2016

QlikView - Πως να ανοίξεις ένα .qvw αρχείο χωρίς δεδομένα...

Έχουν υπάρξει πολλές φορές που χρειάζεται να ανοίξω ένα Qlik View application χωρίς να θέλω να δω το content του ή το layout, απλά να θέλω να ρίξω μια ματιά στον κώδικα του, για να θυμηθώ ενδεχομένως κάτι που έφτιαξα παλιότερα ή να πάρω κάποια ιδέα για κάτι που αναπτύσσω εκείνη την στιγμή... Κάποια applications μπορεί να είναι τεράστια και να "ζυγίζουν" πολλά Giga Bytes και να μην θέλω ή να μην έχω τον χρόνο να περιμένω το μηχάνημά μου να σηκώσει όλα αυτά τα Giga Bytes στην μνήμη για να τα ανοίξει... Ένας εύκολος τρόπος για να μπορέσεις να ανοίξεις το application χωρίς να περιμένεις όλα τα data να σηκωθούν στην μνήμη και να έχεις πρόσβαση στον κώδικα της εφαρμογής προσφέρεται από το default functionality του Qlik View desktop client... Από την λίστα των recent files, με  δεξί κλικ πάνω στο application που θέλουμε να ανοίξουμε επιλέγουμε την επιλογή "Open <ApplicationName> Without Data"...

Qlik View - Open application without data


Τι γίνεται όμως στην περίπτωση που δεν υπάρχει στην λίστα των recent files το application που θέλουμε να ανοίξουμε χωρίς data; Μήπως δεν υπάρχει άλλη επιλογή από το να περιμένουμε να ανοίξει κανονικά το application φορτώνοντας όλα τα data στην μνήμη;

Η απάντηση είναι όχι....

Σε αυτή την περίπτωση χρησιμοποιούμε το παρακάτω command το οποίο κάνει ακριβώς την ίδια δουλειά με το default functionality...



Αυτό που κάνει αυτή η μια γραμμή κώδικα είναι να χρησιμοποιεί το qv.exe (το path που περιγράφεται στο command είναι το default) για να ανοίξει χωρίς δεδομένα το application του οποίου το path συμπληρώνουμε στο δεύτερο σκέλος του command και... αυτό είναι!!!

Παρασκευή, 21 Οκτωβρίου 2016

QV Document Analyzer, ένα απαραίτητο εργαλείο για την εργαλειοθήκη κάθε QlikView developer...

Το "QV Document Analyzer" είναι ένα απαραίτητο εργαλείο για όποιον κάνει QlikView development, ιδανικό για fine tuning των εφαρμογών... Έχει δημιουργηθεί από τον Rob Wunderlich, έναν από τους πιο καταξιωμένους QlikView developers/consultants παγκοσμίως, και βρίσκεται στην τρίτη του έκδοση... 

Πρόκειται για ένα application το οποίο έχει φτιαχτεί με την τεχνολογία του QlikView και αυτό που κάνει είναι να αναλύει την δομή και να ποσοτικοποιεί το footprint κάθε QlikView application (*.qvw files) σε memory, storage και calculation time ανά πεδίο και object και επίσης διακρίνει ποια πεδία/objects χρησιμοποιούνται και ποια όχι και υποδεικνύει συγκεκριμένες ενέργειες για την βελτιστοποίηση των εφαρμογών... 

Έχει ένα καλαίσθητο και κατανοητό γραφικό περιβάλλον πλοήγησης στα στοιχεία κάθε application και πραγματικά κάνει τη ζωή πιο έυκολη σε κάθε έναν από εμάς που δουλεύουμε με το QlikView και προσπαθούμε να φτιάξουμε όσο γίνεται καλύτερες εφαρμογές... 

Η εφαρμογή διανέμεται δωρεάν από το blog του  Rob Wunderlich στο section των Tools  όπου θα βρείτε και άλλα χρήσιμα, δωρεάν εργαλεία... Ακολουθούν κάποια screenshots της εφαρμογής από το download site:

QV Document Analyzer screenshot 1


QV Document Analyzer screenshot 2

QV Document Analyzer screenshot 3


Τετάρτη, 24 Αυγούστου 2016

Κάνοντας ETL με το QlikView, ένα case study...

Κάθε εργαλείο φτιάχνεται με ένα συγκεκριμένο σκοπό άσχετο με το αν εμείς μπορεί να το χρησιμοποιούμε και κάπως αλλιώς για να καλύψουμε τις ανάγκες μας... Κατά την άποψή μου το QlikView δεν είναι ένα εργαλείο κατάλληλο για να φτιάξεις ETL processes, έλα όμως που πολλές φορές αναγκάζομαι για λόγους που δεν είναι της παρούσης, να το κάνω... Έχω σιχτιρίσει κάθε μια από αυτές, όντας SQL και Data Warehouse oriented, το να κάνω ETL μέσα από το script του QlikView δεν είναι το καλύτερό μου διότι πιστεύω ότι σε πολλές περιπτώσεις αναγκάζεσαι να ανακαλύψεις ξανά τον τροχό για θέματα που είναι από καιρό λυμένα για τα ETL tools και την SQL...

Το συγκεκριμένο case αφορά μια περίπτωση όπου έπρεπε να εντοπίσω ανά πελάτη ποια είναι τα καταστήματα με το μεγαλύτερο μέσο υπόλοιπο και αν είναι περισσότερο από ένα να διαλέξω αυτό στο οποίο έχει ανοιχθεί πιο πρόσφατα λογαριασμός... Με παίδεψε αρκετά καθώς το πρώτο πράγμα που θα έρθει στο μυαλό μου σε αυτές τις περιπτώσεις είναι μια SQL προσέγγιση με τη δημιουργία κάποιων temp tables όπου θα έχω πολλαπλά κλειδιά αν το χρειάζομαι κ.ο.κ., που όμως στην προκειμένη περίπτωση δεν μας κάνει... Κατέληξα σε μια ξεκάθαρα QlikView υλοποίηση η οποία δεν είναι η βέλτιστη καθώς παρουσιάζει αρκετό delay όταν οι όγκοι των δεδομένων αυξάνονται αλλά σε μικρούς και μεσαίους όγκους το performance είναι πολύ καλό...  Το δηλώνω από τώρα ότι δεν πρόκειται να μπω στη διαδικασία να δουλέψω παραπάνω πάνω στο script διότι αφενός δεν το χρειάζομαι πια καθώς έφτιαξα και δεύτερη λύση η οποία είναι πολύ μακροσκελέστερη αλλά με πολύ καλύτερο performance και αφετέρου διότι εξακολουθώ να πιστεύω ότι το QlikView δεν είναι φτιαγμένο για ETL, ο σωστός προγραμματιστής πρέπει να είναι τεμπέλης και να μην γράφει ποτέ περισσότερο κώδικα από όσο είναι απολύτως απαραίτητο... :)  

Σκέφτηκα να βάλω αυτό το script στο Gist διότι σκέφτηκα ότι μπορεί να είναι χρήσιμο για κάποιους καθώς γίνεται ένα πολύ ωραίο loop σε αυτόν τον κώδικα, και για να το θυμάμαι κι εγώ, ποτέ δεν ξέρεις πού θα χρησιμοποιηθεί τελικά...

Παρασκευή, 5 Αυγούστου 2016

Freebie QlikView app - QvdDependancies ver 1.2 ...

Μπορεί αύριο το πρωί να ξεκινάνε οι διακοπές αλλά κάποια πράγματα δεν πρέπει να μένουν πίσω, ειδικά όταν κάποιοι άνθρωποι μπαίνουν στη διαδικασία να ασχοληθούν με τη δουλειά σου και να σου κάνουν καλοπροαίρετη κριτική, να σου δώσουν τις συμβουλές τους ή να σου κάνουν χρήσιμες προτάσεις... Έτσι λοιπόν το QvdDependancies, ένα QlikView app στο οποίο αναφέρθηκα σε προηγούμενο post, πέρασε σε νέα version (1.2) και απέκτησε επιπλέον functionality... 

Υποστηρίζεται πλέον η δυνατότητα ο χρήστης να μην κάνει πλήρες scan του server/pc για να βρει τα dependencies μεταξύ qvds και qvws αλλά να σκανάρει μόνο συγκεκριμένα directories εφόσον αυτό επιθυμεί... Ο κώδικας και το app βρίσκονται τόσο στο GitHub (Link)  όσο και στο Qlik Community (Download Link) και κάθε feedback θα χαίρει μεγάλης εκτίμησης και θα ληφθεί υπόψην από τον δημιουργό του app ...  :P

Υ.Γ. Καλές διακοπές!!!

Παρασκευή, 29 Ιουλίου 2016

Freebie QlikView app - QvdDependancies...

Το QlikView είναι ένα πολύ καλό εργαλείο για την ανάπτυξη εφαρμογών BI... Έχει μια δική του λογική ως προς τη διαχείριση των δεδομένων η οποία βασίζεται σε αρχεία τύπου .qvd τα οποία αποθηκεύονται στο file system του server ή του υπολογιστή που γίνεται το development... Αν οι εφαρμογές είναι λίγες, οι όγκοι των δεδομένων μικροί και υπάρχει μια στοιχειώδης οργάνωση του file system δεν είναι δύσκολο να εντοπιστούν τα dependencies που έχει ένα .qvd αρχείο, ποιο document το δημιούργησε και από ποια άλλα documents χρησιμοποιείται... Τι γίνεται όμως όταν το περιβάλλον ανάπτυξης είναι μεγάλο, τα .qvds αμέτρητα, οι εφαρμογές το ίδιο και είναι απαραίτητο να γίνουν τροποποιήσεις; Το να θυμάται απλά ο developer τα dependencies κάθε .qvd αρχείου είναι αδύνατον αλλά είναι απαραίτητο να υπάρχει μια καταγραφή κι έλεγχος των dependencies έτσι ώστε να μην γίνουν μετατροπές στις εφαρμογές που θα προκαλέσουν την κατάρρευσή τους...

Το πρόβλημα αυτό προσπαθούν να το λύσουν διάφορες εφαρμογές, freebies συνήθως, φτιαγμένες από QlikView developers, μία από αυτές είναι το QvdDependancies (*)... Η εφαρμογή σκανάρει όλα τα  local physical drives του μηχανήματος που τρέχει, χρησιμοποιώντας τα XML header data τόσο των .qvds όσο και των .qvws (documents), και  βρίσκει για κάθε αρχείο .qvd ποιο είναι το .qvw που το δημιουργεί και ποια είναι τα .qvws που το χρησιμοποιούν ως data source... Η εφαρμογή είναι δωρεάν και για να την χρησιμοποιήσετε πρέπει να έχετε μια εγκατάσταση QlikView (ιδανικά να είναι licensed) και να είναι enabled τα macros... Μπορείτε να την κατεβάσετε από το Qlik Community (Download Link) κι επίσης όλος ο κώδικας είναι ανεβασμένος στο GitHub (Link) ... Μπορείτε να χρησιμοποιήσετε την εφαρμογή, να κάνετε fork το project, να προτείνετε αλλαγές και βελτιώσεις (θα ήταν τέλειο κάτι τέτοιο), η μόνη υποχρέωση που έχετε είναι αν η εφαρμογή γίνει αντικείμενο παρουσίασης σε άλλο μέσο είναι να γίνει mention o δημιουργός και να μπει link είτε προς το GitHub project είτε στο Qlik Community...

(*) Η ορθογραφία του τίτλου της εφαρμογής είναι λάθος, φυσικά, αλλά δεν διορθώθηκε για γούρι... :)

Τρίτη, 24 Νοεμβρίου 2015

Χρήση variables για την περιγραφή των qvd path names - QlikView...

Ένα κοινό "πρόβλημα" στο QlikView development είναι όταν θέλεις να δοκιμάσεις την εφαρμογή σου σε κάποιο άλλο περιβάλλον, test ή live... Λόγω της φύσης του QlikView το να αλλάξεις απλά το connection string στη βάση που διαβάζεις δεν είναι αρκετό διότι θα πρέπει να ορίσεις ξανά το path για όλα τα qvds που φορτώνονται στην εφαρμογή, ένα ένα... Κάτι τέτοιο είναι χρονοβόρο και μη αποδοτικό και αυξάνει τις πιθανότητες λάθους... Η χρήση της επιλογής των Relative Paths δεν λύνει το πρόβλημα διότι προϋποθέτει ότι η εφαρμογή και τα qvds βρίσκονται στο ίδιο folder ή έστω διαφέρουν κατά ένα level κάτι το οποίο προσωπικά θεωρώ αρχιτεκτονικό λάθος... 

Μια πολύ καλή λύση για να αντιμετωπιστεί μια τέτοια κατάσταση είναι η χρήση local variables για την αποθήκευση των path names των διαφόρων qvds... Αυτό γίνεται δηλώνοντας μια μεταβλητή vPathName αμέσως μετά τα αρχικά set statements στο Main tab του script editor η οποία περιέχει το full path προς το qvd repository το οποίο θέλουμε να χρησιμοποιήσουμε... Κατόπιν σε κάθε LOAD statement  αντικαθιστούμε το full path name του qvd με την μεταβλητή συν το όνομα του qvd, όπως φαίνεται στο παρακάτω script:


Με την μέθοδο αυτή μπορούμε να κάνουμε αλλαγή του path των qvds που διαβάζει η εφαρμογή μας αλλάζοντας μόνο μια γραμμή κώδικα...  Έτσι κερδίζουμε χρόνο, ελαττώνουμε τις πιθανότητες λάθους και κάνουμε τις εφαρμογές πιο portable... Η μέθοδος αυτή μπορεί να χρησιμοποιηθεί και για παραπάνω από ένα repositories, δημιουργούμε απλά μια δεύτερη μεταβλητή που να υποδεικνύει στο δεύτερο repository και την χρησιμοποιούμε όπου είναι απαραίτητο...

Παρασκευή, 20 Νοεμβρίου 2015

QlikView variable ως παράμετρος σε SQL query...

Το σημερινό tip είναι κάτι που έφτιαξα πριν περίπου 2 χρόνια, στην αρχή της ενασχόλησής μου με το QlikView, και προέκυψε από την ανάγκη να διαβάσω μια λίστα πελατών από ένα data source και μετά να περάσω αυτή την λίστα σαν παράμετρο σε ένα άλλο data source, μια βάση δεδομένων, για να συλλέξω όλη την πληροφορία που αφορούσε τους πελάτες αυτούς... Μετά από 2 χρόνια εντατικής δουλειάς και εμπειρίας ξέρω ότι υπάρχουν κι άλλοι τρόποι, να κάνεις την ίδια δουλειά, η συγκεκριμένη υλοποίηση όμως είναι ενδιαφέρουσα ως προς την χρήση των variables μέσα στο QlikView script σε συνδυασμό με SQL queries...

Έστω λοιπόν ότι το πρώτο data source είναι ένα Excel αρχείο στο οποίο περιέχονται κωδικοί πελατών τους οποίους θέλουμε να διαβάσουμε και να αναζητήσουμε σε ένα άλλο data source, μια βάση δεδομένων... Για να το καταφέρουμε αυτό θα δημιουργήσουμε μια μεταβλητή η οποία θα περιέχει σαν ένα μεγάλο string, όλους τους κωδικούς πελατών (χωρισμένους με κόμματα και κλεισμένους μέσα σε "αυτάκια") και θα την θέσουμε σαν παράμετρο του WHERE statement του query με το οποίοι θα διαβάσουμε τη βάση... 

Αυτό επιτυγχάνεται, όπως θα δείτε στο πρώτο script πιο κάτω, δημιουργώντας μια μεταβλητή (vNoOfRows) που θα περιέχει τον αριθμό των κωδικών πελατών που φορτώσαμε στο QlikView και τρέχοντας ένα for loop για κάθε ένα CustomerID που βρίσκει, μέχρι τον αριθμό του vNoOfRows ...Σε κάθε λούπα προσθέτουμε το CustomerID στην μεταβλητή vCus η οποία θα περιέχει στο τέλος όλη την λίστα των CustomerIDs χωρισμένων με κόμματα σε μορφή τέτοια ώστε να μπορέσουμε να την ενσωματώσουμε σε ένα SQL Query...



Από αυτό το σημείο και μετά τα πράγματα είναι πολύ απλά... Απλά τρέχουμε το query μας με παράμετρο την μεταβλητή vCus και φορτώνουμε στο QlikView τα στοιχεία μόνο εκείνων των πελατών που μας αφορούν...