Αναρτήσεις

Εμφάνιση αναρτήσεων με την ετικέτα Tips and tricks

QlikView - ApplyMap() ...

Αν υπάρχει μια function την λειτουργία της οποίας οφείλει να γνωρίζει κάθε QlikView developer αυτή είναι η ApplyMap()... Είναι το αντίστοιχο της VLOOKUP() που χρησιμοποιούμε στο Excel, έχει πολύ καλό performance και λειτουργεί καλύτερα από ένα Left Join όταν προσπαθείς να εμπλουτίσεις το data model σου καθώς σου εξασφαλίζει ότι το mapping που επιχειρείς δεν θα έχει διπλοεγγραφές... Η σύνταξή της είναι εύκολη και τα οφέλη της πολλά, το documentation της Qlik είναι απόλυτα ικανοποιητικό ενώ υπάρχουν πάρα πολλές πηγές στο internet, από blog posts μέχρι videos, που εξηγούν και αναλύουν την χρήση της, κάποια ενδεικτικά links είναι και αυτά: link1 link2   link3   link4

Qlikview - How to extract the file name out of a full path name...

Συνεχίζοντας από αυτό το post , θα προκύψει μια μεταβλητή ( vSelectedFile )  η οποία θα περιέχει το file name του αρχείου με το οποίο θέλουμε να δουλέψουμε... Το περιεχόμενο της μεταβλητής όμως θα είναι το full path name το οποίο ενδεχομένως δεν μας είναι χρήσιμο και χρειαζόμαστε απλά το όνομα του αρχείου και μόνο... Ας υποθέσουμε ότι το full path name είναι της μορφής: \\serverName\Folder1\Folder2\Folder3\FileName Το παρακάτω statement θα έχει σαν αποτέλεσμα το κομμάτι τoυ full path name που αντιστοιχεί στο FileName: Right(vSelectedFile,Len(vSelectedFile)-Index(vSelectedFile,'\',SubStringCount(vSelectedFile,'\')))

Αναζήτηση μιας τιμής οπουδήποτε στη Database - SQL Server

Έστω ότι δουλεύεις πάνω σε μια analytics εφαρμογή κάνοντας reverse engineering στη βάση και ψάχνεις να βρεις σε ποιούς πίνακες βρίσκονται συγκεκριμένες τιμές... Το παρακάτω T-SQL script θα σκανάρει όλη τη βάση και θα βρει σε ποιους πίνακες υπάρχουν οι τιμές αυτές.... To παραπάνω script το βρήκα στο Stack Overflow ...

QlikView - Ένα script με κάποιες χρήσιμες τεχνικές για folder/file manipulation...

Το παρακάτω script γράφτηκε για να εξυπηρετήσει μια ανάγκη που προέκυψε στη δουλειά... Όταν το ολοκλήρωσα μου άρεσε πολύ και σκέφτηκα ότι θα ήταν καλό να το μοιραστώ... Το script φτιάχτηκε για την δική μου ανάγκη αλλά οι τεχνικές που περιέχονται μπορούν άνετα να χρησιμοποιηθούν και για άλλους λόγους, όποιος θέλει μπορεί να ρωτήσει... :)

Qlik blogs...

Εικόνα
Το 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

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 χρησιμοποιεί την λί

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 : Rep

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 ε

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...

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 που χρησιμοποιούμε γίνεται ένα va

Configure Database Mail in SQL Server, my two cents...

Εικόνα
Στο σχετικό link στο MSDN για το configuration του Database Mail αναφέρει τα παρακάτω για την συμπλήρωση του πεδίου Server Name: Η πολύ πρόσφατη εμπειρία μου, υποδεικνύει ότι καλύτερα να συμπληρωθεί η IP του SMTP server και όχι το όνομα του στο σχετικό πεδίο αφού για κάποιο λόγο ακατανόητο σε εμένα ο SQL Server δεν μπορούσε με τίποτα να στείλει email όταν το server name ήταν της μορφής "smtp . <your_company> . com" ...

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" ... Τι γίνεται όμως στην περίπτωση που δεν υπάρχει στην

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 και προσπαθούμε να φτιάξουμε όσο γίνεται καλύτερες εφαρμογές...  Η εφαρμογή δια

Κατέβασε δωρεάν βιβλία Πληροφορικής από το IT eBooks!

Το μεγαλύτερο όφελος που αποκόμισε η ανθρωπότητα από την ανακάλυψη του internet είναι η απεριόριστη πρόσβαση στη γνώση... Η γνώση δεν είναι προνόμιο λίγων κι εκλεκτών, κάθε άνθρωπος με μια σύνδεση στον internet μπορεί να έχει πρόσβαση σε εκατομμύρια πηγές γνώσης που καλύπτουν κάθε γνωστικό αντικείμενο... Αν το αντικείμενο της έρευνας για γνώση είναι ο τομέας της Πληροφορικής τότε υπάρχει ένα site που αξίζει να το επισκεφτεί κανείς... Το   IT eBooks είναι ένα site το οποίο διαθέτει μια τεράστια συλλογή από βιβλία Πληροφορικής, κάθε τομέα και ειδικότητας, τα οποία είναι διαθέσιμα για download, σε όλους, δωρεάν!!! Δεν χρειάζεται εγγραφή, δεν σου ζητάει να δώσεις προσωπικά στοιχεία, δεν σου ζητάει να πληρώσεις... Απλά μπαίνεις στο site, κάνεις την αναζήτηση που σε ενδιαφέρει, παίρνεις την σχετική λίστα αποτελεσμάτων με το κάθε ένα να συνοδεύεται από ένα download link και... αυτό είναι, κατέβασες το βιβλίο!!! Στο  IT eBooks  θα βρείτε βιβλία πασίγνωστων εκδοτικών οίκων του χώρου

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

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

R - Πρόσβαση σε μια βάση δεδομένων με το package RODBC ...

Μπορεί δουλεύοντας με την R να χρησιμοποιούμε σε πολύ μεγάλο βαθμό ως data sources διάφορα flat files και γενικότερα αδόμητη πληροφορία αλλά θα έρθει η στιγμή εκείνη που θα χρειαστεί να κάνουμε την R να "μιλήσει" με μια ή περισσότερες βάσεις δεδομένων... Υπάρχουν διάφορα packages που παρέχουν τη διεπαφή μεταξύ της R και μιας συγκεκριμένης βάσης δεδομένων όπως το RMySQL  ή το ROracle , υπάρχει όμως ένα package το οποίο δεν database specific αλλά υποστηρίζει τη διεπαφή με όλες τις βάσεις δεδομένων, συμπεριλαμβανομένων του SQL Server και της DB2, αρκεί να υπάρχει ένα σχετικό ODBC connection... Το package αυτό ονομάζεται RODBC και μπορείτε να το βρείτε και να το εγκαταστήσετε από το CRAN ... Είναι πολύ απλό και straightforward στην χρήση του, τα βασικά functions του μπορείτε να τα δείτε κι εδώ ... Όπως θα δείτε, δίνει δυνατότητες πλήρους manipulation της βάσης (insert, update, delete) κι όχι μόνο ανάγνωση των δεδομένων... Το χρησιμοποίησα στα πλαίσια ενός project που απαιτ

R - Πώς να δημιουργήσεις ένα κενό plot...

Έστω ότι για κάποιο λόγο, προγραμματίζοντας σε R, σε κάποια στιγμή υπάρχει η ανάγκη να δημιουργήσετε ένα κενό plot, κάτι σαν place holder ή για να αποτρέψετε την εφαρμογή σας να δείχνει ασυναρτησίες ή errors στο "κανονικό" σας plot... Σε εμένα η ανάγκη προέκυψε όταν φτιάχνοντας ένα Shiny application, ήθελα ένα συγκεκριμένο plot να μην δείχνει τιμές όταν το input περιλαμβάνει συγκεκριμένες τιμές που δεν θα είχαν έτσι κι αλλιώς νόημα....  Μια καλή λύση είναι όταν έρχονται αυτές οι συγκεκριμένες τιμές να μην γίνεται render το "κανονικό" plot αλλά ένα άλλο, κενό που απλά θα καταλαμβάνει τον σχετικό χώρο πάνω στο application... Η λύση αυτή μπορεί να επιτευχθεί είτε δημιουργώντας ένα κενό plot το οποίο λειτουργεί σαν ένα place holder: ...είτε δημιουργώντας ένα plot χωρίς observations το οποίο όμως γίνεται κανονικά visualized όπως για παράδειγμα υλοποιεί ο παρακάτω κώδικας: Ενημερωτικά, εγώ χρησιμοποίησα το πρώτο code snippet διότι θεωρώ ότι τα

Outersect(), το αντίστροφο της function intersect() της R...

Πρόσφατα κατά τη διάρκεια μιας ανάλυσης έπρεπε να συγκρίνω δύο data frames για να εξακριβώσω αν υπήρχαν variables που δεν ήταν κοινά και στα δύο... Γνώριζα ότι υπάρχει η intersect() η οποία βρίσκει τα κοινά στοιχεία μεταξύ δυο vectors και η setdiff() η οποία βρίσκει τα μη κοινά στοιχεία ενός vector ως προς ένα άλλο, εγώ όμως ήθελα μια function που να εντοπίζει τα μη κοινά στοιχεία και των δύο vectors...  "Google is your friend" , λένε και η λύση βρέθηκε σε ένα άρθρο που διάβασα στο R - bloggers ... Σε αυτό το άρθρο λοιπόν παρουσιάζεται μια custom function η outersect() η οποία χρησιμοποιώντας την sort() και την setdiff() κάνει αυτό ακριβώς που χρειαζόμουν, εντοπίζει τα μη κοινά στοιχεία δυο vectors... Η σύνταξη της είναι πολύ απλή και κατανοητή και η χρήση της πανεύκολη, τρεις γραμμούλες κώδικα που λύνουν τα χέρια...

RSS Feed Rename and Redirection...

Το πολύ θετικό mail που δέχτηκα από μια αναγνώστρια του blog όσον αφορά το προηγούμενου post , μου υπενθύμισε ότι το feed url του "Ψαροκόκαλου" είναι ακόμα εκείνο το αρχικό url εκείνου του πρώτου feed που είχα φτιάξει τότε πίσω στο 2009 και όταν το blog είχε διαφορετικό όνομα ( "Πλίνθοι και κέραμοι..." ) και διαφορετικό host... Για να υπάρχει μια συνέπεια και μια ομοιομορφία αποφάσισα να το αλλάξω με όσο γίνεται πιο εύκολο τρόπο τόσο για μένα όσο και για τους αναγνώστες του blog που χρησιμοποιούν το feed μου... Η διαδικασία ήταν πολύ απλή και σύντομη, αντιγράφω από το labnol.org όπου και βρήκα το tip: Q. My FeedBurner feed address is feeds.feedburner.com/boring. I want to change the feed URL to something like feeds.feedburner.com/interesting but without telling my existing subscribers to update their RSS readers. Can FeedBurner rename the feed address in the background? A: It’s possible but a three step process. (A) Create a new “interesting” FeedBurner

T-SQL script για μαζική διαγραφή των table constraints μιας database...

Τις τελευταίες μέρες, όπως φάνηκε και από το προηγούμενο post, η δουλειά τα έφερε έτσι ώστε να ξοδέψω τον περισσότερο μου χρόνο στο γραφείο δουλεύοντας με τον SQL Server... Ανέκαθεν τον θεωρούσα το καλύτερο από τα σχετικά προϊόντα διότι κατά τη γνώμη μου έχει το υψηλότερο μέσο όρο όσον αφορά τις επιδόσεις των χαρακτηριστικών του, μπορεί να μην είναι ο καλύτερος συγκριτικά με άλλες databases σε επί μέρους χαρακτηριστικά αλλά συνολικά είναι (για μένα) η καλύτερη database ... Δουλεύοντας λοιπόν, χρειάστηκε σε κάποιο σημείο να διαγράψω κάποια tables από μια development database τα οποία όμως είχαν διάφορα foreign keys που με την σειρά τους εμπόδιζαν τη διαγραφή των tables, οπότε έπρεπε να διαγραφούν πρώτα τα foreign keys και σίγουρα δεν ήθελα να το κάνω manually από το gui του Management Studio, ψάχνοντας και σβήνοντας τα ένα ένα ... Το παρακάτω script ήταν μια ευκαιρία να πετύχω αυτό που ήθελα και να ξεσκονίσω λίγο την T-SQL μου και πολύ το χάρηκα.... Εδώ οφείλω να πω ότι οποιοσ