1

我在计算当前一周的“一周年龄”时遇到了麻烦。我不想使用 Week() 表达式,因为我的数据使用 Spotfire 以外的其他周数(不能更改区域和位置)。我的数据表每天都会刷新,因此我的计算列 [Age_of_Day] 计算从当前(实际)日期算起的天数。现在我想从真正的一周计算周龄。我在这里有我的数据样本:

RowID  Week  Day  Date       Age_of_Day
12     20    do   17-5-2018   8
13     20    vr   18-5-2018   7
14     20    za   19-5-2018   6
15     21    zo   20-5-2018   5
16     21    ma   21-5-2018   4
17     21    di   22-5-2018   3
18     21    wo   23-5-2018   2
19     21    do   24-5-2018   1
20     21    vr   25-5-2018   0
21     21    za   26-5-2018  -1
22     22    zo   27-5-2018  -2
23     22    ma   28-5-2018  -3
24     22    di   29-5-2018  -4
25     22    wo   30-5-2018  -5
26     22    do   31-5-2018  -6
27     22    vr   1-6-2018   -7

现在我想要一个新列 [Age_of_Week],它计算 [Age_of_Day]=0 时 [Week] 的值与 [Week] 的值之间的每一行的差异。它应该是这样的:

RowID  Week  Day  Date       Age_of_Day Age_of_Week
12     20    do   17-5-2018   8          1
13     20    vr   18-5-2018   7          1
14     20    za   19-5-2018   6          1
15     21    zo   20-5-2018   5          0
16     21    ma   21-5-2018   4          0
17     21    di   22-5-2018   3          0
18     21    wo   23-5-2018   2          0
19     21    do   24-5-2018   1          0
20     21    vr   25-5-2018   0          0
21     21    za   26-5-2018  -1          0
22     22    zo   27-5-2018  -2         -1
23     22    ma   28-5-2018  -3         -1
24     22    di   29-5-2018  -4         -1
25     22    wo   30-5-2018  -5         -1
26     22    do   31-5-2018  -6         -1
27     22    vr   1-6-2018   -7         -1

希望有人可以帮助我。我想我必须使用 OVER() 语句和 Intersect() 但我不知道在这种情况下如何。不幸的是,我在其他主题的帮助下找不到我的答案。

4

2 回答 2

3

从版本 7 开始,您可以使用嵌套聚合,因此该表达式应该可以工作。

First(case  when [Age_of_Day]=0 then [Week] end) - [Week]
于 2018-05-29T07:30:44.477 回答
1

我找到了答案,而且相当简单。[Age_of_Week] 的表达式现在是:

If([Age of Day]>=0,Max([Week]) - [Week],If([Age of Day]<0,Min([Week]) - [Week],NULL))

只有当周数继续继续(如我的情况)并且没有从 52 重置为 1 时,这才能正常工作。否则,需要在表达式中添加带有 Year() 的内容。

于 2018-05-29T08:49:32.623 回答