Danke Jim & MS. Es funktioniert hervorragend!
Wenn Sie eine Spaltenformel wünschen, sollte dies funktionieren. Unabhängig von der Sortierung.
Local( {L = Associative Array( :Label ) << get keys}, Loc( L, :Label ) )
Derselbe Ansatz könnte in JSL ohne Spaltenformel verwendet werden.
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;
Es gibt ein paar Möglichkeiten, dies zu tun ... (das fällt mir ein, so früh am Morgen)
- Verwenden Sie eine Übersichtstabelle, um die Ränge zu erstellen
- Führen Sie Tables==>Summary aus
- Gruppieren Sie nach Ihrer Label-Spalte
- Angenommen, die Ausgabedatentabelle ist von niedrig nach hoch sortiert, erstellen Sie eine neue Spalte mit dem Namen „Rang“ und geben Sie ihr die Formel........Row()
- Führen Sie Tables==>Update aus, um die Übersichtstabelle wieder mit der ursprünglichen Tabelle zu verknüpfen, wobei der Abgleich in der Spalte „Label“ erfolgt
- Erstellen Sie eine neue Rangformelspalte
- Sortieren Sie die Daten nach Label
- Erstellen Sie eine neue Spalte namens Rang mit der Formel
If( Row() == 1,
count = 1,
If( :Label != Lag( :Label ),
count
++)
);
count;
- Achten Sie darauf, zu Column Info zu gehen und das zu entfernen, nachdem die Spalte erstellt wurde.Der Grund dafür ist, dass, da die Formel auf der Reihenfolge der Daten und der Vollständigkeit der Daten basiert, alle Änderungen an den Daten (Sortierung usw.) die Formel erneut ausführen und möglicherweise die Rangfolge ändern.
Ich möchte eine neue Spalte berechnen, um eine Spalte eindeutig zu ordnen. Unten finden Sie die Beispielausgabe, die ich erreichen möchte. Aber die Verwendung der JSL-Rangformel hilft mir nicht, das zu erreichen, was ich will. Kann mir bitte jemand einen Rat geben?
Die Formel, die ich verwende, ist Col Rank(:Label)
| Etikett | Rang | Was ich möchte |
| NVM_VMAX_PRG_EVENR2_DCMP[1],80376,max | 1 | 1 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],80376,max | 2 | 1 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],80376,max | 3 | 1 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],81999,max | 4 | 2 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],81999,max | 5 | 2 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],81999,max | 6 | 2 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],86491,max | 7 | 3 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],86491,max | 8 | 3 |
| NVM_VMAX_PRG_EVENR2_DCMP[1],86491,max | 9 | 3 |
Das Problem ist schon lange gelöst, aber ich habe gestern eine Lösung gefunden, die ich gerne teilen möchte, falls sie jemandem hilft. Erstellen Sie eine neue Formelspalte mit dieser Formel:
Col Maximum(
Col Rank(
If( Row() == Col Minimum( Row(), :Label ),
:Label,
.
)
),
:Label
)
Im Wesentlichen wird zunächst ein neues Array mit der Bezeichnung in der Zeile erstellt, die der ersten Instanz in der ursprünglichen Spalte entspricht, und an allen anderen Stellen mit „.“ versehen. Anschließend fragen wir nach der Rangfolge jeder Bezeichnung, was zu einem weiteren Array mit der Rangfolge der Bezeichnung anstelle der Bezeichnung selbst führt. Abschließend geben wir ein Array mit der Rangfolge aller Zeilen mit dieser Bezeichnung aus, das in der Formelspalte landet.
In meinem Fall habe ich versucht, Gruppen von Datensätzen anhand ihres höchsten Werts in einer anderen Spalte zu ordnen – z. B. mit den Spalten „Gruppe“, „Satz“, „Zeit“, „Wert“. Ich wollte den Rang des Satzes innerhalb der Gruppe anhand des höchsten im Zeitverlauf beobachteten Werts ermitteln. Hier ist eine Formel, die funktioniert hat:
Col Maximum(
Col Rank(
If ( Row() == Col Minimum( Row(), :Group, :Set),
Col Maximum( :Value, :Group, :Set ),
.
),
:Group,<BR /> <
<TIE></TIE> ),
:Group, :Set
)
Ich weiß nicht, ob das der beste Weg ist, aber es funktioniert, und ChatGPT konnte überhaupt keine Lösung anbieten, also hilft das vielleicht jemandem.