【问题标题】:SSIS dynamic excel column headerSSIS动态excel列标题
【发布时间】:2012-06-20 09:30:07
【问题描述】:

我在使用 SSIS 时遇到问题,希望有人能帮助我。我是这个 Microsoft 软件的新手,我被要求从一个包含 13 周的 Excel 计划文件中导入数据。所以数据在Excel文件中显示如下:

Person id | Person age| School activity | Activity leader| 18-06-2012 | 25-06-2012 | ..(more weeks)

1452      | 14        | Painting        | John Smith     | 2          | 6          | ...

其中 2 和 6 代表每周花在此活动上的小时数。

虽然,人员 ID、人员年龄、学校活动和活动负责人在此 Excel 文件中是静态列标题,但在文件之间更改时是周列标题。

因此,我不知道如何将这样的数据文件导入我的数据库,因为我遇到了从一个文件到另一个文件的映射问题。

我希望将数据作为每个星期列的单独行放入数据库中,因此我使用 unpivot 转换来实现这一点。我想要的是无论列标题如何都能够导入数据。

【问题讨论】:

  • 每个文件的列数总是相同还是不同?
  • 是的,有。只是周列发生了变化。本周我有 13 周,从 2012 年 6 月 18 日到 2012 年 9 月 10 日。所以下周我将有另一个具有相同列的列,但周列将从 25-06-2012 到 17-09-2012。
  • 是否可以将数据转储为纯 csv 文件?平面文件导入器并不真正关心列标题是什么,因此,如果您可以引入格式一致的文件(例如,13 列,逗号分隔,带引号的字符串),您可以简单地跳过标题行,然后对数据本身执行任何您想要的操作。
  • 另外,你能为我们定义模式映射吗?换句话说,您在 Excel 中有这些列......您的数据库中对应的列是什么/数据库中的数据是如何表示的?
  • 数据库中的列如下:人员id->人员id人员年龄->人员年龄学校活动->学校活动活动负责人->活动负责人18-06-2012,25-06 -2012,... -> 周标签下方的周行 -> 我计划通过非透视转换获取这些列的小时数。

标签: excel dynamic import header ssis


【解决方案1】:

如果数据可以以 CSV 格式提供,您可以使用平面文件源,然后跳过标题行,只要始终有相同数量的列具有相同、可预测的格式。

您在讨论中提到您将使用 unpivot 转换将数据转换为单独的行,因此您知道如何完成其​​余的工作。

【讨论】:

    【解决方案2】:

    我最近不得不解决这个问题。我发现的最大问题是带有 Excel 的 SSIS 需要一组静态列。

    所以我获取了一组文件并为每个文件构建了一个类似的数据流(仅在列不同的地方有所不同)。然后,我使用文件枚举器放置一个控制流来获取所有文件,并根据文件名来决定要使用的数据流。

    它并不优雅 - 但效果很好。

    【讨论】:

    • 嗯,问题是这样做时,每次我有一个新的计划文件时,我都必须创建一个数据流。有没有办法自动做到这一点?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多