Вычислить столбец из определенного значения из другого столбца в Spotfire - PullRequest
0 голосов
/ 25 мая 2018

У меня проблемы с вычислением "возраста недели" для текущей недели.Я не хочу использовать выражение 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], который вычисляет разницу для каждой строки между значением [Week] и значением [Week], когда [Age_of_Day] = 0.Должно быть что-то вроде этого:

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 (), но я не знаю, как в этом случае.К сожалению, я не смог найти ответ с помощью других тем.

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Я нашел ответ и довольно прост.Выражение для [Age_of_Week] теперь выглядит следующим образом:

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

Это работает правильно только в том случае, если номера дней продолжают работать (как в моем случае) и не сбрасываются с 52 до 1. В противном случае что-то с Year () необходимобыть добавлены в выражении.

0 голосов
/ 29 мая 2018

Начиная с версии 7, вы можете использовать вложенные агрегаты, поэтому это выражение должно работать.

First(case  when [Age_of_Day]=0 then [Week] end) - [Week]
...