【发布时间】:2019-06-03 16:33:09
【问题描述】:
考虑以下名为“VIEW”的 Teradata 视图,它由事务数据组成。
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 仪表板。
谢谢!
【问题讨论】:
-
您总是报告相同的周数还是可变的? ISO,您的周数是如何定义的?
-
@dnoeth 由于我们的报告采用滚动格式,因此周数会有所变化。我们保留了大约 30 周的历史记录。是的,我相信星期是根据 ISO 定义的。
标签: powerbi teradata teradata-sql-assistant