SSIS数据转换-行到列
我有一个目前ssis项目的情况。我有一个巨大的客户数据excel。这两列具有客户数据的标识符。像下面这样。其余列具有实际数据SSIS数据转换-行到列,ssis,script-component,Ssis,Script Component,我有一个目前ssis项目的情况。我有一个巨大的客户数据excel。这两列具有客户数据的标识符。像下面这样。其余列具有实际数据 COLUMN A | COLUMN B -------------------- NAME | XYZ ADDRESS1 | 1 STREET ADDRESS2 | APT A ZIP | 12345 挑战在于将值读入变量或列。这是执行验证所必需的。转换后,我需要以下格式的数据 NAME | ADDRESS1 | ADDRESS2 | ZIP
COLUMN A | COLUMN B
--------------------
NAME | XYZ
ADDRESS1 | 1 STREET
ADDRESS2 | APT A
ZIP | 12345
挑战在于将值读入变量或列。这是执行验证所必需的。转换后,我需要以下格式的数据
NAME | ADDRESS1 | ADDRESS2 | ZIP
--------------------------------------
XYZ | 1 STREET | APT A | 12345
我可能无法使用Pivot转换,因为此数据是使用动态列的脚本组件读取的。有谁能为我提供一个解决方案吗?
谢谢你的时间。没有现成的东西能帮你。您面临的挑战是键值数据具有隐式分组。也就是说,每次看到
Name
键时,接下来的N行都会关联回起始行
因为您已经从脚本任务中读取了数据,所以请做有意义的事情,不要在KVP中输出,而是将输出缓冲区重新定义为Name、Address1、Address2、Zip,并具有适当的长度。然后,在脚本任务中,在到达文件末尾或遇到名称行之前,不要实际调用
AddRow()
方法 使用脚本组件。代码如下所示。假设:没有缺少的字段值。这段代码将帮助您开始。之后,您需要根据您的特殊要求对其进行调整
public class ScriptMain : UserComponent
{
string name = string.Empty;
string address1 = string.Empty;
string address2 = string.Empty;
string zip = string.Empty;
public override void PreExecute()
{
base.PreExecute();
}
public override void PostExecute()
{
base.PostExecute();
}
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
if (Row.Key.ToUpper().Equals("NAME"))
{
name = Row.Value;
}
else if (Row.Key.ToUpper().Equals("ADDRESS1"))
{
address1 = Row.Value;
}
else if (Row.Key.ToUpper().Equals("ADDRESS2"))
{
address2 = Row.Value;
}
else if (Row.Key.ToUpper().Equals("ZIP"))
{
zip = Row.Value;
OutputRowBuffer.AddRow();
OutputRowBuffer.Name = name;
OutputRowBuffer.Address1 = address1;
OutputRowBuffer.Address2 = address2;
OutputRowBuffer.Zip = zip;
}
}
}