在仓库中存储问卷

时间:2016-05-13 06:33:05

标签: ssis sql-server-2014 data-warehouse

我目前正在使用SQL Server 2014实现数据仓库,我正在努力维护维度表的布局,以及更多的数据提取。我有一个Excel文件,格式如下:

+--------+---------+------------+------------+------------+---+-------------+
| Region | Country |  Location  | Question 1 | Question 2 | … | Question 97 |
+--------+---------+------------+------------+------------+---+-------------+
| Africa | Algeria | Location 1 | Yes        | Yes        | … | No          |
| Africa | Algeria | Location 2 | No         | Yes        | … | Yes         |
+--------+---------+------------+------------+------------+---+-------------+

还有一些关于何时回答问题的属性。如点所示,有超过3个问题,实际上有97个问题。 目前我已将excel文件导入到我的原始表中,该原始表表示我的准备区域(它具有与excel文件完全相同的格式,第一行作为标题)。现在,当我想把数据放到舞台上时,我在布局上有点挣扎。所以我考虑了布局,因为我的老板告诉我将来可能会改变问题,我想出了以下两个表:

+------------+---------------------+
| DIM_Questionnaire                |
+------------+---------------------+
| PK         | SUR_QuestionnaireID |
| FK         | LocationID          |
| FK         | TimeKey             |
+------------+---------------------+

+--------------+-----------------+
| DIM_Question                   |
+--------------+-----------------+
| PK           | SUR_QuestionID  |
| FK           | QuestionnaireID |
|              | Question        |
|              | Answer          |
|              | Category        |
+--------------+-----------------+

然后将调查添加到事实表中。您如何看待仓库中的此解决方案?此外,我如何能够将原始表中的列名作为问题表中的值?

3 个答案:

答案 0 :(得分:1)

我认为你已经找到了一个很好的解决方案。正如您所提到的,第一个布局并不是很好,因为每次调查的问题数量可能会发生很多变化,例如,如果您有97个问题列,如果您要求保留100个问题,则必须更改表格结构体。如果问题大约是20,你会不必要地浪费很多列。找出结构的好工作。

你的结构对我来说很好看。我想向你澄清一件事情吗? DIM_Question表中的答案是正确答案吗?用户提供的答案应该转到另一个包含DIM_Question SK的答案表,以便您可以随时将答案与问题维度上的确切问题相关联。

还有一件事,为什么要将调查表添加为事实表?我认为你的措施是"答案"对?例如,如果有人要求"他们中有多少人正确回答了这个问题?","人们为这个问题提供了什么类型的答案?"等我认为你应该仔细检查。如果你遇到困难,只需提供一些实际要求的点击,这样我们就可以搞清楚了。

最后是你的下一个问题"我怎样才能将raw-table中的列名作为Question表中的值? "我想你可以从下面的查询中获取表列名称

SELECT *
FROM <database_name>.INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'Dim_Table'

希望这有帮助。

答案 1 :(得分:0)

如果您的目标是使用SSIS在行中转换列,则可以使用“Unpivot”任务。

请参阅此article将以简单的方式描述如何使用Pivot和Unpivot转换组件。

答案 2 :(得分:0)

您的术语意味着什么并不完全清楚。似乎有多个调查(回收问卷的集合,每个调查问卷都有相同的问题)。但是,你的调查维度肯定应该有一个问卷ID的FK吗?

您的Dim Question的结构与此不一致。根据FK to QuestionnaireID,调查问卷似乎是“班级”(向多人发送的一组问题)。那么什么是“班级的实例”(一组问题的具体副本,由一个人回答)?

我认为你的事实应该是答案,维度问题,(可能)调查,问卷调查(可能是维度问题的属性)。但我不能完全确定这一点(除了答案绝对是事实),因为我不确定你是如何使用这些术语的。