Filodos

Αναλύσεις BI

Διαβάστε πίνακες όλου του στόλου σε Power BI, Excel Power Query, Google Sheets ή Looker Studio μέσω σύνδεσης REST. Κάθε ροή δίνει μία απλή γραμμή ανά στοιχείο για όλα τα οχήματα του οργανισμού σας. Μέρος της τεκμηρίωσης.

Κοινοί κανόνες

Όλες οι ροές ακολουθούν τους ίδιους κανόνες. Ένα ερώτημα Power Query διαβάζει καθεμία από αυτές.

ΠαράμετροςΥποχρεωτικήΣημειώσεις
sinceΝαι, εκτός από τα οχήματαΠρώτη ημερομηνία του στόλου, σε μορφή YYYY-MM-DD.
untilΝαι, εκτός από τα οχήματαΤελευταία ημερομηνία του στόλου, σε μορφή YYYY-MM-DD. Και τα δύο όρια περιλαμβάνονται. Το διάστημα δεν μπορεί να ξεπερνά τις 366 ημέρες.
limitΌχιΓραμμές ανά σελίδα. Προεπιλογή 1000, μέγιστο 5000.
offsetΌχιΗ πρώτη γραμμή που επιστρέφεται. Προεπιλογή 0. Χρησιμοποιήστε το next_offset της απάντησης για την επόμενη σελίδα.

Η απάντηση περιέχει rows, total, limit, offset και next_offset. Το next_offset είναι null όταν δεν μένουν γραμμές. Οι ημερομηνίες ακολουθούν το ημερολόγιο του στόλου (Ευρώπη/Αθήνα). Οι χρονοσφραγίδες είναι σε μορφή ISO 8601, σε ώρα Ευρώπης/Αθήνας, με ρητή μετατόπιση ώρας, για παράδειγμα 2026-10-04T08:00:00+03:00.

Δημιουργήστε κλειδί με το δικαίωμα analytics:read. Ένα κλειδί διαβάζει μόνο δεδομένα του οργανισμού του. Οι είσοδοι οδηγών παίρνουν 403. Ένα κλειδί χωρίς το δικαίωμα παίρνει 403. Ανεστραμμένο ή πολύ μεγάλο διάστημα ημερομηνιών παίρνει 422.

Κάθε γραμμή έχει device_id και vehicle_name. Το όνομα οχήματος προέρχεται από την τρέχουσα λίστα συσκευών και είναι null όταν η λίστα δεν είναι διαθέσιμη. Τα ονόματα οδηγών προέρχονται από τις συνδέσεις οδηγών κάθε οχήματος. Όταν δύο οδηγοί μοιράζονται ένα όχημα εκείνη τη στιγμή, η τιμή δείχνει και τους δύο, χωρισμένους με κόμμα.

Ροές

Κάθε ροή έχει δική της σελίδα με παράδειγμα αιτήματος, παράδειγμα απάντησης, το αποτέλεσμα στο Excel, όλα τα πεδία και τα σφάλματα.

ΡοήΔιαδρομή URLΜία γραμμή για
Ημερήσιες μετρήσειςGET /v1/analytics/dailyΈνα όχημα σε μία ημέρα: απόσταση, χρόνος οδήγησης και ρελαντί, υπερβάσεις ταχύτητας, απότομα συμβάντα, κόπωση.
ΔιαδρομέςGET /v1/analytics/tripsΜία διαδρομή: ώρα έναρξης και τέλους, διάρκεια, απόσταση, μετρήσεις οδήγησης, σημείο έναρξης και τέλους.
ΣυμβάνταGET /v1/analytics/eventsΈνας συναγερμός ή ένα συμβάν οδήγησης: τύπος, σοβαρότητα, οδηγός, διαδρομή.
Επισκέψεις ζωνώνGET /v1/analytics/visitsΜία παραμονή σε ζώνη: όνομα και τύπος ζώνης, ώρα εισόδου και εξόδου, λεπτά.
ΟχήματαGET /v1/analytics/vehiclesΈνα όχημα: όνομα, κατάσταση, τελευταία αναφορά, τρέχοντες οδηγοί. Πίνακας αναφοράς.

Excel Power Query

  1. Δημιουργήστε κλειδί API με το δικαίωμα analytics:read. Ακολουθήστε τον οδηγό Ρύθμιση κλειδιών API.
  2. Στο Excel, επιλέξτε Δεδομένα → Λήψη δεδομένων → Από άλλες προελεύσεις → Κενό ερώτημα (Data → Get Data → From Other Sources → Blank Query).
  3. Ανοίξτε το Σύνθετο πρόγραμμα επεξεργασίας (Advanced Editor). Αντικαταστήστε το περιεχόμενό του με το παρακάτω ερώτημα.
  4. Αντικαταστήστε το κλειδί API και τις ημερομηνίες.
  5. Ορίστε το Feed σε daily, trips, events, visits ή vehicles.
  6. Επιλέξτε Τέλος (Done) και μετά Κλείσιμο & φόρτωση (Close & Load).
  7. Για περισσότερες ροές, αντιγράψτε το ερώτημα και αλλάξτε το Feed. Δώστε σε κάθε ερώτημα το όνομα της ροής του.
let
    ApiKey = "filodos_REPLACE_WITH_YOUR_KEY",
    Feed = "daily",
    Since = "2026-09-01",
    Until = "2026-10-05",
    BaseUrl = "https://filodos.gr/filodos-dashboard/api/scoring",

    GetPage = (Offset as number) as record =>
        Json.Document(
            Web.Contents(
                BaseUrl,
                [
                    RelativePath = "v1/analytics/" & Feed,
                    Query = [
                        since = Since,
                        until = Until,
                        limit = "5000",
                        offset = Number.ToText(Offset)
                    ],
                    Headers = [
                        Authorization = "Bearer " & ApiKey,
                        Accept = "application/json"
                    ]
                ]
            )
        ),

    Pages = List.Generate(
        () => [Page = GetPage(0)],
        each [Page] <> null,
        each
            if [Page][next_offset] = null then
                [Page = null]
            else
                [Page = GetPage([Page][next_offset])],
        each [Page][rows]
    ),
    Rows = List.Combine(Pages),
    Result = Table.FromRecords(Rows)
in
    Result

Το Excel μπορεί να ρωτήσει πώς να συνδεθεί στην προέλευση web. Επιλέξτε Ανώνυμα (Anonymous). Το ερώτημα στέλνει το κλειδί API στην κεφαλίδα bearer. Αν το Excel ρωτήσει, ορίστε το επίπεδο προστασίας προσωπικών δεδομένων της προέλευσης σε Οργανισμού (Organizational).

Ανανεώστε το ερώτημα για να φορτώσετε τρέχοντα δεδομένα. Ζητά κάθε σελίδα μέχρι το next_offset να γίνει null. Η ροή οχημάτων αγνοεί τις ημερομηνίες. Η σελίδα κάθε ροής δείχνει παράδειγμα του φύλλου που δημιουργεί το ερώτημα.

Για στήλες αριθμών και ημερομηνιών, ανοίξτε το ερώτημα στο πρόγραμμα επεξεργασίας Power Query. Επιλέξτε όλες τις στήλες και μετά Μετασχηματισμός → Ανίχνευση τύπου δεδομένων (Transform → Detect Data Type). Οι χρονοσφραγίδες γίνονται τιμές ημερομηνίας/ώρας/ζώνης ώρας.

Για να συσχετίσετε τους πίνακες, χρησιμοποιήστε το device_id. Οι ροές διαδρομών και συμβάντων έχουν επίσης κοινό το trip_id.

Google Sheets

Οι τύποι των Φύλλων δεν στέλνουν την κεφαλίδα Bearer που ζητά το API. Χρησιμοποιήστε Apps Script. Το παρακάτω σενάριο διαβάζει κάθε σελίδα μίας ροής και γράφει τις γραμμές στην ανοιχτή καρτέλα.

  1. Δημιουργήστε κλειδί API με το δικαίωμα analytics:read. Ακολουθήστε τον οδηγό Ρύθμιση κλειδιών API.
  2. Ανοίξτε το φύλλο. Επιλέξτε Επεκτάσεις → Apps Script (Extensions → Apps Script).
  3. Αντικαταστήστε το περιεχόμενο του Code.gs με το παρακάτω σενάριο.
  4. Αντικαταστήστε το κλειδί API και τις ημερομηνίες.
  5. Ορίστε το FILODOS_FEED σε daily, trips, events, visits ή vehicles.
  6. Στη λίστα συναρτήσεων επιλέξτε loadFilodosFeed και μετά Εκτέλεση (Run). Εγκρίνετε την πρόσβαση όταν το ζητήσει η Google.
  7. Επιστρέψτε στο φύλλο. Το σενάριο καθαρίζει την ανοιχτή καρτέλα και γράφει τη γραμμή κεφαλίδων και όλες τις γραμμές.
  8. Για περισσότερες ροές, ανοίξτε μία καρτέλα για κάθε ροή. Αλλάξτε το FILODOS_FEED και εκτελέστε ξανά.
// Φορτώνει μία ροή αναλύσεων του Filodos σε αυτό το φύλλο.
// 1. Δημιουργήστε κλειδί API με το δικαίωμα analytics:read.
// 2. Επικολλήστε το κλειδί παρακάτω. Ορίστε FEED, SINCE και UNTIL.
// 3. Επιλέξτε loadFilodosFeed και πατήστε Εκτέλεση. Εγκρίνετε την πρόσβαση όταν το ζητήσει η Google.
// 4. Για μία ακόμη ροή, ανοίξτε μία ακόμη καρτέλα και εκτελέστε ξανά με νέο FEED.

var FILODOS_API_KEY = 'filodos_REPLACE_WITH_YOUR_KEY';
var FILODOS_FEED = 'daily'; // daily, trips, events, visits, or vehicles
var FILODOS_SINCE = '2026-09-01'; // πρώτη ημέρα του στόλου, YYYY-MM-DD
var FILODOS_UNTIL = '2026-10-05'; // τελευταία ημέρα του στόλου, YYYY-MM-DD
var FILODOS_BASE_URL =
  'https://filodos.gr/filodos-dashboard/api/scoring';

function loadFilodosFeed() {
  var rows = filodosFetchAll_(FILODOS_FEED, FILODOS_SINCE, FILODOS_UNTIL);
  writeRows_(SpreadsheetApp.getActiveSheet(), rows);
}

function filodosFetchAll_(feed, since, until) {
  var all = [];
  var offset = 0;
  for (;;) {
    var params = {limit: '5000', offset: String(offset)};
    if (feed !== 'vehicles') {
      params.since = since;
      params.until = until;
    }
    var query = Object.keys(params).map(function (k) {
      return encodeURIComponent(k) + '=' + encodeURIComponent(params[k]);
    }).join('&');
    var res = UrlFetchApp.fetch(
      FILODOS_BASE_URL + '/v1/analytics/' + feed + '?' + query,
      {
        headers: {
          Authorization: 'Bearer ' + FILODOS_API_KEY,
          Accept: 'application/json'
        },
        muteHttpExceptions: true
      });
    if (res.getResponseCode() !== 200) {
      throw new Error(
        'Filodos answered ' + res.getResponseCode() + ': ' +
        res.getContentText());
    }
    var page = JSON.parse(res.getContentText());
    all.push.apply(all, page.rows);
    if (page.next_offset === null || page.next_offset === undefined) break;
    offset = page.next_offset;
  }
  return all;
}

function writeRows_(sheet, rows) {
  sheet.clearContents();
  if (rows.length === 0) {
    sheet.getRange(1, 1).setValue('No rows.');
    return;
  }
  var header = [];
  rows.forEach(function (row) {
    Object.keys(row).forEach(function (k) {
      if (header.indexOf(k) === -1) header.push(k);
    });
  });
  var values = [header].concat(rows.map(function (row) {
    return header.map(function (k) {
      var v = row[k];
      return v === null || v === undefined ? '' : v;
    });
  }));
  sheet.getRange(1, 1, values.length, header.length).setValues(values);
}

Το σενάριο ζητά σελίδες των 5000 γραμμών μέχρι το next_offset να γίνει null. Η ροή οχημάτων αγνοεί τις ημερομηνίες. Εκτελέστε ξανά τη συνάρτηση για ανανέωση των δεδομένων.

Μία εκτέλεση σταματά μετά από έξι λεπτά. Αυτό είναι όριο της Google. Αν ο στόλος είναι μεγάλος, χωρίστε το διάστημα σε μικρότερα μέρη. Φορτώστε κάθε μέρος στη δική του καρτέλα.

Το κλειδί API είναι μυστικό. Αν μοιράζεστε το φύλλο, κρατήστε το κλειδί στις ιδιότητες του σεναρίου. Διαβάστε το με PropertiesService αντί να το επικολλάτε στον κώδικα.

Για να συσχετίσετε τους πίνακες, χρησιμοποιήστε το device_id. Οι ροές διαδρομών και συμβάντων έχουν επίσης κοινό το trip_id.

Power BI Desktop

  1. Δημιουργήστε κλειδί API με το δικαίωμα analytics:read.
  2. Στο Power BI Desktop, επιλέξτε Λήψη δεδομένων → Κενό ερώτημα (Get data → Blank query).
  3. Ανοίξτε τη Διαχείριση παραμέτρων (Manage Parameters). Δημιουργήστε παραμέτρους κειμένου με ονόματα FilodosApiKey, FilodosSince και FilodosUntil. Συμπληρώστε το κλειδί και τα όρια ημερομηνιών.
  4. Ανοίξτε το Σύνθετο πρόγραμμα επεξεργασίας (Advanced Editor). Επικολλήστε το ερώτημα του Excel από πάνω.
  5. Διαγράψτε τις γραμμές ApiKey, Since και Until.
  6. Αντικαταστήστε στο ερώτημα τα ApiKey, Since και Until με τα ονόματα των παραμέτρων.
  7. Επιλέξτε Τέλος (Done). Επιλέξτε όλες τις στήλες και μετά Μετασχηματισμός → Ανίχνευση τύπου δεδομένων (Transform → Detect Data Type).
  8. Αντιγράψτε το ερώτημα για κάθε άλλη ροή και αλλάξτε το Feed. Μετά επιλέξτε Κλείσιμο & εφαρμογή (Close & Apply).
  9. Στην προβολή μοντέλου, συσχετίστε κάθε πίνακα με τον πίνακα vehicles μέσω του device_id.

Όταν το Power BI ζητήσει διαπιστευτήρια web, επιλέξτε Ανώνυμα (Anonymous). Το ερώτημα προσθέτει το κλειδί bearer στην κεφαλίδα του αιτήματος. Αν δημοσιεύσετε την αναφορά, ρυθμίστε τα διαπιστευτήρια της προέλευσης web στην υπηρεσία Power BI.

Το κλειδί API είναι μυστικό. Δώστε πρόσβαση στο αρχείο PBIX και στις παραμέτρους του μόνο σε όσους επιτρέπεται να χρησιμοποιούν το κλειδί. Δημιουργήστε ξεχωριστό κλειδί για αυτή τη ροή και ανακαλέστε το αν το αρχείο διαρρεύσει.