Excel SSI避免手动更改派生列表达式
我有一个SSIS包,需要在一周的第一天运行,源文件来自excel文件,目标是SQL表Excel SSI避免手动更改派生列表达式,excel,ssis,ssis-2008,Excel,Ssis,Ssis 2008,我有一个SSIS包,需要在一周的第一天运行,源文件来自excel文件,目标是SQL表 当前的过程是手动将excel文件的null值替换为0(这需要很多时间),因此我创建了一个包,目前正在使用派生列表达式“(Column1==”?0:Column1)”,但是excel文件列并不总是与派生列表达式相同,因此每次运行包时,我还必须编辑派生列表达式。我正在寻找一种更好的方法来做这件事,并避免手动操作。提前感谢。在SSI中根本没有简单的内置方法来处理动态列名,更不用说担心派生列转换中的表达式了 使用BiM
当前的过程是手动将excel文件的null值替换为0(这需要很多时间),因此我创建了一个包,目前正在使用派生列表达式“(Column1==”?0:Column1)”,但是excel文件列并不总是与派生列表达式相同,因此每次运行包时,我还必须编辑派生列表达式。我正在寻找一种更好的方法来做这件事,并避免手动操作。提前感谢。在SSI中根本没有简单的内置方法来处理动态列名,更不用说担心派生列转换中的表达式了 使用BiML动态创建SSIS包,该包将基于文件的当前列名导入文件
BiML教程
开始学习BiML,祝你好运。如果不能让每周创建Excel文件的人将五列命名为“周一”、“周二”、“周三”、“周四”和“周五”,而不是“20151005”、“20151006”、“20151007”、“20151008”和“20151009”(例如上周申请的),则可通过以下步骤完成
步骤:
declare @date as datetime
set @date = dateadd(week, datediff(week, 0, getdate()-7), 0)
select cast(year(@date) as char(4)) + right('00' + convert(varchar(2), month(@date)), 2) + right('00' + convert(varchar(2), day(@date)), 2)
希望这能有所帮助。如果我理解正确,一周的派生列可能基于Column1,下一周可能是Column2、Column3或其他列?如果是这种情况,您如何知道从一周到下一周应用哪一列?与源Excel工作表中的其他列相比,此列有什么独特之处?我已编辑excel列包含上周的日期,因此第1列是周一(20151005)的日期,第2列(20151006)的日期,等等…然后在目标表中,列是星期一、星期二,直到星期五抱歉,我没有看到任何其他信息。此外,您是否必须每周手动打开派生列任务以更改列源?工作表包含一周中每个工作日(星期一到星期五)的列第1列=星期一,第2列=星期二,第3列=星期三,第4列=星期四,第5列=星期五。每列都包含前一周当天的日期。鉴于此,您将应用什么规则来确定将五列中的哪一列用于派生列?跳过列标题选项?第1列始终是星期一忽略第1行中的值?我应该将SQL脚本放在哪里?填充变量的SQL脚本只需要放在步骤之前的任何位置,该步骤在派生列中应用相同的变量。