Intégration des paramètres pilotés par l'utilisateur dans les tableaux de bord intégrés Tableau
L'intégration de tableaux de bord Tableau dans des applications Web à l'aide de l'API Tableau Embedding permet aux développeurs de fournir des solutions dynamiques basées sur les données. Un moyen puissant d'améliorer l'expérience utilisateur consiste à permettre l'interaction avec les paramètres du tableau de bord via des menus déroulants.
Dans cet exemple, le défi réside dans la configuration d'un menu déroulant pour manipuler un paramètre spécifique de Tableau appelé "Moeda". Contrairement aux filtres, plus faciles à intégrer, les paramètres nécessitent une manipulation précise pour être chargés et mis à jour correctement à l'aide de JavaScript.
Même si l'API Tableau fournit des méthodes pour accéder aux paramètres, il peut être difficile d'afficher correctement les valeurs de paramètres disponibles sous forme d'options déroulantes et de garantir des mises à jour transparentes lorsque les utilisateurs effectuent une sélection.
Le but de cet article est de vous guider à travers les étapes de configuration du "Moeda" paramètre avec une liste déroulante. Vous apprendrez à récupérer les valeurs autorisées, à les afficher dans la liste déroulante et à garantir que les paramètres sont mis à jour efficacement lorsqu'une sélection est effectuée, résolvant ainsi les problèmes courants auxquels les développeurs sont confrontés.
Commande | Exemple d'utilisation |
---|---|
viz.workbook.getParametersAsync() | Cette méthode asynchrone récupère une liste de tous les paramètres disponibles dans le classeur Tableau. Il est essentiel de charger les données des paramètres de manière dynamique avant d'interagir avec eux dans le tableau de bord intégré. |
viz.workbook.changeParameterValueAsync() | Met à jour la valeur d'un paramètre spécifique dans Tableau. Cela garantit que lorsque l'utilisateur modifie la sélection déroulante, le paramètre dans le classeur est mis à jour en temps réel. |
allowableValues | Cette propriété contient les valeurs autorisées pour un paramètre Tableau. Il est utilisé pour remplir le menu déroulant avec toutes les options de paramètres valides parmi lesquelles les utilisateurs peuvent sélectionner. |
currentValue.value | Accède à la valeur actuelle d'un paramètre Tableau. Cela garantit que la sélection par défaut de la liste déroulante correspond à l'état actuel du paramètre dans le tableau de bord. |
document.createElement("select") | Crée un élément déroulant |
dropdown.addEventListener("change") | Ajoute un écouteur d'événements à la liste déroulante pour détecter les modifications de sélection de l'utilisateur. Lorsqu'il est déclenché, il lance le processus de mise à jour des paramètres dans le classeur Tableau. |
find((p) =>find((p) => p.name === "Moeda") | Utilise la méthode find() sur le tableau des paramètres pour localiser le paramètre "Moeda" spécifique. Cela garantit que le paramètre correct est ciblé pour les mises à jour. |
viz.addEventListener(TableauEventType.FirstInteractive) | Cette commande garantit que la fonction de chargement de la liste déroulante des paramètres n'est exécutée qu'une fois le tableau de bord Tableau entièrement chargé, évitant ainsi les problèmes de timing. |
option.value = value.value | Définit l'attribut value d'un élément |
jest.fn().mockResolvedValue() | Utilisé dans les tests unitaires pour simuler le comportement des fonctions asynchrones. Cela garantit que la logique de mise à jour des paramètres est correctement simulée pendant les tests sans avoir besoin d'un environnement Tableau en direct. |
Comment contrôler dynamiquement les paramètres de Tableau à l'aide de JavaScript
Les scripts fournis ci-dessus sont conçus pour permettre une interaction fluide entre un tableau de bord Tableau et un HTML personnalisé. dérouler menu. Ces scripts utilisent l'API Tableau Embedding, qui permet aux développeurs d'intégrer des tableaux de bord Tableau dans des applications Web et d'étendre leur interactivité. L'objectif principal est de manipuler un paramètre nommé "Moeda" via JavaScript en récupérant ses valeurs autorisées et en mettant à jour le paramètre de manière dynamique lorsque l'utilisateur effectue une sélection.
La première partie du script commence par la fonction permettant de charger le paramètre "Moeda". Cette fonction exploite le getParametersAsync() méthode pour récupérer tous les paramètres disponibles dans le classeur. Une fois les paramètres chargés, le script identifie le paramètre spécifique "Moeda" à l'aide du trouver() méthode. Si le paramètre n'est pas trouvé, il enregistre une erreur pour éviter de casser le reste du code. Ceci est crucial car travailler avec des paramètres nécessite de savoir s'ils existent avant de poursuivre la logique.
Après avoir identifié le paramètre, un dérouler Le menu est créé dynamiquement à l'aide des méthodes de manipulation DOM de JavaScript. Chaque valeur parmi les valeurs autorisées du paramètre est ajoutée en tant qu’option dans la liste déroulante. Le script garantit que la liste déroulante reflète l'état actuel du paramètre en définissant l'option sélectionnée sur la valeur actuelle du paramètre. Cette étape est essentielle pour garantir que l'utilisateur voit la dernière valeur dans le tableau de bord, assurant ainsi la cohérence entre l'état du tableau de bord et l'option par défaut de la liste déroulante.
La dernière partie du script consiste à ajouter un écouteur d'événement à la liste déroulante. Cet écouteur d'événements détecte lorsque l'utilisateur modifie l'option sélectionnée et déclenche le changeParameterValueAsync() fonction pour mettre à jour le paramètre dans Tableau. De plus, le script garantit que la liste déroulante n'est affichée qu'une fois le tableau de bord entièrement chargé à l'aide de l'option PremierInteractif événement. Cela garantit que la liste déroulante n'est pas remplie prématurément, évitant ainsi les erreurs ou les valeurs de paramètres manquantes. La solution est à la fois modulaire et évolutive, ce qui permet de s'adapter facilement à d'autres paramètres ou tableaux de bord en réutilisant la même structure logique.
Création d'une liste déroulante interactive pour contrôler les paramètres de Tableau
Utilisation de JavaScript avec l'API Tableau Embedding pour charger et mettre à jour les paramètres de manière dynamique
// 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);
Implémentation d'une logique de liste déroulante modulaire pour les mises à jour des paramètres de Tableau
Approche optimisée utilisant des fonctions modulaires et une gestion améliorée des erreurs
// 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");
});
Test de l'interaction des paramètres Tableau dans différents environnements
Écrire des tests unitaires avec JavaScript pour valider les mises à jour des paramètres
// 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");
});
Meilleures pratiques pour gérer les paramètres de Tableau avec JavaScript
Lors de l'intégration de tableaux de bord Tableau dans des applications Web, les développeurs doivent souvent rendre les paramètres dynamiques pour améliorer l'interactivité des utilisateurs. L'un des principaux défis consiste à gérer des paramètres tels que "Moeda" via un menu déroulant au lieu d’utiliser des filtres. Les paramètres sont plus complexes car ils nécessitent des appels API pour récupérer leurs valeurs autorisées et doivent être mis à jour via des fonctions telles que changeParameterValueAsync(). Cette approche donne aux utilisateurs plus de contrôle sur des vues de données spécifiques dans le tableau de bord sans actualiser la page.
La gestion des paramètres dans les tableaux de bord Tableau implique de les identifier correctement avec getParametersAsync(). Un piège courant est que certains paramètres peuvent ne pas être disponibles ou nécessiter des niveaux d'accès différents en fonction de la configuration du classeur. Par conséquent, il est important d’inclure la gestion des erreurs pour éviter que la logique déroulante ne s’interrompe si un paramètre n’est pas trouvé. Un autre aspect à prendre en compte est le rendu de la liste déroulante uniquement une fois le tableau de bord complètement chargé. En utilisant le PremierInteractif L'événement garantit que les éléments du tableau de bord sont prêts avant d'appliquer les personnalisations.
L'optimisation des performances est également cruciale, en particulier lorsqu'il s'agit de grands ensembles de données ou de tableaux de bord comportant plusieurs paramètres. Fonctions JavaScript comme trouver() aider à affiner la recherche de paramètres, mais le code doit rester modulaire pour permettre une évolutivité future. Les développeurs doivent également valider les valeurs des paramètres avant de les mettre à jour afin d'éviter les incohérences entre l'interface utilisateur et les données du tableau de bord. Grâce à ces stratégies, il devient plus facile de gérer efficacement les paramètres de Tableau et de créer des tableaux de bord avec une expérience utilisateur transparente.
Questions fréquemment posées sur l'utilisation des paramètres dans l'API Tableau
- Quelle est la différence entre un paramètre et un filtre dans Tableau ?
- Les paramètres permettent aux utilisateurs de transmettre des valeurs spécifiques dans le tableau de bord, tandis que les filtres limitent les données affichées en fonction de critères. Les filtres agissent sur des ensembles de données, tandis que les paramètres affectent des champs ou des calculs spécifiques.
- Pourquoi ma liste déroulante reste-t-elle vide lors de la récupération des paramètres ?
- Assurez-vous que le getParametersAsync() La fonction récupère avec succès le paramètre. Si ce n’est pas le cas, le paramètre peut être masqué ou inaccessible en raison des restrictions du classeur.
- Comment puis-je m'assurer que la liste déroulante correspond à l'état actuel du paramètre ?
- Utilisez le currentValue.value propriété pour définir l’option par défaut dans la liste déroulante. Cela maintient l’interface utilisateur et le tableau de bord alignés.
- Comment puis-je gérer les erreurs lors de la mise à jour des paramètres dans Tableau ?
- Enveloppez le changeParameterValueAsync() appeler à l'intérieur d'un try-catch block pour gérer les erreurs qui se produisent lorsque le paramètre est mis à jour.
- Quel événement garantit que le tableau de bord est prêt avant la personnalisation ?
- Le FirstInteractive L'événement dans l'API Tableau signale que le tableau de bord est entièrement chargé et est prêt pour d'autres interactions, comme l'ajout d'une liste déroulante.
Réflexions finales sur la gestion interactive des paramètres
L'intégration de tableaux de bord interactifs avec des listes déroulantes paramétrées offre une plus grande flexibilité aux utilisateurs. Avec une configuration appropriée, les développeurs peuvent récupérer des paramètres tels que Moéda et utilisez l'API Tableau pour améliorer le contrôle du tableau de bord. Cette configuration permet aux utilisateurs d'explorer les données plus efficacement.
Des éléments clés, tels que PremierInteractif des événements et une gestion robuste des erreurs, garantissent le bon fonctionnement des menus déroulants au sein de l'application. En suivant cette approche, les développeurs peuvent gérer les paramètres efficacement et offrir aux utilisateurs finaux une expérience de tableau de bord dynamique et réactive.
Sources et références pour l'implémentation des paramètres Tableau
- Les détails sur l'intégration des tableaux de bord et l'interaction avec les paramètres ont été référencés dans le document officiel. Documentation de l'API JavaScript de Tableau .
- Informations sur les auditeurs d'événements, tels que PremierInteractif, sont dérivés d'exemples trouvés sur le Forum de la communauté Tableau .
- Les concepts généraux et les meilleures pratiques pour travailler avec des éléments d'interface utilisateur dynamiques en JavaScript sont tirés de Documents Web MDN .