#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 для поиска значения в вашей текстовой области. К сожалению, пример кода (даже не полный ответ) превысит пределы поля комментариев.