Создание интерактивного раскрывающегося списка для параметров таблицы с использованием JavaScript API

Temp mail SuperHeros
Создание интерактивного раскрывающегося списка для параметров таблицы с использованием JavaScript API
Создание интерактивного раскрывающегося списка для параметров таблицы с использованием JavaScript API

Интеграция пользовательских параметров во встроенные информационные панели Tableau

Встраивание информационных панелей Tableau в веб-приложения с помощью API-интерфейса Tableau Embedding позволяет разработчикам предоставлять динамические решения, основанные на данных. Одним из эффективных способов улучшить взаимодействие с пользователем является включение взаимодействия с параметрами информационной панели через раскрывающиеся меню.

В этом примере задача заключается в настройке раскрывающегося меню для управления конкретным параметром Таблицы, называемым "Моэда". В отличие от фильтров, которые легче интегрировать, параметры требуют точной обработки для правильной загрузки и обновления с помощью JavaScript.

Несмотря на то, что API Tableau предоставляет методы для доступа к параметрам, может быть сложно правильно отобразить доступные значения параметров в виде раскрывающихся опций и обеспечить плавное обновление, когда пользователи делают выбор.

Цель этой статьи — провести вас через этапы настройки "Моэда" параметр с раскрывающимся списком. Вы узнаете, как получать допустимые значения, отображать их в раскрывающемся списке и обеспечивать эффективное обновление параметров при выборе, решая распространенные проблемы, с которыми сталкиваются разработчики.

Команда Пример использования
viz.workbook.getParametersAsync() Этот асинхронный метод получает список всех параметров, доступных в книге Tableau. Очень важно динамически загружать данные параметров, прежде чем взаимодействовать с ними во встроенной информационной панели.
viz.workbook.changeParameterValueAsync() Обновляет значение определенного параметра в Tableau. Это гарантирует, что когда пользователь меняет выбор раскрывающегося списка, параметр в книге обновляется в режиме реального времени.
allowableValues Это свойство содержит допустимые значения параметра Таблицы. Он используется для заполнения раскрывающегося меню всеми допустимыми параметрами, которые пользователи могут выбирать.
currentValue.value Доступ к текущему значению параметра Таблицы. Это гарантирует, что выбор по умолчанию в раскрывающемся списке соответствует текущему состоянию параметра на информационной панели.
document.createElement("select") Динамически создает раскрывающийся элемент
dropdown.addEventListener("change") Добавляет прослушиватель событий в раскрывающийся список для обнаружения изменений выбора пользователя. При срабатывании он инициирует процесс обновления параметров в книге Tableau.
find((p) =>find((p) => p.name === "Moeda") Использует метод find() в массиве параметров для поиска конкретного параметра «Moeda». Это гарантирует, что для обновлений будет выбран правильный параметр.
viz.addEventListener(TableauEventType.FirstInteractive) Эта команда гарантирует, что функция загрузки раскрывающегося списка параметров будет выполнена только после полной загрузки панели управления Tableau, что позволяет избежать проблем с синхронизацией.
option.value = value.value Устанавливает атрибут value элемента
jest.fn().mockResolvedValue() Используется в модульных тестах для имитации поведения асинхронных функций. Это гарантирует, что логика обновления параметров правильно моделируется во время тестирования без необходимости использования живой среды Tableau.

Как динамически управлять параметрами таблицы с помощью JavaScript

Приведенные выше скрипты предназначены для обеспечения плавного взаимодействия между панелью управления Tableau и пользовательским HTML-кодом. падать меню. Эти сценарии используют API-интерфейс Tableau Embedding, который позволяет разработчикам встраивать информационные панели Tableau в веб-приложения и расширять их интерактивность. Основное внимание уделяется управлению параметром с именем «Moeda» с помощью JavaScript путем получения его допустимых значений и динамического обновления параметра, когда пользователь делает выбор.

Первая часть скрипта начинается с функции загрузки параметра «Moeda». Эта функция использует getParametersAsync() метод для получения всех доступных параметров в книге. После загрузки параметров сценарий идентифицирует конкретный параметр «Moeda», используя находить() метод. Если параметр не найден, регистрируется ошибка, чтобы не нарушить остальную часть кода. Это очень важно, поскольку для работы с параметрами необходимо знать, существуют ли они, прежде чем переходить к дальнейшей логике.

После определения параметра падать Меню создается динамически с использованием методов манипулирования DOM JavaScript. Каждое значение из допустимых значений параметра добавляется в качестве опции в раскрывающемся списке. Скрипт гарантирует, что раскрывающийся список отражает текущее состояние параметра, устанавливая для выбранной опции текущее значение параметра. Этот шаг важен для того, чтобы пользователь видел последнее значение на информационной панели, обеспечивая согласованность между состоянием информационной панели и опцией по умолчанию раскрывающегося списка.

Последняя часть сценария включает добавление прослушивателя событий в раскрывающийся список. Этот прослушиватель событий определяет, когда пользователь меняет выбранную опцию, и запускает изменитьПараметрЗначениеAsync() функция для обновления параметра в Таблице. Кроме того, сценарий гарантирует, что раскрывающийся список отображается только после полной загрузки панели мониторинга с помощью ПервыйИнтерактивный событие. Это гарантирует, что раскрывающийся список не будет заполнен преждевременно, предотвращая ошибки или отсутствие значений параметров. Решение является модульным и масштабируемым, что позволяет легко адаптироваться к другим параметрам или панелям мониторинга путем повторного использования одной и той же логической структуры.

Создание интерактивного раскрывающегося списка для управления параметрами таблицы

Использование JavaScript с API-интерфейсом Tableau Embedding для динамической загрузки и обновления параметров.

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

Реализация модульной логики раскрывающегося списка для обновления параметров таблицы

Оптимизированный подход с использованием модульных функций и улучшенной обработки ошибок

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

Тестирование взаимодействия параметров таблицы в различных средах

Написание модульных тестов с помощью 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 в веб-приложения, разработчикам часто приходится делать параметры динамическими, чтобы повысить интерактивность пользователя. Одной из ключевых проблем является обработка таких параметров, как "Моэда" через раскрывающееся меню вместо использования фильтров. Параметры более сложны, поскольку для получения их допустимых значений требуются вызовы API, и их необходимо обновлять с помощью таких функций, как изменитьПараметрЗначениеAsync(). Этот подход дает пользователям больше контроля над конкретными представлениями данных на информационной панели без обновления страницы.

Управление параметрами на информационных панелях Tableau предполагает их правильную идентификацию с помощью getParametersAsync(). Распространенной ошибкой является то, что некоторые параметры могут быть недоступны или могут требоваться разные уровни доступа в зависимости от конфигурации книги. Поэтому важно включить обработку ошибок, чтобы предотвратить нарушение логики раскрывающегося списка, если параметр не найден. Еще один аспект, который следует учитывать, — отображение раскрывающегося списка только после полной загрузки панели мониторинга. Используя ПервыйИнтерактивный Событие гарантирует, что элементы панели мониторинга готовы перед применением настроек.

Оптимизация производительности также имеет решающее значение, особенно при работе с большими наборами данных или информационными панелями с множеством параметров. Функции JavaScript, такие как находить() помогают сузить поиск параметров, но код должен оставаться модульным, чтобы обеспечить масштабируемость в будущем. Разработчикам также следует проверять значения параметров перед их обновлением, чтобы избежать несоответствий между пользовательским интерфейсом и данными информационной панели. Благодаря этим стратегиям становится проще эффективно управлять параметрами Tableau и создавать информационные панели с удобным пользовательским интерфейсом.

Часто задаваемые вопросы об использовании параметров в Tableau API

  1. В чем разница между параметром и фильтром в Tableau?
  2. Параметры позволяют пользователям передавать определенные значения на панель мониторинга, а фильтры ограничивают отображаемые данные на основе критериев. Фильтры действуют на наборы данных, тогда как параметры влияют на конкретные поля или вычисления.
  3. Почему раскрывающийся список остается пустым при получении параметров?
  4. Убедитесь, что getParametersAsync() функция успешно извлекает параметр. В противном случае параметр может быть скрыт или недоступен из-за ограничений книги.
  5. Как убедиться, что раскрывающийся список соответствует текущему состоянию параметра?
  6. Используйте currentValue.value свойство, чтобы установить параметр по умолчанию в раскрывающемся списке. Это обеспечивает согласованность пользовательского интерфейса и информационной панели.
  7. Как я могу обрабатывать ошибки при обновлении параметров в Tableau?
  8. Оберните changeParameterValueAsync() позвонить внутри try-catch блок для обработки любых ошибок, возникающих при обновлении параметра.
  9. Какое событие гарантирует, что панель мониторинга готова к настройке?
  10. FirstInteractive Событие в Tableau API сигнализирует о том, что панель мониторинга полностью загружена и готова к дальнейшему взаимодействию, например добавлению раскрывающегося списка.

Заключительные мысли об интерактивной обработке параметров

Встраивание интерактивных панелей мониторинга с параметризованными раскрывающимися списками обеспечивает пользователям большую гибкость. При правильной настройке разработчики могут получать такие параметры, как Моеда и используйте API Tableau для улучшения управления информационной панелью. Эта настройка позволяет пользователям более эффективно исследовать данные.

Ключевые элементы, такие как ПервыйИнтерактивный событий и надежная обработка ошибок обеспечивают бесперебойную работу раскрывающихся меню в приложении. Следуя этому подходу, разработчики могут эффективно управлять параметрами и предлагать конечным пользователям динамичную и отзывчивую панель управления.

Источники и ссылки для реализации параметров таблицы
  1. Подробности о встраивании информационных панелей и взаимодействии с параметрами взяты из официального Документация по API Tableau JavaScript .
  2. Информация о прослушивателях событий, например ПервыйИнтерактивный, были получены на основе примеров, найденных на Форум сообщества Tableau .
  3. Общие концепции и лучшие практики работы с динамическими элементами пользовательского интерфейса в JavaScript были взяты из Веб-документы MDN .