在建立BI数据仓库时,时常需要用到时间维度,通过存储过程一次性批量生成,语句如下:
create PROCEDURE [dbo].[Create_time_by_day_dimension]
-- Add the parameters for the stored procedure here
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
begin try
drop table [time_by_day_dimension]
end try
begin catch
end catch
CREATE TABLE [dbo].[time_by_day_dimension] (
[time_id] [int] IDENTITY (1, 1) NOT NULL ,
[the_date] [datetime] NULL ,
[the_day] [nvarchar] (15) NULL ,
[the_month] [nvarchar] (15) NULL ,
[the_year] [smallint] NULL ,
[day_of_month] [smallint] NULL ,
[week_of_year] [smallint] NULL ,
[month_of_year] [smallint] NULL ,
[quarter] [nvarchar] (2) NULL ,
[fiscal_period] [nvarchar] (20) NULL
) ON [PRIMARY]
DECLARE @WeekString varchar(12),
@dDate SMALLDATETIME,
@sMonth varchar(20),
@iYear smallint,
@iDayOfMonth smallint,
@iWeekOfYear smallint,
@iMonthOfYear smallint,
@sQuarter varchar(2),
@sSQL varchar(100),
@adddays int
SELECT @adddays = 1 --日期增量(可以自由设定)
SELECT @dDate = '01/01/2008' --开始日期
WHILE @dDate < '12/31/2011' --结束日期
BEGIN
SELECT @WeekString = DATENAME (dw, @dDate)
SELECT @sMonth=DATENAME(mm,@dDate)
SELECT @iYear= DATENAME (yy, @dDate)
SELECT @iDayOfMonth=DATENAME (dd, @dDate)
SELECT @iWeekOfYear= DATENAME (week, @dDate)
SELECT @iMonthOfYear=DATEPART(month, @dDate)
SELECT @sQuarter = 'Q' + CAST(DATENAME (quarter, @dDate)as varchar(1))
INSERT INTO time_by_day_dimension(the_date, the_day, the_month, the_year,
day_of_month,
week_of_year, month_of_year, quarter) VALUES
(@dDate, @WeekString, @sMonth, @iYear, @iDayOfMonth, @iWeekOfYear,
@iMonthOfYear, @sQuarter)
SELECT @dDate = @dDate + @adddays
END
END
转自:http://www.cnblogs.com/Bany/archive/2011/01/20/1940607.html
分享到:
相关推荐
使用存储过程来创建时间维度表有以下优点: - **性能优化**:预编译的代码执行速度更快。 - **代码重用**:一次编写,多次调用。 - **安全性**:可以通过权限控制限制对敏感数据的访问。 - **封装复杂逻辑**:将...
创建日期维度表的存储过程是数据仓库建模过程中的一个步骤,它通过执行SQL脚本来自动填充这个表。 在提供的文件中,我们可以看到有三个不同的SQL文件,分别对应于不同的数据库管理系统: 1. `sp_dim_date.sql`: 这...
SAP Data Service 创建时间...使用 SAP Data Service 创建时间维度表需要经过多个步骤,但整个过程都是可控的和灵活的。用户可以根据自己的需求设置时间维度表的开始和结束时间、增量等属性,并添加其他属性和主键。
在这个案例中,"Time_DDL.sql"很可能包含了创建时间维度表的SQL脚本,定义了表的结构、字段和约束,确保能够存储所需的各种时间格式。 文件"Time_Dim.PackageBody.sql"和"Time.Dim.Package.sql"可能涉及到PL/SQL包...
#### 二、PL/SQL创建时间维度表 根据给定的部分内容,我们可以看到一个PL/SQL脚本,该脚本用于创建一个名为`DIM_TIME`的时间维度表,并填充相应的数据。下面将对脚本中的每个部分进行详细解析: ##### 表结构定义 ...
以上过程展示了如何使用 PL/SQL 在 Oracle 数据库中创建并填充一个日期维度表。这样的维度表可以极大地简化对时间序列数据的处理和分析,提高数据仓库系统的性能和效率。通过自定义过程,可以根据具体的应用场景调整...
首先,创建时间维度与创建其他普通维度的过程基本相似,都是基于逻辑表(即数据源中的表或视图)来构建。在这个例子中,我们以名为"Date Dim"的逻辑表作为基础,创建一个名为"Date"的维度对象。为了实现前端的钻取...
总结来说,本文档展示了如何使用Oracle存储过程创建一个包含时间维度信息的表,并提供了计算日期在月份和年份中周数的函数。这为数据分析提供了强大的工具,帮助用户更好地理解和分析时间序列数据。
在维度建模,数据存储在两种表中。一种是 Dimension 表,一种是 Fact 表。Fact 表包含业务的衡量指标(比如本例中的 Revenue),而 Dimension 表则包含计算衡量指标所基于的维度(比如 Products、Regions 和 Year)...
确保时间维度的完整性和准确性是进行时间序列分析的基础。 ### 规则4:单一事实表中的事实具有相同粒度 事实表中的所有数据项应具有相同的细节水平或粒度。例如,不应在同一事实表中混合存储月度汇总数据和日度...
缓慢维度变化的定义是指在维度表中,随着时间的推移,数据的变化是渐进的,而不是突变的。这种变化是指维度表中的数据逐渐变化,而不是突然变化。缓慢维度变化可以分为三种类型:keep most recent values in target...
4. **多维数据集创建**:启动多维数据集向导,选择数据源视图,自动检测事实表和维度表,映射时间维度属性,选择度量值,检查维度层次结构。 - 时间维度映射:将Year属性映射到CalendarYear列,HalfYear属性映射到...
以上示例展示了如何创建一个简单的维度表,并通过存储过程进行数据的初始化或更新操作。需要注意的是,实际应用中可能还需要考虑到更多的细节,比如数据的有效期管理、版本控制等。 ### 总结 在数据仓库的设计和...
审计维度用于跟踪数据的变化情况,包括创建时间、更新时间等,这对于数据治理和合规性非常重要。 **14. 多值维度解决方案** 对于需要表示多个值的维度属性,可以通过额外的维度表或特殊的数据结构来解决。 **15. ...
5. **维表设计**:掌握如何创建和维护维度表,包括层次结构的构建、键值和属性的定义,以及时间维的特殊处理。 6. **事实表设计**:理解如何设计事实表,包括选择合适的事实类型(如累计事实、事务事实、时期事实等...
假设我们正在创建一个销售报表,其中包含时间维度。如果错误地拖动了“时间”维度的顶级节点,那么在报表中将无法实现钻取至具体日期或时间区段的功能。正确的做法是,选择并拖放时间维度下的具体层级,如“年”、...
2. **定义维度表**: 维度表描述了观察事实的角度,例如时间维度、地理位置维度等。PowerDesigner提供了便捷的工具来设计这些表,并支持层次结构的建立。 3. **关系连接**: 在PowerDesigner中,可以轻松地定义事实表...