Δημιουργία διαδραστικού αναπτυσσόμενου μενού για παραμέτρους πίνακα χρησιμοποιώντας το JavaScript API

Temp mail SuperHeros
Δημιουργία διαδραστικού αναπτυσσόμενου μενού για παραμέτρους πίνακα χρησιμοποιώντας το JavaScript API
Δημιουργία διαδραστικού αναπτυσσόμενου μενού για παραμέτρους πίνακα χρησιμοποιώντας το JavaScript API

Ενσωμάτωση παραμέτρων που βασίζονται στον χρήστη σε ενσωματωμένους πίνακες ελέγχου πίνακα

Η ενσωμάτωση πινάκων εργαλείων Tableau σε εφαρμογές Ιστού χρησιμοποιώντας το API ενσωμάτωσης Tableau επιτρέπει στους προγραμματιστές να προσφέρουν δυναμικές λύσεις που βασίζονται σε δεδομένα. Ένας ισχυρός τρόπος για να βελτιώσετε την εμπειρία χρήστη είναι να ενεργοποιήσετε την αλληλεπίδραση με τις παραμέτρους του πίνακα εργαλείων μέσω αναπτυσσόμενων μενού.

Σε αυτό το παράδειγμα, η πρόκληση έγκειται στη διαμόρφωση ενός αναπτυσσόμενου μενού για τον χειρισμό μιας συγκεκριμένης παραμέτρου Tableau που ονομάζεται "Moeda". Σε αντίθεση με τα φίλτρα, τα οποία είναι πιο εύκολο να ενσωματωθούν, οι παράμετροι απαιτούν ακριβή χειρισμό για τη σωστή φόρτωση και ενημέρωση χρησιμοποιώντας JavaScript.

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

Ο στόχος αυτού του άρθρου είναι να σας καθοδηγήσει στα βήματα της ρύθμισης του "Moeda" παράμετρος με αναπτυσσόμενο μενού. Θα μάθετε πώς να λαμβάνετε επιτρεπόμενες τιμές, να τις εμφανίζετε στο αναπτυσσόμενο μενού και να διασφαλίζετε ότι οι παραμέτρους ενημερώνονται αποτελεσματικά όταν γίνεται μια επιλογή, επιλύοντας κοινά προβλήματα που αντιμετωπίζουν οι προγραμματιστές.

Εντολή Παράδειγμα χρήσης
viz.workbook.getParametersAsync() Αυτή η ασύγχρονη μέθοδος ανακτά μια λίστα με όλες τις παραμέτρους που είναι διαθέσιμες στο βιβλίο εργασίας Tableau. Είναι απαραίτητο να φορτώσετε τα δεδομένα παραμέτρων δυναμικά πριν αλληλεπιδράσετε μαζί τους στον ενσωματωμένο πίνακα εργαλείων.
viz.workbook.changeParameterValueAsync() Ενημερώνει την τιμή μιας συγκεκριμένης παραμέτρου στο Tableau. Διασφαλίζει ότι όταν ο χρήστης αλλάζει την αναπτυσσόμενη επιλογή, η παράμετρος στο βιβλίο εργασίας ενημερώνεται σε πραγματικό χρόνο.
allowableValues Αυτή η ιδιότητα διατηρεί τις επιτρεπόμενες τιμές για μια παράμετρο Tableau. Χρησιμοποιείται για τη συμπλήρωση του αναπτυσσόμενου μενού με όλες τις έγκυρες επιλογές παραμέτρων από τις οποίες μπορούν να επιλέξουν οι χρήστες.
currentValue.value Αποκτά πρόσβαση στην τρέχουσα τιμή μιας παραμέτρου Tableau. Αυτό διασφαλίζει ότι η προεπιλεγμένη επιλογή του αναπτυσσόμενου μενού ταιριάζει με την τρέχουσα κατάσταση της παραμέτρου στον πίνακα εργαλείων.
document.createElement("select") Δημιουργεί ένα αναπτυσσόμενο στοιχείο <επιλογή> δυναμικά μέσω JavaScript. Αυτό είναι απαραίτητο κατά την ενσωμάτωση προσαρμοσμένων στοιχείων διεπαφής χρήστη στο HTML κατά το χρόνο εκτέλεσης.
dropdown.addEventListener("change") Προσθέτει ένα πρόγραμμα ακρόασης συμβάντων στο αναπτυσσόμενο μενού για τον εντοπισμό αλλαγών στην επιλογή χρήστη. Όταν ενεργοποιείται, ξεκινά τη διαδικασία ενημέρωσης παραμέτρων στο βιβλίο εργασίας Tableau.
find((p) =>find((p) => p.name === "Moeda") Χρησιμοποιεί τη μέθοδο find() στον πίνακα παραμέτρων για να εντοπίσει τη συγκεκριμένη παράμετρο "Moeda". Αυτό διασφαλίζει ότι η σωστή παράμετρος στοχεύεται για ενημερώσεις.
viz.addEventListener(TableauEventType.FirstInteractive) Αυτή η εντολή διασφαλίζει ότι η συνάρτηση για τη φόρτωση του αναπτυσσόμενου μενού παραμέτρων εκτελείται μόνο όταν ο πίνακας εργαλείων Tableau έχει φορτωθεί πλήρως, αποφεύγοντας προβλήματα χρονισμού.
option.value = value.value Ορίζει το χαρακτηριστικό τιμής ενός στοιχείου
jest.fn().mockResolvedValue() Χρησιμοποιείται σε δοκιμές μονάδων για να χλευάσει τη συμπεριφορά των ασύγχρονων συναρτήσεων. Αυτό διασφαλίζει ότι η λογική ενημέρωσης παραμέτρων προσομοιώνεται σωστά κατά τη διάρκεια της δοκιμής χωρίς να χρειάζεται ένα ζωντανό περιβάλλον Tableau.

Πώς να ελέγξετε δυναμικά τις παραμέτρους του πίνακα χρησιμοποιώντας JavaScript

Τα σενάρια που παρέχονται παραπάνω έχουν σχεδιαστεί για να επιτρέπουν την ομαλή αλληλεπίδραση μεταξύ ενός πίνακα εργαλείων Tableau και ενός προσαρμοσμένου HTML αναπτυσσόμενη λίστα μενού. Αυτά τα σενάρια χρησιμοποιούν το Tableau Embedding API, το οποίο επιτρέπει στους προγραμματιστές να ενσωματώνουν πίνακες εργαλείων Tableau σε εφαρμογές ιστού και να επεκτείνουν τη διαδραστικότητα τους. Η κύρια εστίαση είναι ο χειρισμός μιας παραμέτρου που ονομάζεται "Moeda" μέσω JavaScript, λαμβάνοντας τις επιτρεπόμενες τιμές της και ενημερώνοντας δυναμικά την παράμετρο όταν ο χρήστης κάνει μια επιλογή.

Το πρώτο μέρος του σεναρίου ξεκινά με τη συνάρτηση φόρτωσης της παραμέτρου "Moeda". Αυτή η λειτουργία αξιοποιεί το getParametersAsync() μέθοδος για την ανάκτηση όλων των διαθέσιμων παραμέτρων στο βιβλίο εργασίας. Μόλις φορτωθούν οι παράμετροι, το σενάριο προσδιορίζει τη συγκεκριμένη παράμετρο "Moeda" χρησιμοποιώντας το εύρημα() μέθοδος. Εάν η παράμετρος δεν βρεθεί, καταγράφει ένα σφάλμα για να αποφευχθεί η παραβίαση του υπόλοιπου κώδικα. Αυτό είναι κρίσιμο, καθώς η εργασία με παραμέτρους απαιτεί να γνωρίζουμε αν υπάρχουν πριν προχωρήσουμε με περαιτέρω λογική.

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

Το τελευταίο μέρος του σεναρίου περιλαμβάνει την προσθήκη ενός προγράμματος ακρόασης συμβάντων στο αναπτυσσόμενο μενού. Αυτό το πρόγραμμα ακρόασης συμβάντων εντοπίζει πότε ο χρήστης αλλάζει την επιλεγμένη επιλογή και ενεργοποιεί την changeParameterValueAsync() λειτουργία για ενημέρωση της παραμέτρου στο Tableau. Επιπλέον, το σενάριο διασφαλίζει ότι το αναπτυσσόμενο μενού αποδίδεται μόνο μετά την πλήρη φόρτωση του πίνακα εργαλείων, χρησιμοποιώντας το FirstInteractive συμβάν. Αυτό διασφαλίζει ότι το αναπτυσσόμενο μενού δεν συμπληρώνεται πρόωρα, αποτρέποντας σφάλματα ή ελλείψεις τιμών παραμέτρων. Η λύση είναι αρθρωτή και επεκτάσιμη, καθιστώντας εύκολη την προσαρμογή για άλλες παραμέτρους ή πίνακες εργαλείων χρησιμοποιώντας την ίδια λογική δομή.

Δημιουργία ενός διαδραστικού αναπτυσσόμενου μενού για τον έλεγχο των παραμέτρων πίνακα

Χρήση JavaScript με Tableau Embedding API για δυναμική φόρτωση και ενημέρωση παραμέτρων

// Solution 1: Basic Implementation Using Async/Await and Tableau API
async function loadMoedaParameter() {
  try {
    const parameters = await viz.workbook.getParametersAsync();
    const moedaParam = parameters.find((p) => p.name === "Moeda");
    if (!moedaParam) {
      console.error("Parameter 'Moeda' not found!");
      return;
    }
    const dropdown = document.createElement("select");
    moedaParam.allowableValues.forEach((value) => {
      const option = document.createElement("option");
      option.text = value.formattedValue;
      option.value = value.value;
      dropdown.appendChild(option);
    });
    dropdown.value = moedaParam.currentValue.value;
    dropdown.addEventListener("change", async (e) => {
      const selectedMoeda = e.target.value;
      try {
        await viz.workbook.changeParameterValueAsync("Moeda", selectedMoeda);
        console.log("Moeda changed to:", selectedMoeda);
      } catch (error) {
        console.error("Error changing the Moeda parameter:", error);
      }
    });
    document.getElementById("Moeda-container-desktop").appendChild(dropdown);
  } catch (error) {
    console.error("Error loading the Moeda parameter:", error);
  }
}
viz.addEventListener(TableauEventType.FirstInteractive, loadMoedaParameter);

Εφαρμογή αρθρωτής αναπτυσσόμενης λογικής για ενημερώσεις παραμέτρων πίνακα

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

// Solution 2: Modular and Reusable Code with Error Handling
function createDropdown(options, onChangeCallback) {
  const dropdown = document.createElement("select");
  dropdown.style.cssText = "border:none; width:100%; height:40px; background:#FFF;";
  options.forEach(({ text, value }) => {
    const option = document.createElement("option");
    option.text = text;
    option.value = value;
    dropdown.appendChild(option);
  });
  dropdown.addEventListener("change", (e) => onChangeCallback(e.target.value));
  return dropdown;
}

async function updateParameter(parameterName, value) {
  try {
    await viz.workbook.changeParameterValueAsync(parameterName, value);
    console.log(\`${parameterName} changed to: \${value}\`);
  } catch (error) {
    console.error("Error updating parameter:", error);
  }
}

async function loadParameterDropdown(containerId, parameterName) {
  try {
    const parameters = await viz.workbook.getParametersAsync();
    const param = parameters.find((p) => p.name === parameterName);
    if (!param) throw new Error(\`Parameter '\${parameterName}' not found!\`);
    const options = param.allowableValues.map((val) => ({
      text: val.formattedValue,
      value: val.value,
    }));
    const dropdown = createDropdown(options, (value) => {
      updateParameter(parameterName, value);
    });
    document.getElementById(containerId).appendChild(dropdown);
  } catch (error) {
    console.error("Error loading parameter dropdown:", error);
  }
}

viz.addEventListener(TableauEventType.FirstInteractive, () => {
  loadParameterDropdown("Moeda-container-desktop", "Moeda");
});

Δοκιμή της αλληλεπίδρασης παραμέτρων ταμπλό σε διαφορετικά περιβάλλοντα

Γράψιμο δοκιμών μονάδας με JavaScript για επικύρωση ενημερώσεων παραμέτρων

// Solution 3: Unit Test to Validate Parameter Changes
function mockVizWorkbook() {
  return {
    parameters: [{
      name: "Moeda",
      allowableValues: [{ value: "USD", formattedValue: "USD" }],
      currentValue: { value: "USD" },
    }],
    changeParameterValueAsync: jest.fn().mockResolvedValue(),
  };
}

test("Dropdown updates Moeda parameter correctly", async () => {
  const vizMock = { workbook: mockVizWorkbook() };
  const updateSpy = vizMock.workbook.changeParameterValueAsync;
  document.body.innerHTML = '<div id="Moeda-container-desktop"></div>'; 

  await loadParameterDropdown("Moeda-container-desktop", "Moeda");
  const dropdown = document.querySelector("select");
  dropdown.value = "USD";
  dropdown.dispatchEvent(new Event("change"));

  expect(updateSpy).toHaveBeenCalledWith("Moeda", "USD");
});

Βέλτιστες πρακτικές για το χειρισμό παραμέτρων πίνακα με JavaScript

Κατά την ενσωμάτωση πινάκων εργαλείων Tableau σε εφαρμογές Ιστού, οι προγραμματιστές συχνά χρειάζεται να κάνουν τις παραμέτρους δυναμικές για να βελτιώσουν τη διαδραστικότητα των χρηστών. Μια βασική πρόκληση είναι ο χειρισμός παραμέτρων όπως "Moeda" μέσω ενός αναπτυσσόμενου μενού αντί της χρήσης φίλτρων. Οι παράμετροι είναι πιο περίπλοκες επειδή απαιτούν κλήσεις API για την ανάκτηση των επιτρεπόμενων τιμών τους και πρέπει να ενημερωθούν μέσω συναρτήσεων, όπως π.χ. changeParameterValueAsync(). Αυτή η προσέγγιση δίνει στους χρήστες περισσότερο έλεγχο σε συγκεκριμένες προβολές δεδομένων στον πίνακα εργαλείων χωρίς ανανέωση της σελίδας.

Η διαχείριση παραμέτρων στους πίνακες εργαλείων Tableau περιλαμβάνει τη σωστή ταυτοποίησή τους getParametersAsync(). Μια κοινή παγίδα είναι ότι ορισμένες παράμετροι ενδέχεται να μην είναι διαθέσιμες ή μπορεί να χρειάζονται διαφορετικά επίπεδα πρόσβασης ανάλογα με τη διαμόρφωση του βιβλίου εργασίας. Επομένως, είναι σημαντικό να συμπεριλάβετε τη διαχείριση σφαλμάτων για να αποτρέψετε τη διακοπή της αναπτυσσόμενης λογικής εάν δεν βρεθεί μια παράμετρος. Μια άλλη πτυχή που πρέπει να λάβετε υπόψη είναι η απόδοση του αναπτυσσόμενου μενού μόνο μετά την πλήρη φόρτωση του πίνακα εργαλείων. Χρησιμοποιώντας το FirstInteractive Το συμβάν διασφαλίζει ότι τα στοιχεία του πίνακα εργαλείων είναι έτοιμα πριν από την εφαρμογή προσαρμογών.

Η βελτιστοποίηση απόδοσης είναι επίσης σημαντική, ειδικά όταν πρόκειται για μεγάλα σύνολα δεδομένων ή πίνακες εργαλείων με πολλαπλές παραμέτρους. JavaScript λειτουργεί όπως εύρημα() βοηθήστε να περιορίσετε την αναζήτηση παραμέτρων, αλλά ο κώδικας πρέπει να παραμείνει αρθρωτός για να επιτρέψει μελλοντική επεκτασιμότητα. Οι προγραμματιστές θα πρέπει επίσης να επικυρώνουν τις τιμές των παραμέτρων πριν τις ενημερώσουν για να αποφευχθούν ασυνέπειες μεταξύ της διεπαφής χρήστη και των δεδομένων του πίνακα εργαλείων. Με αυτές τις στρατηγικές, γίνεται ευκολότερη η αποτελεσματική διαχείριση των παραμέτρων Tableau και η δημιουργία πινάκων εργαλείων με απρόσκοπτη εμπειρία χρήστη.

Συχνές ερωτήσεις σχετικά με τη χρήση παραμέτρων στο Tableau API

  1. Ποια είναι η διαφορά μεταξύ μιας παραμέτρου και ενός φίλτρου στο Tableau;
  2. Οι παράμετροι επιτρέπουν στους χρήστες να μεταβιβάζουν συγκεκριμένες τιμές στον πίνακα εργαλείων, ενώ τα φίλτρα περιορίζουν τα δεδομένα που εμφανίζονται βάσει κριτηρίων. Τα φίλτρα δρουν σε σύνολα δεδομένων, ενώ οι παράμετροι επηρεάζουν συγκεκριμένα πεδία ή υπολογισμούς.
  3. Γιατί το αναπτυσσόμενο μενού παραμένει κενό κατά την ανάκτηση παραμέτρων;
  4. Βεβαιωθείτε ότι το getParametersAsync() η λειτουργία ανακτά με επιτυχία την παράμετρο. Εάν δεν το κάνει, η παράμετρος μπορεί να είναι κρυφή ή να μην είναι προσβάσιμη λόγω περιορισμών στο βιβλίο εργασίας.
  5. Πώς μπορώ να διασφαλίσω ότι το αναπτυσσόμενο μενού ταιριάζει με την τρέχουσα κατάσταση της παραμέτρου;
  6. Χρησιμοποιήστε το currentValue.value ιδιότητα για να ορίσετε την προεπιλεγμένη επιλογή στο αναπτυσσόμενο μενού. Αυτό διατηρεί τη διεπαφή χρήστη και τον πίνακα εργαλείων ευθυγραμμισμένα.
  7. Πώς μπορώ να χειριστώ σφάλματα κατά την ενημέρωση των παραμέτρων στο Tableau;
  8. Τυλίξτε το changeParameterValueAsync() κλήση μέσα α try-catch μπλοκ για τη διαχείριση τυχόν σφαλμάτων που προκύπτουν κατά την ενημέρωση της παραμέτρου.
  9. Ποιο συμβάν διασφαλίζει ότι ο πίνακας εργαλείων είναι έτοιμος πριν από την προσαρμογή;
  10. Ο FirstInteractive Το συμβάν στο Tableau API σηματοδοτεί ότι ο πίνακας εργαλείων έχει φορτωθεί πλήρως και είναι έτοιμος για περαιτέρω αλληλεπιδράσεις, όπως η προσθήκη ενός αναπτυσσόμενου μενού.

Τελικές σκέψεις σχετικά με τον διαδραστικό χειρισμό παραμέτρων

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

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

Πηγές και αναφορές για την εφαρμογή παραμέτρων πίνακα
  1. Λεπτομέρειες σχετικά με την ενσωμάτωση πινάκων εργαλείων και την αλληλεπίδραση με παραμέτρους αναφέρθηκαν από τον επίσημο Τεκμηρίωση Tableau JavaScript API .
  2. Πληροφορίες για ακροατές συμβάντων, όπως π.χ FirstInteractive, προήλθαν από παραδείγματα που βρέθηκαν στο Tableau Community Forum .
  3. Οι γενικές έννοιες και οι βέλτιστες πρακτικές για την εργασία με στοιχεία δυναμικής διεπαφής χρήστη σε JavaScript ελήφθησαν από Έγγραφα Ιστού MDN .