Сценарии Python в TIBCO Spotfire для отображения пользовательских сообщений

#python #visualization #data-visualization #ironpython #spotfire

#python #визуализация #визуализация данных #ironpython #spotfire

Вопрос:

Я загружаю таблицу данных по требованию и связал ее с отметками на предыдущей вкладке. Таблица данных выглядит следующим образом:

   ID        Values
  1         365
  2         65
  3         32
  3         125
  4         74
  5         98
  6         107
  

Я хочу ограничить данные, которые вводятся в эту новую визуализацию, на основе отдельного количества идентификаторов.

В настоящее время я делаю это, используя раздел «Ограничить данные по выражению» в свойствах. Где мое выражение

 UniqueCount(ID) <= 1000
  

Это работает отлично, однако я бы также хотел, чтобы оно отображало сообщение типа
«Выбрано слишком много идентификаторов. Максимальное ограничение — 1000»

Я думал сделать это с помощью элемента управления свойствами, где элемент управления свойствами запускает скрипт iron python. Любые предложения о том, как написать этот скрипт?

Комментарии:

1. Это определенно выполнимо с объектом cursor, но поскольку ему придется анализировать каждую отмеченную строку таблицы данных, я не предлагаю это для больших наборов данных, потому что это на некоторое время зависнет для обработки. В зависимости от размера может быть предпочтительнее добавить таблицу данных, которая получает только определенное количество идентификаторов в выбранных вами данных, и чтобы курсор считывал этот набор данных (который будет состоять только из 1 строки).

Ответ №1:

Одним из обходных путей было бы использование небольшой текстовой области на странице (возможно, в качестве заголовка). Вы можете Insert Dynamic Item -> Вычисленное значение или значок и выполнить подсчет или уникальный подсчет на основе маркировки (выбора). Например, если количество (идентификатор)> 1000, текст может измениться на красный или значок может изменить цвет. Это простая в обработке альтернатива, которая не обязательно создает всплывающее окно, но все же может обеспечить мгновенное уведомление пользователя о том, что было выбрано слишком много строк.

Редактировать ниже:

 <!-- Invisible span to contain a copy of your value -->
<span style="display:none;" id="stores-my-count"><span id="seek-ender"></span></span>


\Javascript below to grab dynamic item element's value and put it into a span
\To be executed every time the dynamic value changes
$("#DynamicItemSpotfireID").onchange = function() {
  var myCount = $("#DynamicItemSpotfireID").text();
  $("#stores-my-count").append(myCount);
}

#IronPython script to locate the value placed into the span by the JS above
#and put only that portion of the page's HTML (only the value) into a document property
parentSpan = '<span id="stores-my-count">'
endingSpan = '<span id="seek-ender">'
startingHTML = myTextArea.As[VisualContent]().HtmlContent
startVal = startingHTML.find(parentSpan, startingIndex, endingIndex)   len(parentSpan)
endVal = startingHTML.find(endingSpan, startingIndex, endingIndex)
Document.Properties["myMarkingCount"] = startingHTML[startVal:endVal]
  

Я не тестировал большую часть этого кода, и я предоставляю его как место, где можно начать думать о проблеме, а не готовое решение. Надеюсь, это работает только с незначительной необходимой настройкой.

Комментарии:

1. Спасибо! Это было полезно. Быстрое продолжение. Есть ли способ передать значение динамического элемента в пользовательское выражение или элемент управления свойствами?

2. Сначала я не был уверен и был готов написать: «К сожалению, нет», но, подумав об этом некоторое время, есть запутанный обходной путь! вы могли бы написать сценарий IronPython

3. Извините, я не понимал, что нажатие [Enter] немедленно зафиксирует мой комментарий. Вы могли бы сначала написать некоторый JavaScript, чтобы получить значение из динамического элемента, а затем написать скрипт IronPython для поиска значения в вашей текстовой области. К сожалению, пример кода (даже не полный ответ) превысит пределы поля комментариев.