2017-03-24 5 views
1

Ich habe eine Datentabelle wie folgt. Ich würde gerne die letzten [Action] von jedem [Sstage] von jedem [ID] basierend auf der [Time] bekommen.spotfire Wie bekomme ich den letzten Wert in einer Spalte?

Ich versuchte: last(action)over intersect([id],[stage],[time]), aber es gibt mir nicht, was ich will. Hat jemand eine Idee?

+----+---------+-----------------+------------+-----------------+ 
| ID | Stage |  Action  | Time | Last_Action | 
+----+---------+-----------------+------------+-----------------+ 
| 1 | CEO  | Decline   | 11/01/2016 | requestmoreinfo | 
| 1 | CEO  | Approve   | 11/02/2016 | requestmoreinfo | 
| 1 | CEO  | Approve   | 11/03/2016 | requestmoreinfo | 
| 1 | CEO  | requestmoreinfo | 11/04/2016 | requestmoreinfo | 
| 1 | Manager | requestmoreinfo | 11/05/2016 | Decline   | 
| 1 | Manager | requestmoreinfo | 11/06/2016 | Decline   | 
| 1 | Manager | Approve   | 11/07/2016 | Decline   | 
| 1 | Manager | Decline   | 11/08/2016 | Decline   | 
| 2 | User | Decline   | 11/09/2016 | Approve   | 
| 2 | User | Decline   | 11/10/2016 | Approve   | 
| 2 | User | Approve   | 11/11/2016 | Approve   | 
+----+---------+-----------------+------------+-----------------+ 

Antwort

2

Dieser ist wahrscheinlich nicht so offensichtlich wie die meisten.

Wir müssen herausfinden, was der Status für die Max([Time]) über die [ID] und [Stage] ist. Sie sind in der Nähe mit Last(), aber diese Methode ist die logische letzte Zeile zu bekommen. Wenn Ihre Daten nicht sortiert sind ... dann würde dies zu unerwünschten Ergebnissen führen. Verwenden Sie daher die Methode Max(), um das neueste Datum abzurufen.

Max([Time]) OVER (Intersect([ID],[Stage])) 

Nun ... dies die [Time] in Ihrer berechneten Spalte setzen würde ... da Sie die korrelierte [Action] wollen, müssen wir zu nisten, dass in einer IF() Aussage der

If([Time]=Max([Time]) OVER (Intersect([ID],[Stage])),[Action]) 

[Action]

finden Nun würde dies die korrekte [Action] in Ihre berechnete Spalte setzen, aber nur für die Zeile, die die Max([Time]) enthält.

Der letzte Schritt ist es, diesen Wert in Ihrem [ID],[Stage] mit einer weiteren Over() Methode Gruppierung anwenden

First(If([Time]=Max([Time]) OVER (Intersect([ID],[Stage])),[Action])) OVER (Intersect([ID],[Stage])) 
Verwandte Themen