使用SQL视图动态创建OLAP Datetime表

时间:2015-02-17 09:43:54

标签: sql-server olap

因为我想使用动态日期时间值作为维度传递到我的OLAP多维数据集中。因为,我们有特定的FY格式。所以,我决定使用sql视图。我已经部分写完了我的sql视图。我需要使用多维数据集向导创建DateTime表时的所有列。 ie, PK_Date, Date_Name, Fiscal_Year, Fiscal_Year_Name, Fiscal_Half_Year, Fiscal_Half_Year_Name etc....

但是,只有从多维数据集向导生成DateTime表时才更改,在我们的方法中,我们将使用视图表作为DateTime维度的源表。

目前我已完成以下代码

ALTER VIEW [dbo].[FYExtraction] AS WITH E1(N) AS
(SELECT 1
 FROM (
     VALUES (1),(1),(1),(1),(1),(1),(1),(1),(1),(1)) DT(N)),
       E2(N) AS
(SELECT 1
 FROM E1 A, E1 B),
       E4(N) AS
(SELECT 1
 FROM E2 A, E2 B),
       Numbers(N) AS
( SELECT ROW_NUMBER() OVER (
                          ORDER BY
                            (SELECT NULL)) - 1
 FROM E4 )
SELECT temp.PK_Date,
   CASE
       WHEN (temp.PK_Date >= cast(cast(year(temp.PK_Date) AS varchar(10))+'-'+
                                    (SELECT Line2
                                     FROM SiteFile
                                     WHERE code='ACQFY') AS datetime)
             AND temp.PK_Date <= cast(cast(year(temp.PK_Date)+1 AS varchar(10))+'-'+
                                        (SELECT Line3
                                         FROM SiteFile
                                         WHERE code='ACQFY') AS datetime)) THEN 'FY '+ cast(year(temp.PK_Date) AS varchar(100))
       ELSE 'FY '+cast(year(temp.PK_Date) -1 AS varchar(100))
   END AS Fiscal_Year_Name
FROM
(SELECT N,
      DATEADD(D, N,
                (SELECT cast(
                               (SELECT top 1 cast(year(CreatedOn)-1 AS varchar(10))
                                FROM items
                                ORDER BY CreatedOn ASC)+'-'+Line2 AS datetime)
                 FROM sitefile
                 WHERE code='ACQFY')) AS PK_Date
 FROM Numbers
 WHERE N <= DATEDIFF(D,
                     (SELECT cast(
                                    (SELECT top 1 cast(year(CreatedOn)-1 AS varchar(10))
                                     FROM items
                                     ORDER BY CreatedOn ASC)+'-'+Line2 AS datetime)
                      FROM sitefile
                      WHERE code='ACQFY'),
                     (SELECT cast(
                                    (SELECT top 1 cast(year(CreatedOn)+1 AS varchar(10))
                                     FROM items
                                     ORDER BY CreatedOn DESC)+'-'+Line3 AS datetime)
                      FROM sitefile
                      WHERE code='ACQFY')))AS TEMP GO

0 个答案:

没有答案