spotfire 如何获取列中的最后一个值?
spotfire how to get the last value in a column?
我有一个数据 table 如下。我想根据 [Time]
得到每个 [ID]
的每个 [Sstage]
的最后一个 [Action]
。
我试过: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 |
+----+---------+-----------------+------------+-----------------+
这个可能不像大多数人那么明显。
我们必须找出 Max([Time])
相对于 [ID]
和 [Stage]
的状态。您已使用 Last()
关闭,但该方法是获取合乎逻辑的最后一行。如果您的数据未排序......那么这会产生不良结果。因此,使用 Max()
方法获取最近的日期。
Max([Time]) OVER (Intersect([ID],[Stage]))
现在...这会将 [Time]
放入您的计算列中...因为您想要相关的 [Action]
,我们需要将其嵌套在 IF()
语句中以找到 [Action]
If([Time]=Max([Time]) OVER (Intersect([ID],[Stage])),[Action])
现在,这会将正确的 [Action]
放入您的计算列中,但仅限于包含 Max([Time])
.
的行
最后一步是使用另一种 Over()
方法
在 [ID],[Stage]
分组中应用此值
First(If([Time]=Max([Time]) OVER (Intersect([ID],[Stage])),[Action])) OVER (Intersect([ID],[Stage]))
我有一个数据 table 如下。我想根据 [Time]
得到每个 [ID]
的每个 [Sstage]
的最后一个 [Action]
。
我试过: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 |
+----+---------+-----------------+------------+-----------------+
这个可能不像大多数人那么明显。
我们必须找出 Max([Time])
相对于 [ID]
和 [Stage]
的状态。您已使用 Last()
关闭,但该方法是获取合乎逻辑的最后一行。如果您的数据未排序......那么这会产生不良结果。因此,使用 Max()
方法获取最近的日期。
Max([Time]) OVER (Intersect([ID],[Stage]))
现在...这会将 [Time]
放入您的计算列中...因为您想要相关的 [Action]
,我们需要将其嵌套在 IF()
语句中以找到 [Action]
If([Time]=Max([Time]) OVER (Intersect([ID],[Stage])),[Action])
现在,这会将正确的 [Action]
放入您的计算列中,但仅限于包含 Max([Time])
.
最后一步是使用另一种 Over()
方法
[ID],[Stage]
分组中应用此值
First(If([Time]=Max([Time]) OVER (Intersect([ID],[Stage])),[Action])) OVER (Intersect([ID],[Stage]))