определить, когда значения в столбце изменяются в spotfire

#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])