Een interactieve vervolgkeuzelijst voor tableauparameters maken met behulp van de JavaScript-API

Temp mail SuperHeros
Een interactieve vervolgkeuzelijst voor tableauparameters maken met behulp van de JavaScript-API
Een interactieve vervolgkeuzelijst voor tableauparameters maken met behulp van de JavaScript-API

Door de gebruiker aangestuurde parameters integreren in de ingebouwde dashboards van Tableau

Door Tableau-dashboards in webapplicaties in te sluiten met behulp van de Tableau Embedding API kunnen ontwikkelaars dynamische, datagestuurde oplossingen leveren. Een krachtige manier om de gebruikerservaring te verbeteren is door interactie met dashboardparameters mogelijk te maken via vervolgkeuzemenu's.

In dit voorbeeld ligt de uitdaging in het configureren van een vervolgkeuzemenu om een ​​specifieke Tableau-parameter te manipuleren, genaamd "Moeda". In tegenstelling tot filters, die gemakkelijker te integreren zijn, vereisen parameters een nauwkeurige afhandeling om correct te kunnen laden en bijwerken met JavaScript.

Hoewel de Tableau API methoden biedt om toegang te krijgen tot parameters, kan het lastig zijn om de beschikbare parameterwaarden correct weer te geven als vervolgkeuzelijsten en te zorgen voor naadloze updates wanneer gebruikers een selectie maken.

Het doel van dit artikel is om u door de stappen te leiden voor het instellen van het "Moeda" parameter met een vervolgkeuzelijst. U leert hoe u toegestane waarden kunt ophalen, deze in de vervolgkeuzelijst kunt weergeven en ervoor kunt zorgen dat de parameter effectief wordt bijgewerkt wanneer een selectie wordt gemaakt, waardoor veelvoorkomende problemen waarmee ontwikkelaars worden geconfronteerd, worden opgelost.

Commando Voorbeeld van gebruik
viz.workbook.getParametersAsync() Deze asynchrone methode haalt een lijst op met alle parameters die beschikbaar zijn in de Tableau-werkmap. Het is essentieel om parametergegevens dynamisch te laden voordat u ermee communiceert in het ingebedde dashboard.
viz.workbook.changeParameterValueAsync() Werkt de waarde van een specifieke parameter in Tableau bij. Het zorgt ervoor dat wanneer de gebruiker de vervolgkeuzelijst wijzigt, de parameter in de werkmap in realtime wordt bijgewerkt.
allowableValues Deze eigenschap bevat de toegestane waarden voor een Tableau-parameter. Het wordt gebruikt om het vervolgkeuzemenu te vullen met alle geldige parameteropties waaruit gebruikers kunnen kiezen.
currentValue.value Geeft toegang tot de huidige waarde van een Tableau-parameter. Dit zorgt ervoor dat de standaardselectie van de vervolgkeuzelijst overeenkomt met de huidige status van de parameter in het dashboard.
document.createElement("select") Creëert dynamisch een
dropdown.addEventListener("change") Voegt een gebeurtenislistener toe aan de vervolgkeuzelijst om wijzigingen in de gebruikersselectie te detecteren. Wanneer dit wordt geactiveerd, wordt het parameterupdateproces in de Tableau-werkmap gestart.
find((p) =>find((p) => p.name === "Moeda") Gebruikt de find()-methode op de parameterarray om de specifieke parameter "Moeda" te lokaliseren. Dit zorgt ervoor dat de juiste parameter wordt getarget voor updates.
viz.addEventListener(TableauEventType.FirstInteractive) Deze opdracht zorgt ervoor dat de functie voor het laden van de vervolgkeuzelijst met parameters pas wordt uitgevoerd zodra het Tableau-dashboard volledig is geladen, waardoor timingproblemen worden vermeden.
option.value = value.value Stelt het waardeattribuut van een
jest.fn().mockResolvedValue() Gebruikt in unit-tests om het gedrag van asynchrone functies te bespotten. Dit zorgt ervoor dat de parameterupdatelogica tijdens het testen correct wordt gesimuleerd zonder dat een live Tableau-omgeving nodig is.

Tableau-parameters dynamisch beheren met JavaScript

De hierboven verstrekte scripts zijn ontworpen om een ​​soepele interactie tussen een Tableau-dashboard en aangepaste HTML mogelijk te maken vervolgkeuzelijst menu. Deze scripts maken gebruik van de Tableau Embedding API, waarmee ontwikkelaars Tableau-dashboards kunnen insluiten in webapplicaties en hun interactiviteit kunnen uitbreiden. De primaire focus ligt op het manipuleren van een parameter met de naam "Moeda" via JavaScript door de toegestane waarden op te halen en de parameter dynamisch bij te werken wanneer de gebruiker een selectie maakt.

Het eerste deel van het script begint met de functie om de parameter "Moeda" te laden. Deze functie maakt gebruik van de getParametersAsync() methode om alle beschikbare parameters in de werkmap op te halen. Zodra de parameters zijn geladen, identificeert het script de specifieke parameter "Moeda" met behulp van de vinden() methode. Als de parameter niet wordt gevonden, wordt er een fout geregistreerd om te voorkomen dat de rest van de code wordt verbroken. Dit is van cruciaal belang omdat het werken met parameters vereist dat je weet of ze bestaan ​​voordat je doorgaat met verdere logica.

Na het identificeren van de parameter, a vervolgkeuzelijst menu wordt dynamisch gemaakt met behulp van de DOM-manipulatiemethoden van JavaScript. Elke waarde uit de toegestane waarden van de parameter wordt als optie toegevoegd in de vervolgkeuzelijst. Het script zorgt ervoor dat de vervolgkeuzelijst de huidige status van de parameter weergeeft door de geselecteerde optie in te stellen op de huidige waarde van de parameter. Deze stap is essentieel om ervoor te zorgen dat de gebruiker de nieuwste waarde in het dashboard ziet, waardoor consistentie wordt geboden tussen de status van het dashboard en de standaardoptie van de vervolgkeuzelijst.

Het laatste deel van het script omvat het toevoegen van een gebeurtenislistener aan de vervolgkeuzelijst. Deze gebeurtenislistener detecteert wanneer de gebruiker de geselecteerde optie wijzigt en activeert de changeParameterValueAsync() functie om de parameter in Tableau bij te werken. Bovendien zorgt het script ervoor dat de vervolgkeuzelijst pas wordt weergegeven nadat het dashboard volledig is geladen met behulp van de EersteInteractief evenement. Dit zorgt ervoor dat de vervolgkeuzelijst niet voortijdig wordt gevuld, waardoor fouten of ontbrekende parameterwaarden worden voorkomen. De oplossing is zowel modulair als schaalbaar, waardoor deze eenvoudig kan worden aangepast aan andere parameters of dashboards door dezelfde logische structuur te hergebruiken.

Een interactieve vervolgkeuzelijst maken om tableauparameters te beheren

JavaScript gebruiken met de Tableau Embedding API om parameters dynamisch te laden en bij te werken

// 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);

Implementatie van modulaire vervolgkeuzelogica voor updates van tableau-parameters

Geoptimaliseerde aanpak met behulp van modulaire functies en verbeterde foutafhandeling

// 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");
});

Testen van de tableau-parameterinteractie in verschillende omgevingen

Unit-tests schrijven met JavaScript om parameterupdates te valideren

// 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");
});

Best practices voor het omgaan met Tableau-parameters met JavaScript

Bij het inbedden van Tableau-dashboards in webapplicaties moeten ontwikkelaars vaak parameters dynamisch maken om de interactiviteit van gebruikers te verbeteren. Een belangrijke uitdaging is het omgaan met parameters zoals "Moeda" via een vervolgkeuzemenu in plaats van filters te gebruiken. Parameters zijn complexer omdat ze API-aanroepen vereisen om hun toegestane waarden op te halen en moeten worden bijgewerkt via functies, zoals changeParameterValueAsync(). Deze aanpak geeft gebruikers meer controle over specifieke gegevensweergaven in het dashboard zonder de pagina te vernieuwen.

Bij het beheren van parameters in Tableau-dashboards moet je ze op de juiste manier identificeren getParametersAsync(). Een veel voorkomende valkuil is dat sommige parameters mogelijk niet beschikbaar zijn of verschillende toegangsniveaus nodig hebben, afhankelijk van de werkmapconfiguratie. Daarom is het belangrijk om foutafhandeling op te nemen om te voorkomen dat de vervolgkeuzelogica kapot gaat als een parameter niet wordt gevonden. Een ander aspect waarmee u rekening moet houden, is het weergeven van de vervolgkeuzelijst pas nadat het dashboard volledig is geladen. Met behulp van de EersteInteractief gebeurtenis zorgt ervoor dat de dashboardelementen gereed zijn voordat aanpassingen worden toegepast.

Prestatieoptimalisatie is ook van cruciaal belang, vooral als het gaat om grote datasets of dashboards met meerdere parameters. JavaScript-functies zoals vinden() helpen het zoeken naar parameters te beperken, maar de code moet modulair blijven om toekomstige schaalbaarheid mogelijk te maken. Ontwikkelaars moeten ook de parameterwaarden valideren voordat ze worden bijgewerkt om inconsistenties tussen de gebruikersinterface en dashboardgegevens te voorkomen. Met deze strategieën wordt het eenvoudiger om Tableau-parameters efficiënt te beheren en dashboards te bouwen met een naadloze gebruikerservaring.

Veelgestelde vragen over het gebruik van parameters in de Tableau API

  1. Wat is het verschil tussen een parameter en een filter in Tableau?
  2. Met parameters kunnen gebruikers specifieke waarden doorgeven aan het dashboard, terwijl filters de weergegeven gegevens beperken op basis van criteria. Filters werken op datasets, terwijl parameters van invloed zijn op specifieke velden of berekeningen.
  3. Waarom blijft mijn vervolgkeuzelijst leeg bij het ophalen van parameters?
  4. Zorg ervoor dat de getParametersAsync() functie haalt de parameter met succes op. Als dit niet het geval is, is de parameter mogelijk verborgen of niet toegankelijk vanwege werkmapbeperkingen.
  5. Hoe zorg ik ervoor dat de vervolgkeuzelijst overeenkomt met de huidige status van de parameter?
  6. Gebruik de currentValue.value eigenschap om de standaardoptie in de vervolgkeuzelijst in te stellen. Hierdoor blijven de gebruikersinterface en het dashboard op elkaar afgestemd.
  7. Hoe kan ik omgaan met fouten bij het updaten van parameters in Tableau?
  8. Wikkel de changeParameterValueAsync() bel binnen een try-catch blok om eventuele fouten af ​​te handelen die optreden wanneer de parameter wordt bijgewerkt.
  9. Welke gebeurtenis zorgt ervoor dat het dashboard klaar is voordat het wordt aangepast?
  10. De FirstInteractive gebeurtenis in Tableau API geeft aan dat het dashboard volledig is geladen en klaar is voor verdere interacties, zoals het toevoegen van een vervolgkeuzelijst.

Laatste gedachten over interactieve parameterafhandeling

Het insluiten van interactieve dashboards met geparametriseerde vervolgkeuzelijsten biedt gebruikers meer flexibiliteit. Met de juiste instellingen kunnen ontwikkelaars parameters ophalen zoals Moeda en gebruik de Tableau API om de dashboardcontrole te verbeteren. Met deze opzet kunnen gebruikers gegevens effectiever verkennen.

Belangrijke elementen, zoals de EersteInteractief gebeurtenis- en robuuste foutafhandeling zorgen ervoor dat vervolgkeuzemenu's soepel werken binnen de applicatie. Door deze aanpak te volgen kunnen ontwikkelaars parameters efficiënt beheren en eindgebruikers een dynamische en responsieve dashboardervaring bieden.

Bronnen en referenties voor het implementeren van Tableau-parameters
  1. Details over het insluiten van dashboards en de interactie met parameters werden door de ambtenaar geraadpleegd Tableau JavaScript API-documentatie .
  2. Inzicht in gebeurtenislisteners, zoals EersteInteractief, zijn afgeleid van voorbeelden gevonden op de Tableau-communityforum .
  3. Algemene concepten en best practices voor het werken met dynamische UI-elementen in JavaScript zijn overgenomen MDN-webdocumenten .