根据 Spotfire 中另一列的特定值计算列
Calculate column from a specific value from another column in Spotfire
我在计算本周的 "Age of a Week" 时遇到了问题。我不想使用 Week() 表达式,因为我的数据使用 Spotfire 以外的其他周数(更改区域和位置不是一个选项)。每天我的数据 table 都会刷新,因此我的计算列 [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() 但我不知道在这种情况下如何。不幸的是,我无法在其他主题的帮助下找到我的答案。
从版本 7 开始,您可以使用嵌套聚合,所以这个表达式应该可以工作。
First(case when [Age_of_Day]=0 then [Week] end) - [Week]
我找到了答案,而且相当简单。 [Age_of_Week] 的表达式现在是:
If([Age of Day]>=0,Max([Week]) - [Week],If([Age of Day]<0,Min([Week]) - [Week],NULL))
这仅在周数继续(如我的情况)且未从 52 重置为 1 时才能正常工作。否则,需要在表达式中添加带有 Year() 的内容。
我在计算本周的 "Age of a Week" 时遇到了问题。我不想使用 Week() 表达式,因为我的数据使用 Spotfire 以外的其他周数(更改区域和位置不是一个选项)。每天我的数据 table 都会刷新,因此我的计算列 [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() 但我不知道在这种情况下如何。不幸的是,我无法在其他主题的帮助下找到我的答案。
从版本 7 开始,您可以使用嵌套聚合,所以这个表达式应该可以工作。
First(case when [Age_of_Day]=0 then [Week] end) - [Week]
我找到了答案,而且相当简单。 [Age_of_Week] 的表达式现在是:
If([Age of Day]>=0,Max([Week]) - [Week],If([Age of Day]<0,Min([Week]) - [Week],NULL))
这仅在周数继续(如我的情况)且未从 52 重置为 1 时才能正常工作。否则,需要在表达式中添加带有 Year() 的内容。