Spotfire如何获取列中的最后一个值?

Ben*_*ang 2 spotfire

我有一个数据表如下。我想根据每个的[Action]最后一个[Sstage][ID][Time].

我尝试过: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         |
+----+---------+-----------------+------------+-----------------+
Run Code Online (Sandbox Code Playgroud)

scs*_*mon 5

这一点可能不像大多数那样明显。

我们必须找出 和 的状态Max([Time])[ID]什么[Stage]。您正在使用Last(),但该方法是获取逻辑最后一行。如果您的数据未排序...那么这会产生不希望的结果。因此,使用该Max()方法来获取最近的日期。

Max([Time]) OVER (Intersect([ID],[Stage]))
Run Code Online (Sandbox Code Playgroud)

现在...这会将 放入[Time]您的计算列中...因为您想要相关的[Action],我们需要将其嵌套在一个IF()语句中以查找[Action]

If([Time]=Max([Time]) OVER (Intersect([ID],[Stage])),[Action])
Run Code Online (Sandbox Code Playgroud)

现在,这会将正确的值放入[Action]您的计算列中,但仅包含在包含Max([Time]).

[ID],[Stage]最后一步是使用另一种Over()方法将此值应用于您的分组

First(If([Time]=Max([Time]) OVER (Intersect([ID],[Stage])),[Action])) OVER (Intersect([ID],[Stage]))
Run Code Online (Sandbox Code Playgroud)