【问题标题】:Access - Pivoting/Combining Fields for AnalysisAccess - 透视/组合字段以进行分析
【发布时间】: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


【解决方案1】:

查看联合查询 - 当我需要将矩阵数据转换为行时,我会使用该查询。类似的东西

Select location, "Jan" as month, [jan] as [submission date] from [data table]

union all select location, "Feb", feb from [data table]

union all select location, "Mar", mar from [data table]
....

一旦你喜欢你所得到的,你可以在其他查​​询中使用这个联合,如果你需要为其他目的创建一个规范化的表,包括一个 Make table 查询。

【讨论】:

  • 看,这正是我在完成初步研究后所尝试的。尝试运行查询后,它提示我输入参数值,并且根据我过去的一点点访问经验,当我忽略查询中的某些内容或构建的方式时,我通常会遇到这种情况关系。对此有什么想法吗?
  • 请发布您尝试过的内容。如果它要求一个参数值,你可能拼错了一个字段名或打错了一个字段名,但如果没有看到代码我就无法判断。如果表格结构与您在上面发布的内容不完全一样,请包括表格结构。另外,它要求的参数是什么?这应该可以为您提供有关查询错误的一个很好的线索。
  • 就是这样!我不小心在其中一个字段名称中使用了句点而不是下划线。感谢您的帮助!
  • 很高兴它成功了。如果这有帮助,你能接受答案吗?谢谢
  • 使用 Tableau 内置的 Union 功能通常比编写自定义 SQL 更好。这允许 Tableau 优化它发送到源的 SQL。如果您编写自定义 SQL,Tableau 无法对其进行优化,而是将您的 SQL 用作子查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多