数据仓库的日历表

2023-12-10

对于我的数据仓库,我正在创建一个日历表,如下所示:

SET NOCOUNT ON

DROP Table dbo.Calendar
GO
Create Table dbo.Calendar
(
    CalendarId              Integer NOT NULL,
    DateValue               Date    NOT NULL,
    DayNumberOfWeek         Integer NOT NULL,
    NameOfDay               VarChar (10) NOT NULL,
    NameOfMonth             VarChar (10) NOT NULL,
    WeekOfYear              Integer NOT NULL,
    JulianDay               Integer NOT NULL,
    USAIsBankHoliday        Bit     NOT NULL,
    USADayName              VarChar (100) NULL,
)
ALTER TABLE dbo.Calendar ADD CONSTRAINT
    DF_Calendar_USAIsBankHoliday DEFAULT 0 FOR USAIsBankHoliday
GO
ALTER TABLE dbo.Calendar ADD CONSTRAINT
    DF_Calendar_USADayName DEFAULT '' FOR USADayName
GO

Declare @StartDate  DateTime = '01/01/2000'
Declare @EndDate    DateTime = '01/01/2020'

While @StartDate < @EndDate
Begin
    INSERT INTO dbo.Calendar 
    (
        CalendarId, 
        DateValue, 
        WeekOfYear,
        DayNumberOfWeek,
        NameOfDay,
        NameOfMonth,
        JulianDay
    )
    Values 
    (
        YEAR (@StartDate) * 10000 + MONTH (@StartDate) * 100 + Day (@StartDate), --CalendarId
        @StartDate,                 -- DateValue
        DATEPART (ww, @StartDate),  -- WeekOfYear
        DATEPART (dw, @StartDate),  -- DayNumberOfWeek
        DATENAME (dw, @StartDate),  -- NameOfDay
        DATENAME (M, @StartDate),   -- NameOfMonth
        DATEPART (dy, @StartDate)   -- JulianDay
    )

    Set @StartDate += 1
End

--=========================== Weekends
-- saturday and sunday
UPDATE dbo.Calendar SET USAIsBankHoliday = 1, USADayName += 'Weekend, ' WHERE DayNumberOfWeek IN (1, 7) 


--=========================== Bank Holidays
-- new years day
UPDATE dbo.Calendar SET USAIsBankHoliday = 1, USADayName += 'New Year''s Day, '  WHERE (CalendarId % 2000) IN (101)

-- memorial day (last Monday in May)
UPDATE dbo.Calendar 
SET USAIsBankHoliday = 1, 
    USADayName += 'Memorial Day, '  
WHERE 1=1
AND CalendarId IN 
    (
        SELECT MAX (CalendarId)
        FROM dbo.Calendar 
        WHERE MONTH (DateValue) = 5 
        AND DATEPART (DW, DateValue)=2
        GROUP BY YEAR (datevalue)
    )

-- independence day
UPDATE dbo.Calendar SET USAIsBankHoliday = 1, USADayName += 'Independence Day, '  WHERE (CalendarId % 2000) IN (704)

-- labor day (first Monday in September)
UPDATE dbo.Calendar 
SET USAIsBankHoliday = 1, 
    USADayName += 'Labor Day, '  
WHERE 1=1
AND CalendarId IN 
    (
        SELECT MIN (CalendarId)
        FROM dbo.Calendar 
        WHERE MONTH (DateValue) = 9
        AND DATEPART (DW, DateValue)=2
        GROUP BY YEAR (datevalue)
    )

-- thanksgiving day (fourth Thursday in November)
UPDATE dbo.Calendar 
SET USAIsBankHoliday = 1, 
    USADayName += 'Thanksgiving Day, '  
WHERE 1=1
AND CalendarId IN 
    (
        SELECT Max (CalendarId)-2
        FROM dbo.Calendar 
        WHERE MONTH (DateValue) = 11
        AND DATEPART (DW, DateValue)=7
        GROUP BY YEAR (datevalue)
    )

-- christmas
UPDATE dbo.Calendar SET USAIsBankHoliday = 1, USADayName += 'Christmas Day, '  WHERE (CalendarId % 2000) IN (1225)

--=========================== Other named days
-- new years eve
UPDATE dbo.Calendar SET USADayName += 'New Year''s Eve, '  WHERE (CalendarId % 2000) IN (1231)

-- black friday (day after thanksgiving day)
UPDATE dbo.Calendar SET USADayName += 'Black Friday, '  WHERE CalendarId IN (SELECT CalendarId+1 From dbo.Calendar Where USADayName like '%Thanksgiving%')

-- christmas eve
UPDATE dbo.Calendar SET USADayName += 'Christmas Eve, '  WHERE (CalendarId % 2000) IN (1224)

-- boxing day
UPDATE dbo.Calendar SET USADayName += 'Boxing Day, '  WHERE (CalendarId % 2000) IN (1226)

--=========================== Remove trailing comma
UPDATE dbo.Calendar SET USADayName = SubString (USADayName, 1, LEN (USADayName) -1) WHERE LEN (USADayName) > 2

SELECT * FROM dbo.Calendar




这是该命令的输出



我见过数据架构师以各种风格实现的类似结构。

我的问题是:我可以将哪些其他数据仓库/维度样式有用信息添加到此表结构中?


  • Quarter
  • Year
  • 财务/会计年度
  • 财务/会计季
  • 是周末
  • 是工作日
  • 是工作日
  • WeekId(自年初以来的周数)
  • 是本月的最后一天
  • 自 2000 年 1 月 1 日以来的天数(例如自 2000 年 1 月 1 日以来的天数)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据仓库的日历表 的相关文章

  • 如何使用 REST API 导出 SSRS 2017 报告

    我已经设置了 SSRS 2017 我需要使用他们的新 REST API 导出 SSRS 报告 我一直在查看 API 规范here https app swaggerhub com apis microsoft rs SSRS 2 0但我在
  • 如何在SQL Server中创建SYS模式的表?

    可以在 SQL Server 2008 sys 架构中创建表吗 我知道可以将表标记为系统 但不能更改架构 有什么窍门吗 您无法将自己的对象添加到 sys 架构中 无法在 sys 架构中创建用户定义的对象 盖尔 埃里克森 MS SQL Ser
  • 随机分配工作地点,每个地点不得超过指定员工人数

    我正在尝试在位置列表中选择唯一的随机发布 招聘员工位置 所有员工都已发布在这些位置 我正在尝试为他们生成一个新的随机发布位置 其 位置 条件为 员工新 随机位置将不等于他们的家乡 并且随机选择的员工及其职称必须小于或等于 地点 表中的 地点
  • 如何在 T-SQL 中实现 ZIP JOIN?

    假设我有表 Foo Id Color 1 Red 2 Green 3 Blue 4 NULL 和表 Bar Value 1 2 5 我想使用简单的语句创建表 Result 来获取 Id Color Value 1 Red 1 2 Green
  • 在 T-SQL 中解析 JSON 数组

    在我们的 SQL Server 表中 我们有一个存储有字符串数组的 json 对象 我想以编程方式将该字符串拆分为几列 但是 我似乎无法让它发挥作用 或者即使有可能 是否可以在WITH子句中创建多个列 或者在select语句中创建多个列是更
  • 将单个列连接到逗号分隔的列表中[重复]

    这个问题在这里已经有答案了 我已经看到了人们将单个列滚动到逗号分隔列表中的多个示例 但我需要更多 这是我需要的数据和结果的示例 DECLARE SalesPerson table SalesPersonID int SalesPersonN
  • 查询所有表数据并进行索引压缩

    是否有人碰巧拥有一个通用 SQL 语句 可以列出数据库中每个分区的所有表和索引及其当前的压缩设置 Thanks 编辑 这是我尝试查询表所得到的 但我不确定连接是否正确 我得到了重复项 这似乎是由于索引的存在引起的 SELECT t name
  • SQL SERVER 中的排序依据和大小写

    我需要在存储过程中按功能排序 一个值被发布到网络服务 并且基于该值我必须以某种方式对结果进行排序 即 当 ColName 按 ColName 发布订单时 当 ColName2 由 ColName2 发布订单时 我正在研究使用 Case 但出
  • 设置 xact_abort 并尝试一起捕获

    我的 sp 中有一个 try catch 块 其中只有一条插入语句 catch 检查错误代码是否违反 pk 如果是则进行更新 但有时我得到 当前事务无法提交 并且无法支持写入日志文件的操作 回滚事务 在批处理结束时检测到不可提交的事务 事务
  • 如何授予所有表的 REFERENCES 权限

    我必须授予REFERENCES登录权限说sql login 我可以给予资助REFERENCES对单个表的权限 例如 GRANT REFERENCES ON Mytable TO sql login 有什么办法可以授予REFERENCES允许
  • 将大量实体插入 SQL Server 2012 [重复]

    这个问题在这里已经有答案了 我正在进行一个使用 Entity Framework 5 和 SQL Server 2012 的项目 我们需要一次插入大量行 100k 个实体的顺序 基本上 我们有一个物理程序 它输出大量二进制数据 然后我们需要
  • PDO SQLSRV 和 PDO MySQL 在获取 int 或 float 时返回字符串

    当您获取时 PDO MS SQL Server 和 PDO MySQL 都会返回一个字符串数组 即使列的 SQL 类型本应是数字类型 例如 int 或 float 我设法解决了这个问题 但我想了解为什么它们一开始就这样设计 是不是因为PDO
  • SQL服务器事务

    我需要了解sql server事务 我浏览了谷歌上的一些文章 但我什么也没理解 谁能帮我 您可以通过写入显式启动事务BEGIN TRANSACTION 您可以通过运行来结束事务COMMIT TRANSACTION 之前COMMIT运行时 受
  • SQL Server,插入 Excel“链接服务器”时出现“无效列名”错误

    我有一个简单的 Excel 电子表格文档 运行 Office 2013 我使用 Microsoft Office 15 0 Access 数据库引擎 OLE DB 提供程序 将其用作数据库 我可以使用 MS SQL Server Manag
  • Kerberos 双跳

    我们遇到了臭名昭著的 Kerberos 双跳问题 这是一个全新的域 是从以前使用模拟和委派的另一个提供商迁移而来的 我们已将操作系统升级到最新的 SQL 服务器 2017 WPF 应用程序 使用域凭据 gt Web 服务 IIS 10 上的
  • SQL 删除表并重新创建并保留数据

    在我们最初的设计中 我们搞砸了表中的外键约束 现在表已充满数据 我们无法在不删除表中所有记录的情况下更改它 我能想到的唯一解决方案是创建一个备份表并将所有记录放在那里 然后删除所有记录 更改表并开始将它们添加回来 还有其他 更好 的想法吗
  • 在 Sql Server 中转换为日期时间 MM/dd/yyyy HH:mm:ss

    如何将给定的日期格式转换为MM dd yyyy HH mm ss 我尝试了下面这个但没有实现 谁能帮我 SELECT CONVERT VARCHAR 20 GETDATE 120 SQL Server 2005及以上版本支持 SELECT
  • 单独的逗号分隔值并存储在sql server的表中

    我有一个存储过程 它将逗号分隔的值作为输入 我需要将其分开并需要将其作为单独的行存储在表中 令 SP 的输入为 Rule ID ListType ID Values 1 2 319 400 521 8465 2013 我需要将它存储在一个名
  • 临时表是线程安全的吗?

    我正在使用 SQL Server 2000 它的许多存储过程广泛使用临时表 数据库的流量很大 我担心创建和删除临时表的线程安全性 假设我有一个存储过程 它创建了一些临时表 它甚至可以将临时表连接到其他临时表等 并且还可以说两个用户同时执行存
  • SQL 国家字符 (NCHAR) 数据类型的真正用途是什么?

    也CHAR CHARACTER and VARCHAR CHARACTER VARYING SQL 提供了NCHAR NATIONAL CHARACTER and NVARCHAR NATIONAL CHARACTER VARYING 类型

随机推荐

  • 最大填充袋子的算法(这不是背包0/1)

    我正在处理一些任务 需要我解决以下算法问题 You Have collection of items their weights w1 w2 wn And You have a bag which weight is W It is Nee
  • 将值从一个脚本返回到另一脚本

    我有以下脚本将 顺序 运行目录中的每个脚本 import os directory for dirpath dirnames filenames in os walk path to scripts for filename in f fo
  • 不使用 Invoke-Expression 扩展字符串

    想象一下下面的代码 Script Start WelcomeMessage Hello UserName today is Date DayOfWeek 100 lines of other functions and what not f
  • MATLAB/Octave:从图像中切出很多圆圈

    我有一个矩阵 图像 和有关圆圈内有趣部分的信息 给出中心坐标和半径 我想剪掉所有的圆 矩阵的一部分 以便对每个圆进行更多计算 或者至少我想要一个带有所有圆圈的位掩码 我使用 Octave 但也可以使用 MATLAB 但由于许可证问题 这会很
  • 验证失败,但无法在 DataGridView 中删除

    这是我的 DataGridView 的 RowValidation 函数 DataGridViewRow row viewApplications Rows e RowIndex if row Cells colApplyTo Index
  • 如何从两个 Openshift 应用程序访问 MongoDB 数据库?

    我希望能够从 2 个 Openshift 应用程序访问我的 MongoDB 数据库 一个应用程序是通过浏览器的交互式数据库维护应用程序 另一个是通过 Openshift 应用程序在移动设备上运行的主要 Web 应用程序 正如我在 Opens
  • 通过 Java lib Apache Commons 上传文件的简明示例

    编辑 我已经删除了我的复杂且严重畸形的问题 这样它就不会影响下面非常简洁和正确的答案 考虑到找到一个在线示例来完成这项极其常见的任务非常困难 令人惊讶 我希望 Yoni 的回答能得到更多支持 所以 简而言之 这个问题 如何使用 Apache
  • Firebase 已获得 FedRAMP 授权?

    我使用 Firebase 作为后端 我看到谷歌服务已获得FedRAMP授权 并且firebase已与谷歌云集成使用 那么firebase也获得了FedRAMP的授权吗 如果没有 有什么办法可以在firebase中获得FedRAMP授权吗 T
  • 使用 PHPExcel 从 Excel 读取数字时出现问题

    我正在尝试使用 PHPExcel 从 Excelsheet 中读取数字 我读取数据的代码 objReader PHPExcel IOFactory createReaderForFile upload file objReader PHPE
  • 带原始数据的 Volley 请求

    在我的应用程序中 我必须使用 JSON req param 发送 POST 请求 我尝试使用 Postman Rest Client 创建请求 它工作正常 但无法使用下面的代码 在作为原始数据发送的 Postman req 参数中 但我不确
  • R XML 解析网址

    我正在尝试下载天气数据 类似于此处提出的问题 如何将XML解析为R数据帧但是当我运行示例中的第一行时 我收到 错误 1 无法加载 HTTP 资源 我已检查该 URL 是否有效 这是我指的行 data lt xmlParse http for
  • 如何确定目录中的任何文件是否已更改

    Chef 有没有办法确定它是否更改了给定目录中的任何文件 如果conf d 目录中的任何设置被更新 我想重新启动服务器进程 我确信可以在每次厨师客户端运行时将 md5sum 列表写入文件 并将当前迭代与之前的迭代进行比较 但这是解决常见场景
  • 错误 DEP0001:意外错误:-2147009287 部署 Windows Phone Universal 10

    当我尝试将应用程序部署到 Windows Phone 10 时 出现以下错误 错误 2147009287 来自 Visual Studio 2015 社区 我该如何解决这个问题 正如 Jay Zuo 在他的评论中所说 通过链接 解决此问题的
  • 使用 Gradle 编译项目时 IntelliJ 到底在做什么?

    IntelliJ IDEA 2016 3 添加了将构建 运行委托给 Gradle 的功能 很明显 当 Gradle 上有委托选项时 Gradle 就会执行所有操作 我的问题是 当此选项关闭时 IntelliJ 到底在做什么 我问这个问题是因
  • 将 xls 文件从 url 下载到数据框(Rcurl)中?

    我正在尝试将以下网址下载到 R 数据框中 http www fantasypros com nfl rankings qb php export xls 这是公共页面上的 导出 链接 http www fantasypros com nfl
  • 使用 HTML 或 JavaScript 在 WhatsApp 网页版上发送消息

    我想通过 Whatsapp 网络发送消息 我正在使用以下代码 但它不起作用 https wa me text urlencodedtext 我无法查看联系人列表来发送此编码消息 我参考了 WhatsApp com如何使用点击聊天 尝试更改域
  • SQL - 加载数据内文件 - UTF8 问题

    我很少将大型数据库导出到 txt 每个大约 5GB 所以我发现我可以轻松导入它 将数据本地 INFILE path pet txt 加载到表 pet 它工作得很好 但我在那里遇到 UTF 8 的问题 因为有些文本显示为 PODB H Z L
  • F# 中的通用类型注释

    我收到以下错误 错误 2 值限制 价值 gbmLikelihood 已被推断为具有泛型类型val gbmLikelihood float gt a gt float gt float when a gt seq
  • 将 Excel UDF 放入 Worksheet 对象中(而不是放在模块中)

    我怀疑答案是 不可能 但是询问这个优秀的社区总没有坏处 我有一个 Excel 2013 UDF 用户定义函数 它对于某个工作表来说是唯一的 目前 我将此 UDF 放在包含工作簿的 模块 中 但我想做的是将 UDF 代码放置在 工作表对象 中
  • 数据仓库的日历表

    对于我的数据仓库 我正在创建一个日历表 如下所示 SET NOCOUNT ON DROP Table dbo Calendar GO Create Table dbo Calendar CalendarId Integer NOT NULL