Integrace parametrů řízených uživatelem do vestavěných řídicích panelů Tableau
Vkládání panelů Tableau do webových aplikací pomocí rozhraní Tableau Embedding API umožňuje vývojářům dodávat dynamická řešení založená na datech. Jedním z účinných způsobů, jak zlepšit uživatelský dojem, je umožnit interakci s parametry řídicího panelu prostřednictvím rozevíracích nabídek.
V tomto příkladu spočívá problém v konfiguraci rozevírací nabídky pro manipulaci s konkrétním volaným parametrem Tableau "Moeda". Na rozdíl od filtrů, které se snadněji integrují, vyžadují parametry pro správné načtení a aktualizaci pomocí JavaScriptu přesné zacházení.
Přestože rozhraní Tableau API poskytuje metody přístupu k parametrům, může být obtížné správně zobrazit dostupné hodnoty parametrů jako rozevírací možnosti a zajistit bezproblémové aktualizace, když uživatelé provedou výběr.
Cílem tohoto článku je provést vás kroky nastavení "Moeda" parametr s rozevíracím seznamem. Dozvíte se, jak načíst přípustné hodnoty, zobrazit je v rozevíracím seznamu a zajistit, aby se parametry při výběru efektivně aktualizovaly, což řeší běžné problémy, kterým vývojáři čelí.
Příkaz | Příklad použití |
---|---|
viz.workbook.getParametersAsync() | Tato asynchronní metoda načte seznam všech parametrů dostupných v sešitu Tableau. Je nezbytné dynamicky načítat data parametrů před interakcí s nimi ve vloženém řídicím panelu. |
viz.workbook.changeParameterValueAsync() | Aktualizuje hodnotu konkrétního parametru v Tableau. Zajišťuje, že když uživatel změní výběr v rozevíracím seznamu, parametr v sešitu se aktualizuje v reálném čase. |
allowableValues | Tato vlastnost obsahuje povolené hodnoty pro parametr Tableau. Používá se k vyplnění rozbalovací nabídky všemi platnými možnostmi parametrů, ze kterých si uživatelé mohou vybrat. |
currentValue.value | Přistupuje k aktuální hodnotě parametru Tableau. Tím zajistíte, že výchozí výběr rozevíracího seznamu odpovídá aktuálnímu stavu parametru na řídicím panelu. |
document.createElement("select") | Dynamicky pomocí JavaScriptu vytvoří rozevírací prvek |
dropdown.addEventListener("change") | Do rozevíracího seznamu přidá posluchač událostí, který zjišťuje změny výběru uživatele. Po spuštění zahájí proces aktualizace parametrů v sešitu Tableau. |
find((p) =>find((p) => p.name === "Moeda") | Používá metodu find() v poli parametrů k vyhledání konkrétního parametru "Moeda". Tím zajistíte, že aktualizace budou zaměřeny na správný parametr. |
viz.addEventListener(TableauEventType.FirstInteractive) | Tento příkaz zajišťuje, že funkce pro načtení rozevíracího seznamu parametrů se provede až po úplném načtení řídicího panelu Tableau, čímž se zabrání problémům s načasováním. |
option.value = value.value | Nastavuje atribut value prvku |
jest.fn().mockResolvedValue() | Používá se v jednotkových testech k zesměšnění chování asynchronních funkcí. To zajišťuje, že logika aktualizace parametrů je během testování správně simulována, aniž by bylo potřeba živé prostředí Tableau. |
Jak dynamicky ovládat parametry Tableau pomocí JavaScriptu
Výše uvedené skripty jsou navrženy tak, aby umožňovaly hladkou interakci mezi řídicím panelem Tableau a vlastním HTML rozevírací seznam menu. Tyto skripty používají rozhraní Tableau Embedding API, které umožňuje vývojářům vkládat panely Tableau do webových aplikací a rozšiřovat jejich interaktivitu. Primárním cílem je manipulovat s parametrem s názvem „Moeda“ prostřednictvím JavaScriptu načtením jeho povolených hodnot a dynamickou aktualizací parametru, když uživatel provede výběr.
První část skriptu začíná funkcí pro načtení parametru "Moeda". Tato funkce využívá getParametersAsync() metoda k načtení všech dostupných parametrů v sešitu. Jakmile jsou parametry načteny, skript identifikuje konkrétní parametr "Moeda" pomocí nalézt() metoda. Pokud parametr není nalezen, zaprotokoluje chybu, aby nedošlo k porušení zbytku kódu. To je zásadní, protože práce s parametry vyžaduje před pokračováním v další logice vědět, zda existují.
Po identifikaci parametru a rozevírací seznam menu se dynamicky vytváří pomocí manipulačních metod DOM v JavaScriptu. Každá hodnota z přípustných hodnot parametru je přidána jako možnost v rozbalovací nabídce. Skript zajišťuje, že rozevírací seznam odráží aktuální stav parametru nastavením vybrané možnosti na aktuální hodnotu parametru. Tento krok je nezbytný pro zajištění toho, aby uživatel viděl na řídicím panelu nejnovější hodnotu, což zajišťuje konzistenci mezi stavem řídicího panelu a výchozí možností rozevíracího seznamu.
Poslední část skriptu zahrnuje přidání posluchače událostí do rozevíracího seznamu. Tento posluchač událostí zjistí, když uživatel změní vybranou možnost, a spustí changeParameterValueAsync() funkce pro aktualizaci parametru v Tableau. Skript navíc zajišťuje, že se rozevírací seznam vykreslí až po úplném načtení řídicího panelu pomocí FirstInteractive událost. Tím je zajištěno, že rozevírací seznam nebude vyplněn předčasně, čímž se zabrání chybám nebo chybějícím hodnotám parametrů. Řešení je modulární a škálovatelné, takže se lze snadno přizpůsobit jiným parametrům nebo řídicím panelům opětovným použitím stejné logické struktury.
Vytvoření interaktivního rozevíracího seznamu pro ovládání parametrů tabulky
Použití JavaScriptu s Tableau Embedding API k dynamickému načítání a aktualizaci parametrů
// 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);
Implementace modulární rozbalovací logiky pro aktualizace parametrů Tableau
Optimalizovaný přístup využívající modulární funkce a vylepšené zpracování chyb
// 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");
});
Testování interakce parametrů Tableau v různých prostředích
Psaní testů jednotek pomocí JavaScriptu pro ověření aktualizací parametrů
// 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");
});
Osvědčené postupy pro práci s parametry Tableau pomocí JavaScriptu
Při vkládání panelů Tableau do webových aplikací vývojáři často potřebují nastavit parametry dynamické, aby zlepšili interaktivitu uživatelů. Jedním z klíčových problémů je manipulace s parametry, jako je "Moeda" pomocí rozbalovací nabídky namísto použití filtrů. Parametry jsou složitější, protože vyžadují volání API k načtení přípustných hodnot a je třeba je aktualizovat pomocí funkcí, jako je např. changeParameterValueAsync(). Tento přístup poskytuje uživatelům větší kontrolu nad konkrétními datovými zobrazeními na řídicím panelu, aniž by museli obnovovat stránku.
Správa parametrů v řídicích panelech Tableau zahrnuje jejich správnou identifikaci getParametersAsync(). Častým úskalím je, že některé parametry nemusí být dostupné nebo mohou vyžadovat různé úrovně přístupu v závislosti na konfiguraci sešitu. Proto je důležité zahrnout zpracování chyb, aby se zabránilo rozbití logiky rozevíracího seznamu, pokud parametr není nalezen. Dalším aspektem, který je třeba zvážit, je vykreslení rozevíracího seznamu až po úplném načtení řídicího panelu. Pomocí FirstInteractive událost zajišťuje, že prvky řídicího panelu jsou připraveny před použitím přizpůsobení.
Optimalizace výkonu je také klíčová, zejména při práci s velkými datovými sadami nebo dashboardy s více parametry. JavaScript funguje jako nalézt() pomáhají zúžit vyhledávání parametrů, ale kód musí zůstat modulární, aby byla umožněna budoucí škálovatelnost. Vývojáři by také měli ověřit hodnoty parametrů před jejich aktualizací, aby se předešlo nesrovnalostem mezi uživatelským rozhraním a daty řídicího panelu. Díky těmto strategiím je snazší efektivně spravovat parametry Tableau a vytvářet řídicí panely s bezproblémovou uživatelskou zkušeností.
Často kladené otázky o používání parametrů v Tableau API
- Jaký je rozdíl mezi parametrem a filtrem v Tableau?
- Parametry umožňují uživatelům předávat konkrétní hodnoty do řídicího panelu, zatímco filtry omezují zobrazovaná data na základě kritérií. Filtry působí na datové sady, zatímco parametry ovlivňují konkrétní pole nebo výpočty.
- Proč moje rozbalovací nabídka zůstává při načítání parametrů prázdná?
- Ujistěte se, že getParametersAsync() funkce úspěšně načte parametr. Pokud tomu tak není, může být parametr skrytý nebo nedostupný kvůli omezením sešitu.
- Jak zajistím, aby rozbalovací nabídka odpovídala aktuálnímu stavu parametru?
- Použijte currentValue.value vlastnost pro nastavení výchozí možnosti v rozevíracím seznamu. To udržuje uživatelské rozhraní a řídicí panel zarovnané.
- Jak mohu zacházet s chybami při aktualizaci parametrů v Tableau?
- Zabalit changeParameterValueAsync() zavolejte dovnitř a try-catch blok pro zpracování všech chyb, ke kterým dojde při aktualizaci parametru.
- Jaká událost zajišťuje, že řídicí panel je připraven před přizpůsobením?
- The FirstInteractive událost v Tableau API signalizuje, že řídicí panel je plně načten a je připraven na další interakce, jako je přidání rozevíracího seznamu.
Závěrečné myšlenky na interaktivní zpracování parametrů
Vložení interaktivních řídicích panelů s parametrizovanými rozevíracími seznamy nabízí uživatelům větší flexibilitu. Při správném nastavení mohou vývojáři získat parametry jako Moeda a použijte rozhraní Tableau API k vylepšení ovládání řídicího panelu. Toto nastavení umožňuje uživatelům efektivněji prozkoumávat data.
Klíčové prvky, jako např FirstInteractive robustní zpracování událostí a chyb zajišťují, že rozevírací nabídky v aplikaci fungují hladce. Dodržováním tohoto přístupu mohou vývojáři efektivně spravovat parametry a nabízet koncovým uživatelům dynamický a citlivý řídicí panel.
Zdroje a odkazy pro implementaci parametrů Tableau
- Podrobnosti o vkládání dashboardů a interakci s parametry byly uvedeny od úředníka Tableau JavaScript API dokumentace .
- Vhledy do posluchačů událostí, jako např FirstInteractive, byly odvozeny z příkladů nalezených na Fórum komunity Tableau .
- Byly převzaty obecné koncepty a osvědčené postupy pro práci s dynamickými prvky uživatelského rozhraní v JavaScriptu Webové dokumenty MDN .