如果你想要一个列公式,这应该有效。 独立于排序。
Local( {L = Associative Array( :Label ) << get keys}, Loc( L, :Label ) )
在没有列公式的情况下,可以在 JSL 中使用相同的方法。
dt = Current Data Table();
dt << New Column( "Rank Unique", continuous );
L = Associative Array( :Label ) << get keys;
For Each Row( :Rank Unique = Loc( L, :Label ) );
dt = current data table();
dt:Rank << delete formula;
有几种方法可以做到这一点......(我能想到的,一大早)
- 使用汇总表创建排名
- 运行表==>总结
- 按标签列分组
- 假设输出数据表是从低到高排序的,新建一个名为“Rank”的列,并给它公式.......Row()
- 运行Tables==>Update将汇总表join回原表,在Label列上匹配
- 创建一个新的排名公式列
- 按标签对数据排序
- 使用公式创建一个名为 Rank 的新列
If( Row() == 1,
count = 1,
If( :Label != Lag( :Label ),
count
++)
);
count;
- 一定要转到列信息并在列创建后删除。这样做的原因是因为公式是基于数据的顺序和数据的完整性,数据的任何变化(排序等)都会重新运行公式并可能改变排名。
我想计算一个新列来对列进行唯一排名。 以下是我想要实现的示例输出。 但使用 JSL 排名公式并不能帮助我实现我想要的目标。 有人可以告诉我吗?
我使用的公式是 Col Rank(:Label)
| 标签 | 秩 | 我想要的是 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],80376,最大 | 1 | 1 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],80376,最大 | 2 | 1 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],80376,最大 | 3 | 1 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],81999,最大 | 4 | 2 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],81999,最大 | 5 | 2 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],81999,最大 | 6 | 2 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],86491,最大 | 7 | 3 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],86491,最大 | 8 | 3 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],86491,最大 | 9 | 3 |
这个问题很久以前就解决了,不过昨天我找到了一个解决方案,想分享一下,希望对大家有帮助。创建一个新的公式列,公式如下:
Col Maximum(
Col Rank(
If( Row() == Col Minimum( Row(), :Label ),
:Label,
.
)
),
:Label
)
基本上,这首先会创建一个新数组,其中包含与原始列中第一个实例对应的行中的标签,其余所有行都使用“.”表示。然后,我们计算每个标签的排名,这将生成另一个包含标签排名(而非标签本身)的数组。最后,我们输出一个包含所有带有该标签的行的排名的数组,这就是最终公式列中的内容。
在我的例子中,我尝试根据另一列中的最高值对一组数据进行排序——例如,对于“组”、“集合”、“时间”、“值”列,我想根据一段时间内观察到的最高值来找到该集合在组中的排名。以下是一个有效的公式:
Col Maximum(
Col Rank(
If ( Row() == Col Minimum( Row(), :Group, :Set),
Col Maximum( :Value, :Group, :Set ),
.
),
:Group,<BR /> <
<TIE></TIE> ),
:Group, :Set
)
我不知道这是否是最好的方法,但它确实有效,而且 ChatGPT 根本无法提供解决方案,所以也许这会对某些人有所帮助。