Integrowanie parametrów sterowanych przez użytkownika z wbudowanymi pulpitami nawigacyjnymi Tableau
Osadzanie dashboardów Tableau w aplikacjach internetowych za pomocą API Tableau Embedding umożliwia programistom dostarczanie dynamicznych rozwiązań opartych na danych. Skutecznym sposobem na poprawę komfortu użytkownika jest umożliwienie interakcji z parametrami pulpitu nawigacyjnego za pomocą menu rozwijanych.
W tym przykładzie wyzwanie polega na skonfigurowaniu menu rozwijanego w celu manipulowania określonym parametrem Tableau o nazwie „Moeda”. W przeciwieństwie do filtrów, które są łatwiejsze do zintegrowania, parametry wymagają precyzyjnej obsługi, aby poprawnie załadować i zaktualizować przy użyciu JavaScript.
Mimo że interfejs API Tableau zapewnia metody dostępu do parametrów, prawidłowe wyświetlenie dostępnych wartości parametrów jako opcji rozwijanych i zapewnienie płynnych aktualizacji po dokonaniu wyboru przez użytkownika może być trudne.
Celem tego artykułu jest poprowadzenie Cię przez kolejne etapy konfiguracji „Moeda” parametr z listą rozwijaną. Dowiesz się, jak pobrać dopuszczalne wartości, wyświetlić je na liście rozwijanej i zapewnić skuteczną aktualizację parametrów po dokonaniu wyboru, rozwiązując typowe problemy, z którymi borykają się programiści.
Rozkaz | Przykład użycia |
---|---|
viz.workbook.getParametersAsync() | Ta metoda asynchroniczna pobiera listę wszystkich parametrów dostępnych w skoroszycie Tableau. Istotne jest dynamiczne ładowanie danych parametrów przed interakcją z nimi we wbudowanym dashboardzie. |
viz.workbook.changeParameterValueAsync() | Aktualizuje wartość określonego parametru w Tableau. Zapewnia to, że gdy użytkownik zmieni wybór listy rozwijanej, parametr w skoroszycie będzie aktualizowany w czasie rzeczywistym. |
allowableValues | Ta właściwość przechowuje dopuszczalne wartości parametru Tableau. Służy do wypełniania menu rozwijanego wszystkimi prawidłowymi opcjami parametrów, spośród których użytkownicy mogą wybierać. |
currentValue.value | Uzyskuje dostęp do bieżącej wartości parametru Tableau. Dzięki temu domyślny wybór listy rozwijanej będzie zgodny z bieżącym stanem parametru na pulpicie nawigacyjnym. |
document.createElement("select") | Tworzy dynamicznie element rozwijany |
dropdown.addEventListener("change") | Dodaje detektor zdarzeń do listy rozwijanej w celu wykrywania zmian w wyborze użytkownika. Po uruchomieniu inicjuje proces aktualizacji parametrów w skoroszycie Tableau. |
find((p) =>find((p) => p.name === "Moeda") | Używa metody find() w tablicy parametrów w celu zlokalizowania określonego parametru „Moeda”. Dzięki temu aktualizacje będą kierowane na właściwy parametr. |
viz.addEventListener(TableauEventType.FirstInteractive) | To polecenie zapewnia, że funkcja ładowania listy rozwijanej parametrów zostanie wykonana dopiero po pełnym załadowaniu pulpitu nawigacyjnego Tableau, co pozwala uniknąć problemów z synchronizacją. |
option.value = value.value | Ustawia atrybut wartości elementu |
jest.fn().mockResolvedValue() | Używany w testach jednostkowych do wyśmiewania zachowania funkcji asynchronicznych. Gwarantuje to, że logika aktualizacji parametrów zostanie poprawnie symulowana podczas testowania, bez konieczności korzystania z działającego środowiska Tableau. |
Jak dynamicznie kontrolować parametry Tableau za pomocą JavaScript
Powyższe skrypty zaprojektowano tak, aby umożliwić płynną interakcję pomiędzy dashboardem Tableau a niestandardowym kodem HTML menu rozwijane menu. Skrypty te korzystają z interfejsu API Tableau Embedding, który umożliwia programistom osadzanie dashboardów Tableau w aplikacjach internetowych i rozszerzanie ich interaktywności. Głównym celem jest manipulowanie parametrem o nazwie „Moeda” za pomocą JavaScript poprzez pobieranie jego dopuszczalnych wartości i dynamiczną aktualizację parametru, gdy użytkownik dokona wyboru.
Pierwsza część skryptu rozpoczyna się od funkcji ładującej parametr „Moeda”. Ta funkcja wykorzystuje getParametersAsync() metoda pobierania wszystkich dostępnych parametrów w skoroszycie. Po załadowaniu parametrów skrypt identyfikuje konkretny parametr „Moeda” za pomocą znajdować() metoda. Jeśli parametr nie zostanie znaleziony, rejestruje błąd, aby uniknąć uszkodzenia reszty kodu. Jest to kluczowe, ponieważ praca z parametrami wymaga wiedzy, czy one istnieją, przed przystąpieniem do dalszej logiki.
Po zidentyfikowaniu parametru, a menu rozwijane menu jest tworzone dynamicznie przy użyciu metod manipulacji DOM JavaScriptu. Każda wartość z dozwolonych wartości parametru jest dodawana jako opcja w menu rozwijanym. Skrypt zapewnia, że menu rozwijane odzwierciedla bieżący stan parametru, ustawiając wybraną opcję na bieżącą wartość parametru. Ten krok jest niezbędny, aby mieć pewność, że użytkownik zobaczy najnowszą wartość na panelu kontrolnym, zapewniając spójność między stanem pulpitu nawigacyjnego a domyślną opcją listy rozwijanej.
Ostatnia część skryptu polega na dodaniu detektora zdarzeń do listy rozwijanej. Ten detektor zdarzeń wykrywa, kiedy użytkownik zmienia wybraną opcję i wyzwala zmieńWartośćParametruAsync() funkcja do aktualizacji parametru w Tableau. Ponadto skrypt dba o to, aby lista rozwijana była renderowana dopiero po pełnym załadowaniu pulpitu nawigacyjnego przy użyciu metody Pierwsza interaktywna wydarzenie. Dzięki temu lista rozwijana nie zostanie zapełniona przedwcześnie, co zapobiegnie błędom lub brakom wartości parametrów. Rozwiązanie jest zarówno modułowe, jak i skalowalne, co ułatwia dostosowanie do innych parametrów lub pulpitów nawigacyjnych poprzez ponowne wykorzystanie tej samej struktury logicznej.
Tworzenie interaktywnego menu rozwijanego w celu kontrolowania parametrów Tableau
Używanie JavaScript z API Tableau Embedding do dynamicznego ładowania i aktualizowania parametrów
// 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);
Implementowanie modułowej logiki rozwijanej dla aktualizacji parametrów Tableau
Zoptymalizowane podejście wykorzystujące funkcje modułowe i ulepszoną obsługę błędów
// 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");
});
Testowanie interakcji parametrów Tableau w różnych środowiskach
Pisanie testów jednostkowych za pomocą JavaScript w celu sprawdzenia aktualizacji parametrów
// 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");
});
Najlepsze praktyki dotyczące obsługi parametrów Tableau za pomocą JavaScript
Osadzając dashboardy Tableau w aplikacjach internetowych, programiści często muszą zmieniać parametry na dynamiczne, aby zwiększyć interakcję użytkownika. Jednym z kluczowych wyzwań jest obsługa parametrów takich jak „Moeda” poprzez menu rozwijane, zamiast używać filtrów. Parametry są bardziej złożone, ponieważ wymagają wywołań API w celu pobrania ich dopuszczalnych wartości i muszą być aktualizowane za pomocą funkcji, takich jak zmieńWartośćParametruAsync(). Takie podejście zapewnia użytkownikom większą kontrolę nad określonymi widokami danych w panelu kontrolnym bez konieczności odświeżania strony.
Zarządzanie parametrami w dashboardach Tableau polega na ich prawidłowej identyfikacji getParametersAsync(). Typową pułapką jest to, że niektóre parametry mogą być niedostępne lub mogą wymagać różnych poziomów dostępu w zależności od konfiguracji skoroszytu. Dlatego ważne jest uwzględnienie obsługi błędów, aby zapobiec uszkodzeniu logiki listy rozwijanej, jeśli parametr nie zostanie znaleziony. Innym aspektem, który należy wziąć pod uwagę, jest renderowanie listy rozwijanej dopiero po pełnym załadowaniu pulpitu nawigacyjnego. Korzystanie z Pierwsza interaktywna event gwarantuje, że elementy dashboardu będą gotowe przed zastosowaniem dostosowań.
Optymalizacja wydajności jest również kluczowa, szczególnie w przypadku dużych zbiorów danych lub dashboardów z wieloma parametrami. Funkcje JavaScript takie jak znajdować() pomóc zawęzić wyszukiwanie parametrów, ale kod musi pozostać modułowy, aby umożliwić przyszłą skalowalność. Programiści powinni również sprawdzić wartości parametrów przed ich aktualizacją, aby uniknąć niespójności między interfejsem użytkownika a danymi na pulpicie nawigacyjnym. Dzięki tym strategiom efektywne zarządzanie parametrami Tableau i tworzenie dashboardów zapewniających płynną obsługę użytkownika staje się łatwiejsze.
Często zadawane pytania dotyczące używania parametrów w interfejsie API Tableau
- Jaka jest różnica między parametrem a filtrem w Tableau?
- Parametry pozwalają użytkownikom przekazywać określone wartości do dashboardu, natomiast filtry ograniczają wyświetlane dane na podstawie kryteriów. Filtry działają na zbiory danych, natomiast parametry wpływają na określone pola lub obliczenia.
- Dlaczego moje menu rozwijane pozostaje puste podczas pobierania parametrów?
- Upewnij się, że getParametersAsync() funkcja pomyślnie pobiera parametr. Jeśli tak nie jest, parametr może być ukryty lub niedostępny ze względu na ograniczenia skoroszytu.
- Jak upewnić się, że menu rozwijane odpowiada bieżącemu stanowi parametru?
- Skorzystaj z currentValue.value właściwość, aby ustawić domyślną opcję na liście rozwijanej. Dzięki temu interfejs użytkownika i pulpit nawigacyjny są spójne.
- Jak mogę poradzić sobie z błędami podczas aktualizacji parametrów w Tableau?
- Zawiń changeParameterValueAsync() zadzwoń do środka try-catch blok do obsługi wszelkich błędów występujących podczas aktualizacji parametru.
- Jakie zdarzenie gwarantuje, że pulpit nawigacyjny będzie gotowy przed dostosowaniem?
- The FirstInteractive zdarzenie w Tableau API sygnalizuje, że dashboard został w pełni załadowany i jest gotowy na dalsze interakcje, takie jak dodanie listy rozwijanej.
Końcowe przemyślenia na temat interaktywnej obsługi parametrów
Osadzanie interaktywnych dashboardów z sparametryzowanymi listami rozwijanymi zapewnia użytkownikom większą elastyczność. Przy odpowiedniej konfiguracji programiści mogą pobierać parametry takie jak Moeda i użyj interfejsu API Tableau, aby zwiększyć kontrolę nad panelem kontrolnym. Taka konfiguracja pozwala użytkownikom efektywniej eksplorować dane.
Kluczowe elementy, takie jak Pierwsza interaktywna zdarzeń i solidna obsługa błędów, zapewniają płynne działanie menu rozwijanych w aplikacji. Stosując to podejście, programiści mogą efektywnie zarządzać parametrami i oferować użytkownikom końcowym dynamiczny i responsywny panel kontrolny.
Źródła i odniesienia do implementacji parametrów Tableau
- Szczegóły dotyczące osadzania dashboardów i interakcji z parametrami pochodzą od urzędnika Dokumentacja API JavaScript Tableau .
- Wgląd w detektory zdarzeń, takie jak Pierwsza interaktywna, zostały zaczerpnięte z przykładów znalezionych na stronie Forum społeczności Tableau .
- Zaczerpnięto ogólne koncepcje i najlepsze praktyki dotyczące pracy z dynamicznymi elementami interfejsu użytkownika w JavaScript Dokumenty internetowe MDN .