Postgres:根据Ralph Kimball创建DATE Dimension

day*_*mer 2 postgresql data-warehouse

我是postgres和DW的新手,我必须设计一本书中DATE Dimension给出的内容.我在网上看到很多地方,到目前为止我没有成功,有些人可以解释如何填充像'Fiscal Week', 'Fiscal Month', 'Fiscal Half year'

谢谢

Grz*_*ski 6

我想您需要10年的日期维度表,其中所有列都显示在图2.4中(基于Google图书).签入文档:

为了获得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)
Run Code Online (Sandbox Code Playgroud)

根据图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 
);
Run Code Online (Sandbox Code Playgroud)

插入命令:

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;
Run Code Online (Sandbox Code Playgroud)

我希望这给你一些框架和起点.