2017-03-24 35 views
1

我有一个数据表如下。我想根据[Time]得到每个[ID]的每个[Sstage]的最后[Action]spotfire如何获得列中的最后一个值?

我试过了:last(action)over intersect([id],[stage],[time])但它没有给我我想要的东西。有人有什么主意吗?

+----+---------+-----------------+------------+-----------------+ 
| 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   | 
+----+---------+-----------------+------------+-----------------+ 

回答

2

这其中可能就没有那么明显,因为大多数。

我们必须通过[ID][Stage]了解Max([Time])的状态。您近距离使用Last(),但该方法是获得逻辑上的最后一行。如果你的数据没有排序......那么这会产生不希望的结果。因此,请使用Max()方法获取最新日期。

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

现在...这会把[Time]在计算列...因为你想要的相关[Action],我们需要窝在一个IF()声明找到[Action]

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

现在,这将在您的计算列中输入正确的[Action],但仅限于包含Max([Time])的行。

最后一步是应用在您[ID],[Stage]该值与一个更Over()方法分组

First(If([Time]=Max([Time]) OVER (Intersect([ID],[Stage])),[Action])) OVER (Intersect([ID],[Stage])) 
相关问题