我创建了一个 SSIS 包,它从 SQL 中提取数据并将其加载到 excel 中。我在使这个包动态并将数据加载到多个 excel 文件中时遇到问题。
我首先创建了一个执行 SQL 任务,该任务保存所有带有 SQL 代码的文件名:SELECT FileName FROM Files并且其结果集将存储在一个变量中FileNameObj。然后我创建了一个 Foreach 循环容器并在里面添加了一个数据流任务。
Foreach Loop Container 设置: Foreach ADO Enumerator,ADO Object 源变量 - FileNameObj,变量映射 -FileName和索引 - 0。在数据流任务下,我添加了一个 OLE DB Source 和 Excel Destination 指向文件路径:C:\Test\ABC.xlsx。
这是连接管理器属性:
连接字符串:Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Test\ABC.xlsx;Extended Properties="Excel 12.0;HDR=YES";
延迟验证设置为True
ExcelFilePath是C:\Test\ABC.xlsx
然后我用 PropertyExcelFilePath和 Expression创建了一个表达式:"C:\\Test\\"+ @[User::FileName]+".xlsx"
然后我的ConnectionString更改为:Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Test\.xlsx;Extended Properties="Excel 12.0;HDR=YES";
我已经在 test 文件夹中创建了所有文件模板(所有文件模板相同)。我收到以下错误:
数据流任务 …
将列拆分成行的最佳方法是什么(如矩阵?)示例表:
Name Hours1 Hours2 Hours3
Jon 32 40 30
Ana 40 0 40
Run Code Online (Sandbox Code Playgroud)
结果(不显示0值):
Name Hours
Jon 32
Jon 40
Jon 30
Ana 40
Ana 40
Run Code Online (Sandbox Code Playgroud)
我能想到这样做的一种方法是使用 Union
SELECT
Name,
Hours1
FROM #HOURSTABLE
WHERE Hours1 <> 0
UNION ALL
SELECT
Name,
Hours2
FROM #HOURSTABLE
WHERE Hours2 <> 0
UNION ALL
SELECT
Name,
Hours3
FROM #HOURSTABLE
WHERE Hours3 <> 0
Run Code Online (Sandbox Code Playgroud)
还有其他建议吗?
无论如何,我可以添加一个在执行前显示在报告中的 ssrs 报告描述吗?我用谷歌搜索,大多数人说这是不可能的,但必须有一种方法来调整它,对吗?
sql-server ×3
etl ×1
excel ×1
expression ×1
matrix ×1
sql ×1
ssis ×1
ssrs-2008 ×1
ssrs-2008-r2 ×1