如果你想要一個列公式,這應該有效。 獨立於排序。
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 根本無法提供解決方案,所以也許這對某些人有幫助。