【问题标题】:identify when values in a column change in spotfire识别spotfire中列中的值何时更改
【发布时间】:2020-10-01 16:43:05
【问题描述】:

我正在尝试在 Spotfire 中创建一个计算列,用于标记/计算另一列中各行的值变化。下面是我正在查看的数据类型和所需结果的示例。

我希望对于每个位置,并按时间排序,我可以识别“颜色”的值何时发生变化并具有运行计数,以便为变化之间的相似值的每个集群赋予相同的标签(集群愿望 1)对于每个位置。如果集群的运行计数可以在每个位置重新启动,那将是最好的,但这并不重要。任何帮助都将不胜感激!

【问题讨论】:

    标签: calculated-columns spotfire


    【解决方案1】:

    我想到了一种方法,依靠一个中间列(我使用了两个只是为了让它更清楚一点)。

    首先:将其位置内每一行的值串联起来:称为[concatString]

    Concatenate(Concatenate([Color]) over (Intersect([Location],AllPrevious([Time]))),', ')

    Spotfire 默认使用逗号后跟空格作为分隔符:我找不到在这种表达式中更改它的方法。

    然后在每个 [concatString] 中删除重复的值。复杂之处在于最后一个没有逗号+空格,而且我没有设法使我正在使用的正则表达式理解这一点。所以我的解决方法是在 [concatString] 中添加最后一个逗号+空格。因此额外的 Concatenate(..)。

    不重复列的公式,[consolidatString]为:

    RXReplace([concatString],"(\\w+\,\\s)\\1+","$1","g")

    那么我们实现的是我们想要分组的每一行的单独值。然后我们可以简单地对 [consolidatString] 进行排名以实现所需的列:

    DenseRank([consolidatString],[Location])

    【讨论】:

    • Spotfire 希望特殊字符前有两个反斜杠
    • 这是一个非常好的解决方案!我确实必须在 consolidatString 公式中的 +\ 之后添加一个额外的 \(不确定这是否也是您遇到的问题)。出于兴趣,您认为 concatString 行中的字符会受到限制吗?我将测试数千行数据。让我们看看!
    • 出于兴趣,如果我有兴趣对整数 (0,1,2) 而不是像红色和蓝色这样的字符串执行相同的方法,那么解决方案会不会有很大不同?谢谢!
    • 整数应该没问题,也许先将红蓝等编码为整数以节省空间是个好主意(我不知道限制是多少,主要因素是你有多少行每个位置都有)。您可以简单地使用 DenseRank([Color]) 进行编码
    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    相关资源
    最近更新 更多