#calculated-columns #spotfire
#вычисляемые столбцы #spotfire
Вопрос:
Я пытаюсь создать вычисляемый столбец, который помечает / подсчитывает изменения значений по строкам в другом столбце, в Spotfire. Ниже приведен пример типов данных, которые я рассматриваю, и желаемых результатов.
Я надеюсь, что для каждого местоположения и упорядоченного по времени я смогу определить, когда значения «цветов» изменяются, и иметь текущий счетчик, чтобы каждому кластеру похожих значений между изменениями присваивалась одна и та же метка (кластерное желание 1) для каждого местоположения. Было бы лучше, если бы текущее количество кластеров могло перезапускаться в каждом местоположении, но это не имеет решающего значения. Любая помощь будет более чем оценена!
Ответ №1:
Я придумал, как это сделать, опираясь на один промежуточный столбец (я использовал два, просто чтобы было немного понятнее).
Первое: объединение значений для каждой строки в ее местоположении: вызывается [concatString]
Объединить (Объединить ([Цвет]) поверх (Пересечь([Местоположение], все предыдущие([Время]))),’, ‘)
По умолчанию в Spotfire используется запятая, за которой следует пробел в качестве разделителя: я не смог найти способ изменить это в таком выражении.
Затем внутри каждой [concatString] я удаляю повторяющиеся значения. Сложность заключается в том, что в последнем не было запятой пробел, и мне не удалось заставить регулярное выражение, которое я использую, понять это. Итак, мой обходной путь заключался в добавлении последней запятой пробел в [concatString] . Отсюда и дополнительная конкатенация (..).
Формула для столбца без повторений, [consolidatString]:
RXReplace([concatString],»(\ w ,\s)\1 «,»$1″,» g»)
Тогда мы получили индивидуальное значение для каждой строки, которую мы хотим сгруппировать. Затем мы можем просто ранжировать [consolidatString], чтобы получить желаемый столбец:
DenseRank([consolidatString],[Location])
Комментарии:
1. Spotfire требует две косые черты перед специальными символами
2. это действительно хорошее решение! Мне пришлось добавить дополнительный после в формулу consolidatString (не уверен, что это проблема, с которой вы столкнулись). Из интереса, как вы думаете, будет ли ограничение на количество символов, которые могут быть в строках конкатенции? Я собираюсь протестировать тысячи строк данных. Давайте посмотрим!
3. Из интереса, было бы решение сильно другим, если бы я был заинтересован в том, чтобы использовать тот же подход для промежуточных (0,1,2), а не для таких строк, как Red и Blue? Спасибо!
4. Должно быть в порядке с целыми числами, может быть, хорошей идеей сначала закодировать ваш красный синий и т. Д. В Целые числа, Чтобы сэкономить место (я не знаю, каков предел, основным фактором будет количество строк, которые у вас есть в каждом местоположении). Вы можете просто кодировать с помощью DenseRank([Color])