Рассмотрим следующее представление Teradata с именем «VIEW», которое состоит из данных транзакций.
ATTR1 ATTR2 DATE1 DATE2 WEEK1 WEEK2 AMOUNT
A B 1/1/2019 1/8/2019 201901 201902 10
A B 12/26/2018 1/8/2019 201852 201902 20
A B 1/1/2019 1/15/2019 201901 201903 30
A B 1/8/2019 1/15/2019 201902 201903 30
DATE1 - дата проводки, а DATE2 - дата клиринга транзакции. WEEK1 и WEEK2 - это финансовые недели DATE1 и DATE2 соответственно. ATTR - это случайные атрибуты транзакции. Мне нужно сообщать суммы транзакций по неделям для атрибутов.
Например, для недели 201901 мы хотели бы видеть суммы транзакций дат проводки до и до недели 201901 и даты клиринга после 201901. См. Код ниже.
select ATTR1,
ATTR2,
SUM(CASE WHEN WEEK2 > 201852 AND WEEK1 <= 201852 THEN AMOUNT END) AS AMT_201852,
SUM(CASE WHEN WEEK2 > 201901 AND WEEK1 <= 201901 THEN AMOUNT END) AS AMT_201901,
SUM(CASE WHEN WEEK2 > 201902 AND WEEK1 <= 201902 THEN AMOUNT END) AS AMT_201902,
FROM VIEW
GROUP BY 1,2
Результат:
ATTR1 ATTR2 AMT_201852 AMT_201901 AMT_201902
A B 20 60 60
Как показывает приведенный выше код, нам приходится вручную создавать столбцы для каждой недели, которых мы хотели бы избежать. Есть ли способ динамически создавать эти столбцы с течением недель? Или есть лучший способ представить это?
В отчете использование WEEK1 в качестве фильтра отфильтрует предыдущие недели (в случае WEEK1 как 201901, 201852 будет отфильтровано и потеряет соответствующие суммы). В конце концов мы поместили этот SQL в панель инструментов PowerBI.
Спасибо!