我是postgres和DW的新手,我必须设计book中给出的DATE Dimension
。我在网上看到很多地方,到目前为止我没有成功,有些人可以解释如何填充像'Fiscal Week', 'Fiscal Month', 'Fiscal Half year'
这样的字段
谢谢
答案 0 :(得分:6)
我猜你想要10年的日期维度表,其中所有列都在图2.4中显示(基于Google Books)。签入文档:
to_char
,Table 9-21用于模板模式date_part
generate_series(start, stop, step interval)
要想在10年内获得所有日子,你可以写下:
SELECT generate_series('2001-01-01'::date, '2010-12-31'::date, '1 day') AS day;
SELECT count(*) FROM generate_series('2001-01-01'::date, '2010-12-31'::date, '1 day');
count
-------
3652
(1 row)
根据图2.5创建表格,例如:
DROP TABLE IF EXISTS "Date Dimension";
CREATE TABLE "Date Dimension"
(
"Date Key" serial,
"Date" date,
"Full Day Description" text,
"Day Of Week" text,
"Calendar Month" text,
"Calendar Year" integer,
"Fiscal Year Month" text,
"Holiday Indicator" text,
"Weekday Indicator" text
);
插入命令:
INSERT INTO "Date Dimension"
("Date", "Full Day Description", "Day Of Week", "Calendar Month",
"Calendar Year", "Fiscal Year Month", "Holiday Indicator",
"Weekday Indicator")
SELECT
day,
rtrim(to_char(day, 'Month')) || to_char(day, ' DD, YYYY'),
to_char(day, 'Day'),
rtrim(to_char(day, 'Month')),
date_part('year', day),
'F' || to_char(day, 'YYYY-MM'),
'', --omitting (trivial 'Holiday'/'Non-Holiday, but how to get this ??),
CASE
WHEN date_part('isodow', day) IN (6, 7) THEN 'Weekend'
ELSE 'Weekday'
END
FROM
generate_series('2001-01-01'::date, '2010-12-31'::date, '1 day') day;
我希望这能给你一些框架和起点。
答案 1 :(得分:0)
您的会计年度结构如何?何时开始?它遵循任何标准的4-4-5或4-5-4规则吗?您最好的选择可能是从CSV文件中加载它,例如在此问题的答案中讨论:4-5-4 National Retail foundation Calendar csv download or function to create。众所周知,财政年度是非标准的。例如,我们公司的财政年度从7月1日开始。
我必须在广播日历的日历维度中添加字段(从包含1月1日的星期一开始),并且可以通过一些计算来完成。