JavaScript API を使用した Tableau パラメーターの対話型ドロップダウンの作成

Temp mail SuperHeros
JavaScript API を使用した Tableau パラメーターの対話型ドロップダウンの作成
JavaScript API を使用した Tableau パラメーターの対話型ドロップダウンの作成

ユーザー主導のパラメーターを Tableau 埋め込みダッシュボードに統合する

Tableau Embedding API を使用して Web アプリケーション内に Tableau ダッシュボードを埋め込むと、開発者は動的なデータ駆動型のソリューションを提供できます。ユーザー エクスペリエンスを向上させる強力な方法の 1 つは、ドロップダウン メニューを通じてダッシュボード パラメーターとの対話を可能にすることです。

この例では、次のような特定の 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") パラメータ配列で find() メソッドを使用して、特定の「Moeda」パラメータを見つけます。これにより、正しいパラメータが更新の対象となることが保証されます。
viz.addEventListener(TableauEventType.FirstInteractive) このコマンドにより、パラメータ ドロップダウンをロードする関数は、Tableau ダッシュボードが完全にロードされた後にのみ実行されるようになり、タイミングの問題が回避されます。
option.value = value.value
jest.fn().mockResolvedValue() 単体テストで非同期関数の動作を模擬するために使用されます。これにより、ライブの Tableau 環境を必要とせずに、テスト中にパラメーター更新ロジックが正しくシミュレートされることが保証されます。

JavaScript を使用して Tableau パラメーターを動的に制御する方法

上記で提供されるスクリプトは、Tableau ダッシュボードとカスタム HTML 間のスムーズな対話を可能にするように設計されています。 落ちる メニュー。これらのスクリプトは Tableau Embedding API を使用します。これにより、開発者は Web アプリケーション内に Tableau ダッシュボードを埋め込み、対話性を拡張できます。主な焦点は、許容値を取得し、ユーザーが選択したときにパラメータを動的に更新することにより、JavaScript を介して「Moeda」という名前のパラメータを操作することです。

スクリプトの最初の部分は、「Moeda」パラメータをロードする関数から始まります。この機能は、 getParametersAsync() メソッドを使用して、ワークブック内の使用可能なすべてのパラメーターを取得します。パラメータがロードされると、スクリプトは次のコマンドを使用して特定の「Moeda」パラメータを識別します。 探す() 方法。パラメーターが見つからない場合は、コードの残りの部分が壊れることを避けるためにエラーが記録されます。パラメータを操作するには、さらなるロジックに進む前にパラメータが存在するかどうかを知る必要があるため、これは非常に重要です。

パラメータを特定した後、 落ちる メニューは、JavaScript の DOM 操作メソッドを使用して動的に作成されます。パラメーターの許容値の各値は、ドロップダウン内のオプションとして追加されます。スクリプトは、選択されたオプションをパラメータの現在の値に設定することで、ドロップダウンにパラメータの現在の状態が反映されるようにします。この手順は、ユーザーがダッシュボードに最新の値を表示できるようにし、ダッシュボードの状態とドロップダウンのデフォルト オプションの間の一貫性を確保するために不可欠です。

スクリプトの最後の部分では、イベント リスナーをドロップダウンに追加します。このイベント リスナーは、ユーザーが選択したオプションを変更したときを検出し、 ChangeParameterValueAsync() Tableau のパラメーターを更新する関数。さらに、スクリプトは、ダッシュボードが完全に読み込まれた後にのみドロップダウンがレンダリングされるようにします。 ファーストインタラクティブ イベント。これにより、ドロップダウンが途中で設定されることがなくなり、エラーやパラメータ値の欠落が防止されます。このソリューションはモジュール式でスケーラブルであるため、同じ論理構造を再利用することで他のパラメーターやダッシュボードに簡単に適応できます。

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 ダッシュボードを Web アプリケーションに埋め込む際、開発者は多くの場合、ユーザーの対話性を高めるためにパラメーターを動的にする必要があります。重要な課題の 1 つは、次のようなパラメータを処理することです。 「モエダ」 フィルターを使用する代わりにドロップダウン メニューを使用します。パラメータは、許容値を取得するために API 呼び出しが必要であり、次のような関数を介して更新する必要があるため、より複雑です。 ChangeParameterValueAsync()。このアプローチにより、ユーザーはページを更新せずに、ダッシュボード内の特定のデータ ビューをより詳細に制御できるようになります。

Tableau ダッシュボードでパラメータを管理するには、パラメータを次の方法で正しく識別する必要があります。 getParametersAsync()。よくある落とし穴は、一部のパラメーターが使用できない場合や、ワークブックの構成によっては異なるアクセス レベルが必要になる場合があることです。したがって、パラメーターが見つからない場合にドロップダウン ロジックが壊れないようにエラー処理を組み込むことが重要です。考慮すべきもう 1 つの側面は、ダッシュボードが完全に読み込まれた後にのみドロップダウンをレンダリングすることです。を使用して、 ファーストインタラクティブ イベントは、カスタマイズを適用する前にダッシュボード要素の準備が整っていることを確認します。

特に複数のパラメータを持つ大規模なデータセットやダッシュボードを扱う場合には、パフォーマンスの最適化も重要です。 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 を使用してダッシュボードの制御を強化します。この設定により、ユーザーはより効率的にデータを探索できるようになります。

主要な要素、 ファーストインタラクティブ イベントと堅牢なエラー処理により、ドロップダウン メニューがアプリケーション内でスムーズに動作するようになります。このアプローチに従うことで、開発者はパラメータを効率的に管理し、エンドユーザーに動的で応答性の高いダッシュボード エクスペリエンスを提供できます。

Tableau パラメーターを実装するためのソースと参考資料
  1. ダッシュボードの埋め込みとパラメーターの操作の詳細は、公式から参照されました。 Tableau JavaScript API ドキュメント
  2. イベントリスナーに関する洞察: ファーストインタラクティブ、で見つかった例から派生しました。 Tableau コミュニティ フォーラム
  3. JavaScript で動的 UI 要素を操作するための一般的な概念とベスト プラクティスは、以下から引用されました。 MDN ウェブ ドキュメント