Στατιστικά - Γραφήματα

Καλησπέρα σε όλους!!!

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

Έχει ασχοληθεί κανείς με παρόμοιο πρόβλημα;

Υπάρχει μήπως κανένα extension του Yii που διευκολύνει την κατάσταση;

Τι γίνεται στην περίπτωση των γραφημάτων; Πως γίνεται η σύνδεσή τους με τα δεδομένα της βάσης; Γενικότερα, πως ενσωματώνεται ένα γράφημα σε μια ιστοσελίδα;

Οι ερωτήσεις προφανώς είναι γενικές αλλά θα εξειδικευτούν όταν λάβω κάποιο feedback από τους αναγνώστες του φόρουμ!!

Δες τη βιβλιοθήκη Highcharts. Είναι απλά καταπληκτική.

Ευχαριστώ Βασίλη για την γρήγορη απάντηση…Είναι όντως καταπληκτική αν λάβουμε υπ’ όψη τα demos!!Θα το ψάξω το πράγμα αλλά υποθέτοντας ότι την έχεις χρησιμοποιήσει ίσως χρειαστώ τη βοήθειά σου κατά την ενσωμάτωσή της στο Yii…

Δε θέλει κάτι ιδιαίτερο. Θα κατεβάσεις τη βιβλιοθήκη και θα ενσωματώσεις το .js αρχείο στο controller action (μέσω της registerScriptFile του clientScript). Από εκεί και πέρα κοιτάς τα παραδείγματα που έχει και γράφεις τον κώδικα σε javascript (στον controller) για να φτιάξεις το γράφημά σου. Θα παιδευτείς λίγο μέχρι να κάνεις τα πρώτα παραδείγματά σου, αλλά στο τέλος αξίζει.

Καλησπέρα σε όλους!!

Επιστρέφω στην ανάπτυξη της εφαρμογής μετά από καιρό λόγω άλλων προτεραιοτήτων!!

Το θέμα λοιπόν είναι να παρουσιάσω διαγράμματα τα οποία θα τραβάνε κάποια δεδομένα από την βάση και θα μπορούν να μου δώσουν κάποιας μορφής διαγραμματική πληροφόρηση.

Βασίλη, είπες ότι αυτό που χρειάζεται αρχικά είναι να κατεβάσω τη βιβλιοθήκη και να κάνω register το αρχείο hicharts.js που εμπεριέχει χρησιμοποιώντας την εντολή,


Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . '/js_plugins/highcharts.js);

στον controller action. Κι εδώ είναι που έχω απορία:

Σε ποιόν controller action εννοείς;;

α) Εννοείς σε κάποιον από τους controllers που χρησιμοποιώ για την διαχείριση των 13 πινάκων της βάσης δεδομένων;

β) Εννοείς τη μέθοδο actions() που δηλώνεται στον ορισμό της κλάσης του SiteController;

γ) Εννοείς να φτιάξω έναν δικό μου Controller που να κληρονομεί από την κλάση Controller στην οποία θα δηλώνω μεθόδους κλπ; Αν κάνω έναν δικό μου controller που θα ορίζεται η λογική δεν χρειάζεται να γράψω κώδικα σε ένα αρχείο view όσο αφορά την εμφάνιση;

δ) Εννοείς κάτι άλλο που δεν καταλαβαίνω; Δώσε μου αν μπορείς ένα προγραμματιστικό παράδειγμα!!

Επίσης ανέφερες ότι πρέπει να γράψω τον κώδικα javascript στον controller. Δεν πρέπει να γράφουμε κώδικα που σχετίζεται με την παρουσίαση των δεδομένων σε αρχεία όψεων (views) ;

Αυτά για αρχή…Σίγουρα μετά την απάντησή σου θα έχω κι άλλες απορίες να ξέρεις.

Ευχαριστώ εκ των προτέρων!!

Σωστά.

Στο controller action που θα έχεις για να εμφανίσεις τα αποτελέσματά σου. Δεν είναι κάποιο συγκεκριμένο. Όπως έχεις για τις άλλες σελίδες έτσι θα φτιάξεις σε ένα οποιοδήποτε controller ένα action για την εμφάνιση του γραφήματος. Πχ.


class GraphController extends Controller {


....


  public function actionShowGraph() {


  .....


  }


}




Γενικά ναι, αλλά πρόσεξε ότι η HighCharts είναι βιβλιοθήκη σε Javascript καθαρά. Τι σημαίνει αυτό; Ότι με κάποιο τρόπο θα πρέπει να τροφοδοτήσεις τα δεδομένα για το γράφημα. Δηλαδή θα το κάνεις σε javascript αναγκαστικά. Δεν μπορείς να θεωρήσεις 100% ότι αυτό το σύνολο είναι κώδικας view. Εγώ προσωπικά τον κώδικα σε javascript τον βάζω πάντα στο controller action και όχι στο view, χωρίς αυτό να είναι δεσμευτικό.

Όπως είπα, θα πρέπει λίγο να διαβάσεις/παίξεις με παραδείγματα από το site του Highcharts για να καταλάβεις τι γίνεται. Δυστυχώς δεν έχω κάποιο πρόχειρο παράδειγμα αυτή τη στιγμή να σου δώσω…

Καλησπέρα και πάλι…

Έχω μια ερωτησούλα που αφορά την SQL αυτή τη φορά.

Γράφω λοιπόν:




$m5 = Frames::model()->findAllBySql("SELECT COUNT(id) FROM Frames WHERE Frame_Cutting_Date BETWEEN \"01/03/2012\" AND \"31/03/2012\"");


echo $m5;

H echo μου δίνει αποτέλεσμα array και όχι έναν ακέραιο αριθμό όπως θα έπρεπε και όπως παίρνω όταν κάνω δοκιμή την εντολή στον PHPMyAdmin. Απ’ ό,τι είδα στο manual η μέθοδος findAllBySql επιστρέφει μια ActiveRecord. Χρειάζεται να χρησιμοποιήσω και κάποια μέθοδο (π.χ get) στην echo ή είναι τελείως λάθος το σκεπτικό και πρέπει να κάνω κάτι άλλο??

Σύμφωνα με το SQL ερώτημά σου, αυτό που πρέπει να έχεις πιο σωστά είναι:


$m5 = Yii::app()->db->createCommand("SELECT COUNT(id) FROM Frames WHERE Frame_Cutting_Date BETWEEN \"01/03/2012\" AND \"31/03/2012\"")->queryScalar();


echo $m5;

Αυτό θα σου επιτρέψει απλά ένα αριθμό. Δηλαδή δε χρειάζεται να πάρεις από το μοντέλο το count.

Επίσης το σωστό (και ασφαλές) στις παραμέτρους των ερωτημάτων είναι να χρησιμοποιείς παραμέτρους πχ. το :dateStart και μετά να κάνεις bind το :dateStart με τη τιμή που θέλεις. Δηλαδή:


$m5 = Yii::app()->db->createCommand("SELECT COUNT(id) FROM Frames WHERE Frame_Cutting_Date BETWEEN :dateStart AND :dateEnd")->queryScalar(array(':dateStart'=>'01/03/2012', ':dateEnd'=>'31/03/2012'));

Ευχαριστώ για άλλη μια φορά…και θα ακολουθήσω τις οδηγίες σου!! Παρεμπιπτόντως, για ενημέρωση όσων διαβάζουν ή θα διαβάσουν στο μέλλον τη συζήτηση χρησιμοποιώ το πολύ καλό extension Highchart που μπορεί κανείς να κατεβάσει και να εγκαταστήσει πανεύκολα!! Λίγη προσοχή θέλει στον τύπο δεδομένων που θα εισάγονται στην παράμετρο ‘data’. Η παράμετρος δέχεται πραγματικούς αριθμούς οπότε με λίγο type casting θα μπορέσετε να ξεπεράσετε τυχόν προβλήματα. Το αναφέρω γιατί συνήθως σε ερωτήματα που κάνουμε στη βάση μας επιστρέφονται τιμές τύπου string!!

Ευχαριστώ και πάλι Βασίλη!!