JavaScript API를 사용하여 Tableau 매개 변수에 대한 대화형 드롭다운 만들기

Temp mail SuperHeros
JavaScript API를 사용하여 Tableau 매개 변수에 대한 대화형 드롭다운 만들기
JavaScript API를 사용하여 Tableau 매개 변수에 대한 대화형 드롭다운 만들기

사용자 기반 매개 변수를 Tableau 내장 대시보드에 통합

Tableau Embedding API를 사용하여 웹 응용 프로그램 내에 Tableau 대시보드를 내장하면 개발자가 동적인 데이터 기반 솔루션을 제공할 수 있습니다. 사용자 경험을 향상시키는 강력한 방법 중 하나는 드롭다운 메뉴를 통해 대시보드 매개변수와의 상호 작용을 활성화하는 것입니다.

이 예에서 문제는 다음과 같은 특정 Tableau 매개 변수를 조작하기 위해 드롭다운 메뉴를 구성하는 것입니다. "모에다". 통합하기 쉬운 필터와 달리 매개변수는 JavaScript를 사용하여 올바르게 로드하고 업데이트하려면 정밀한 처리가 필요합니다.

Tableau API가 매개 변수에 액세스하는 방법을 제공하더라도 사용 가능한 매개 변수 값을 드롭다운 옵션으로 올바르게 표시하고 사용자가 선택할 때 원활한 업데이트를 보장하는 것은 까다로울 수 있습니다.

이 문서의 목표는 설정 단계를 안내하는 것입니다. "모에다" 드롭다운이 있는 매개변수입니다. 허용되는 값을 가져오고, 드롭다운에 표시하고, 선택 시 매개변수가 효과적으로 업데이트되는지 확인하여 개발자가 직면하는 일반적인 문제를 해결하는 방법을 배우게 됩니다.

명령 사용예
viz.workbook.getParametersAsync() 이 비동기 메서드는 Tableau 통합 문서에서 사용할 수 있는 모든 매개 변수 목록을 검색합니다. 내장된 대시보드에서 매개변수 데이터와 상호 작용하기 전에 매개변수 데이터를 동적으로 로드하는 것이 중요합니다.
viz.workbook.changeParameterValueAsync() Tableau에서 특정 매개 변수의 값을 업데이트합니다. 사용자가 드롭다운 선택 항목을 변경하면 통합 문서의 매개 변수가 실시간으로 업데이트됩니다.
allowableValues 이 속성은 Tableau 매개 변수에 허용되는 값을 보유합니다. 이는 사용자가 선택할 수 있는 모든 유효한 매개변수 옵션으로 드롭다운 메뉴를 채우는 데 사용됩니다.
currentValue.value Tableau 매개 변수의 현재 값에 액세스합니다. 이렇게 하면 드롭다운의 기본 선택이 대시보드에 있는 매개변수의 현재 상태와 일치하게 됩니다.
document.createElement("select") JavaScript를 통해 동적으로
dropdown.addEventListener("change") 사용자 선택 변경 사항을 감지하기 위해 드롭다운에 이벤트 리스너를 추가합니다. 트리거되면 Tableau 통합 문서에서 매개 변수 업데이트 프로세스가 시작됩니다.
find((p) =>find((p) => p.name === "Moeda") 특정 "Moeda" 매개변수를 찾으려면 매개변수 배열에서 find() 메소드를 사용합니다. 이렇게 하면 올바른 매개변수가 업데이트 대상으로 지정됩니다.
viz.addEventListener(TableauEventType.FirstInteractive) 이 명령을 사용하면 Tableau 대시보드가 ​​완전히 로드된 후에만 매개 변수 드롭다운을 로드하는 기능이 실행되어 타이밍 문제가 방지됩니다.
option.value = value.value 해당 매개변수 값과 일치하도록
jest.fn().mockResolvedValue() 비동기 함수의 동작을 모의하기 위해 단위 테스트에 사용됩니다. 이렇게 하면 실제 Tableau 환경이 없어도 테스트 중에 매개 변수 업데이트 논리가 올바르게 시뮬레이션됩니다.

JavaScript를 사용하여 Tableau 매개 변수를 동적으로 제어하는 ​​방법

위에 제공된 스크립트는 Tableau 대시보드와 사용자 지정 HTML 간의 원활한 상호 작용을 지원하도록 설계되었습니다. 드롭다운 메뉴. 이러한 스크립트는 개발자가 웹 응용 프로그램 내에 Tableau 대시보드를 내장하고 상호 작용을 확장할 수 있도록 하는 Tableau Embedding API를 사용합니다. 주요 초점은 허용되는 값을 가져오고 사용자가 선택할 때 매개변수를 동적으로 업데이트하여 JavaScript를 통해 "Moeda"라는 매개변수를 조작하는 것입니다.

스크립트의 첫 번째 부분은 "Moeda" 매개변수를 로드하는 함수로 시작됩니다. 이 기능은 getParametersAsync() 통합 문서에서 사용 가능한 모든 매개변수를 검색하는 방법입니다. 매개변수가 로드되면 스크립트는 다음을 사용하여 특정 "Moeda" 매개변수를 식별합니다. 찾다() 방법. 매개변수를 찾을 수 없으면 나머지 코드가 손상되지 않도록 오류를 기록합니다. 매개변수를 사용하여 작업하려면 추가 논리를 진행하기 전에 해당 매개변수가 존재하는지 알아야 하기 때문에 이는 매우 중요합니다.

매개변수를 확인한 후, 드롭다운 메뉴는 JavaScript의 DOM 조작 방법을 사용하여 동적으로 생성됩니다. 매개변수의 허용 값 중 각 값은 드롭다운 내 옵션으로 추가됩니다. 스크립트는 선택한 옵션을 매개변수의 현재 값으로 설정하여 드롭다운에 매개변수의 현재 상태가 반영되도록 합니다. 이 단계는 대시보드 상태와 드롭다운 기본 옵션 간의 일관성을 제공하여 사용자가 대시보드에서 최신 값을 볼 수 있도록 하는 데 필수적입니다.

스크립트의 마지막 부분에는 드롭다운에 이벤트 리스너를 추가하는 작업이 포함됩니다. 이 이벤트 리스너는 사용자가 선택한 옵션을 변경하는 시기를 감지하고 ChangeParameterValueAsync() Tableau에서 매개변수를 업데이트하는 함수입니다. 또한 스크립트는 다음을 사용하여 대시보드가 ​​완전히 로드된 후에만 드롭다운이 렌더링되도록 합니다. FirstInteractive 이벤트. 이렇게 하면 드롭다운이 조기에 채워지지 않아 오류나 매개변수 값 누락이 방지됩니다. 이 솔루션은 모듈식이며 확장 가능하므로 동일한 논리 구조를 재사용하여 다른 매개변수나 대시보드에 쉽게 적응할 수 있습니다.

Tableau 매개 변수를 제어하기 위한 대화형 드롭다운 만들기

Tableau Embedding API와 JavaScript를 사용하여 동적으로 매개변수 로드 및 업데이트

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

Tableau 매개 변수 업데이트를 위한 모듈식 드롭다운 논리 구현

모듈식 기능과 향상된 오류 처리를 사용한 최적화된 접근 방식

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

다양한 환경에서 Tableau 매개 변수 상호 작용 테스트

매개변수 업데이트 검증을 위해 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 매개 변수 처리 모범 사례

웹 응용 프로그램에 Tableau 대시보드를 내장하는 동안 개발자는 사용자 상호 작용을 향상시키기 위해 매개 변수를 동적으로 만들어야 하는 경우가 많습니다. 한 가지 주요 과제는 다음과 같은 매개변수를 처리하는 것입니다. "모에다" 필터를 사용하는 대신 드롭다운 메뉴를 통해 매개변수는 허용되는 값을 검색하기 위해 API 호출이 필요하고 다음과 같은 함수를 통해 업데이트되어야 하기 때문에 더 복잡합니다. ChangeParameterValueAsync(). 이 접근 방식을 사용하면 사용자는 페이지를 새로 고치지 않고도 대시보드의 특정 데이터 보기를 더 효과적으로 제어할 수 있습니다.

Tableau 대시보드에서 매개 변수를 관리하려면 매개 변수를 올바르게 식별해야 합니다. getParametersAsync(). 일반적인 함정은 통합 문서 구성에 따라 일부 매개 변수를 사용할 수 없거나 다른 액세스 수준이 필요할 수 있다는 것입니다. 따라서 매개변수를 찾을 수 없는 경우 드롭다운 논리가 중단되는 것을 방지하기 위해 오류 처리를 포함하는 것이 중요합니다. 고려해야 할 또 다른 측면은 대시보드가 ​​완전히 로드된 후에만 드롭다운을 렌더링하는 것입니다. 사용하여 FirstInteractive 이벤트는 사용자 정의를 적용하기 전에 대시보드 요소가 준비되었는지 확인합니다.

특히 대규모 데이터세트나 여러 매개변수가 포함된 대시보드를 처리할 때 성능 최적화도 중요합니다. 다음과 같은 JavaScript 함수 찾다() 매개변수 검색 범위를 좁히는 데 도움이 되지만 향후 확장성을 허용하려면 코드가 모듈식으로 유지되어야 합니다. 또한 개발자는 사용자 인터페이스와 대시보드 데이터 간의 불일치를 방지하기 위해 매개변수 값을 업데이트하기 전에 유효성을 검사해야 합니다. 이러한 전략을 사용하면 Tableau 매개 변수를 효율적으로 관리하고 원활한 사용자 환경을 갖춘 대시보드를 구축하는 것이 더 쉬워집니다.

Tableau API의 매개 변수 사용에 대해 자주 묻는 질문

  1. Tableau에서 매개변수와 필터의 차이점은 무엇입니까?
  2. 매개변수를 사용하면 사용자가 대시보드에 특정 값을 전달할 수 있으며, 필터는 기준에 따라 표시되는 데이터를 제한합니다. 필터는 데이터세트에 적용되는 반면 매개변수는 특정 필드나 계산에 영향을 미칩니다.
  3. 매개변수를 가져올 때 드롭다운이 비어 있는 이유는 무엇입니까?
  4. 확인하십시오 getParametersAsync() 함수가 성공적으로 매개변수를 검색합니다. 그렇지 않으면 통합 문서 제한으로 인해 매개 변수가 숨겨져 있거나 액세스할 수 없는 것일 수 있습니다.
  5. 드롭다운이 매개변수의 현재 상태와 일치하는지 어떻게 확인하나요?
  6. 사용 currentValue.value 드롭다운에서 기본 옵션을 설정하는 속성입니다. 이렇게 하면 UI와 대시보드가 ​​정렬된 상태로 유지됩니다.
  7. Tableau에서 매개 변수를 업데이트할 때 오류를 어떻게 처리할 수 있나요?
  8. 감싸다 changeParameterValueAsync() 내부에 전화 try-catch 매개변수가 업데이트될 때 발생하는 오류를 처리하기 위한 블록입니다.
  9. 사용자 정의 전에 대시보드가 ​​준비되었는지 확인하는 이벤트는 무엇입니까?
  10. 그만큼 FirstInteractive Tableau API의 이벤트는 대시보드가 ​​완전히 로드되었으며 드롭다운 추가와 같은 추가 상호 작용을 수행할 준비가 되었음을 나타냅니다.

대화형 매개변수 처리에 대한 최종 생각

매개변수화된 드롭다운이 포함된 대화형 대시보드를 포함하면 사용자에게 더 큰 유연성이 제공됩니다. 적절한 설정을 통해 개발자는 다음과 같은 매개변수를 가져올 수 있습니다. 모에다 Tableau API를 사용하여 대시보드 제어를 강화합니다. 이 설정을 통해 사용자는 데이터를 보다 효과적으로 탐색할 수 있습니다.

다음과 같은 핵심 요소 FirstInteractive 이벤트 및 강력한 오류 처리를 통해 드롭다운 메뉴가 애플리케이션 내에서 원활하게 작동하는지 확인합니다. 이 접근 방식을 따르면 개발자는 매개 변수를 효율적으로 관리하고 최종 사용자에게 동적이고 반응이 빠른 대시보드 경험을 제공할 수 있습니다.

Tableau 매개 변수 구현을 위한 소스 및 참조
  1. 대시보드 삽입 및 매개변수와의 상호작용에 대한 자세한 내용은 공식 문서를 참조했습니다. Tableau JavaScript API 설명서 .
  2. 다음과 같은 이벤트 리스너에 대한 통찰력 FirstInteractive는 에서 발견된 예에서 파생되었습니다. Tableau 커뮤니티 포럼 .
  3. JavaScript의 동적 UI 요소 작업에 대한 일반적인 개념과 모범 사례는 다음에서 가져왔습니다. MDN 웹 문서 .