将数据加载到维度date表中

那么我有一个维度date表,它有两个属性月和年,就像它写在脚本中,月(mois)是我的主键。 和我在同一个月里有不同的一年,就像在源文件中展示的那样。 所以我该怎么做? 把他们全部或我应该使用不同?

我的源文件是Excel加。 我有来自数据库pubs的表销售数据(ord-date)。

PS:我正在使用ssis(visual studio)

这是我的来源date

这是我的来源日期

这是我如何创build我的维度date表,因为我们的教授告诉我们创build它像(不需要的细节)

询问

我知道如何从Excel中导入数据,并分割date。 我只有从我加载到维度表时,我发现一个问题。 我的问题是我有例如2date(仅月和年)05/1995和05/1995,我想加载到我的维度表,但我不能有我的月份作为我的主键。 主键应该是唯一的

  • 您必须添加包含Excel Source – > Script Component – > 2x OLEDB DestinationDataFlow Task
  • 在脚本组件中,您必须添加一个具有2列“ Month和“ Year的新输出Dim Date ,并将“ Synchronous Input属性设置为none

在这里输入图像说明

  • 第一个输出将包含包含其他数据的列,并与input缓冲区同步。
  • 在脚本中,您必须创build一个存储不同月份的列表,每发现一个新月份,它将生成一个Dim Date输出。

你的脚本应该看起来像。

 Dim lstDates As New System.Collections.Generic.List(Of String) Public Overrides Sub Input0Buffer_ProcessInputRow(ByVal Row As Input0Buffer) If Not Row.Date_IsNull Then Dim strMonth As String = Row.Date.ToString("MM/yyyy") If Not lstDates.Contains(strMonth) Then With DimDateBuffer .AddRow() .Month = strMonth .Year = Right(strMonth, 4) End With lstDates.Add(strMonth) End If End If End Sub 

这样你就不会在Dimension表中有重复,如果这个包应该定期运行,你可以添加一个Execute SQL Task ,从数据仓库获取所有维度,并使用Objectvariables将它们加载到脚本组件中创build的列表中

  • 最后,将DimDate输出列映射到第一个OLEDB destination ,将第一个输出列映射到另一个目标