【发布时间】:2017-02-22 02:03:06
【问题描述】:
我是一位经验丰富的 Excel VBA 开发人员,我在 Access 中整合了一个数据库来构建我的数据并允许将其正确地输入到分析工具 (Tableau) 中。通过 Excel VBA 从多个数据源创建的平面文件最终不够灵活,无法用于强大的分析,因此我在 Access 中构建结构并编写查询来驱动查看数据的各种方式。我是 SQL 的新手,正在尝试学习以“正确”的方式使用它,而不是求助于 VBA 来做所有事情。
我的问题涉及将具有许多字段的多条记录组合成具有较少字段的大量记录。我正在记录多个位置执行文件提交的日期,并且他们必须每月提交一个文件。目前数据是这样输入数据库的:
Location | Jan | Feb | Mar | Apr | etc |
1 | [Submission Date] | ... | | | |
2 | ... | | | | |
对于分析来说,这样做似乎会有所帮助:
Location | Month | Submission Date
1 | Jan | [Submission Date]
1 | Feb | ...
如何通过查询重构数据,或者这是否是完成此任务的最佳方式?尽管我可以自己在 VBA 中轻松完成此操作,但我正在尝试正确学习何时使用 SQL 以及何时使用 VBA 来完成任务。
提前感谢大家,如果有人想分享一些可靠的资源来构建查询、重组数据或何时使用 VBA 与 SQL,我会全力以赴。到目前为止,SQL 对我来说是一件很难进行一次性研究的事情。
【问题讨论】:
-
您通常不需要您的月份字段,因为大概这是提交日期的一部分?您可以动态提取该日期和日期的任何其他部分,因此无需存储它。
-
如果您的存储每月有一个列,我认为数据库设计存在缺陷,您应该考虑将其迁移到规范化模式......事实上,这个月看起来会是日期的属性,所以我认为不需要单独/根本存储它。您的源数据被非规范化的事实并不是将其加载到您的数据库中的借口。将数据在加载到表中之前对其进行反透视;到了查询时间,已经太晚了,你已经受到了打击(在存储和性能方面)。
-
@Minty,实际提交日期可能会有很大差异。我尝试创建的“月份”字段代表文档,而不是提交日期。感谢您分享您的想法。
-
@DonGeorge 修复坏数据是 ETL(提取-转换-加载)过程的工作,该过程以一种形式获取数据并将该数据存储在另一种(清理/规范化)形式中。我一直这样做,这恰好是我的工作。存储坏数据并在查询时规避它最终会在后端咬你,尤其是在资源有限和最大容量的桌面数据库上(让我知道为什么会选择 Access 而不是 SQL Server Express,但是那是另一个故事)。 “哦,但这只是几行,有什么关系”你会说 - “着名的遗言”,我会回复。
-
@Mat's 和 Comintern - 我认为我们的共识比上面听起来的要多。我通常将数据转换 (ETL) 与分析分开 - 只是我在同一个 Access DB 中执行它们。我导入未经编辑的源数据(维护审计跟踪)。我有一个或多个查询将数据转换为有用的东西。如果有多个步骤,这些步骤通常存储在一个宏中 - 您提到的“存储过程”。然后我对好的数据进行分析。 (续)
标签: sql vba ms-access tableau-api