我为此疯狂... 我有一个参数化查询从数据源中提取一些信息,但首先,我通过OLE DB Source获取我需要进行查询的那些参数,我需要进行查询并保存参数和结果y我的事实表
更多解释,我有项目和日期,我的维度,我需要一个指标,我的事实,一个查询的结果(我有在sql服务器中运行的查询),它具有项目和日期的参数,并返回指标。 我的ETL想法是这样的:Ole DB Source - > Ole DB Command(因为它支持参数化查询) - > Ole DB目的地
但我发现,OLE DB命令没有输出,我一直在尝试其他方式,但我不知道如何,请帮助! 安贝尔
答案 0 :(得分:0)
如果您的第一个OLE DB只返回一个Project和一个Date,需要传递给第二个查询(您的OLE DB命令),那么我建议:
创建两个变量:v_project,v_date
在控制流中使用执行SQL任务 选择myproject,mydate FROM A. 在执行SQL任务中: - 常规选项卡,将'ResultSet'设置为'Single Row' - 结果设置选项卡将myproject发送到v_project并将mydate发送到v_date
将执行SQL任务连接到数据流任务,因此它将首先运行并填充变量。
在您的数据流任务中: 从Ole DB Source开始 写下您的查询以接受参数 SELECT * FROM B WHERE project =?和projectdate =? 在“参数”中设置每个参数以使用您之前创建的变量。
6继续执行数据流任务,直到目的地为止。
注意:由于问题不具体,所以这个答案假设您只想传入1个项目和1个日期。如果您需要传递多个项目/日期组合,那么还有其他答案。当我需要为ETL项目提取最后一个加载日期时,我一直使用这种方法。
答案 1 :(得分:0)
首先,我使用了一个容器,其数据流保存在阶段表中,所有项目和日期组合,以及每行的当前行等于1,
其次,我为第一行做了当前等于1的程序,我使用Execute Sql Task Component,使用变量作为CognitiveBi建议。
第三,我将我的sql任务包含在一个循环容器中,并按照此处所说的配置http://www.sqlis.com/post/For-Loop-Container-Samples.aspx,为我的项目循环,我的上一个sql任务,将当前行放到o,所以下一次迭代,继续下一行。
最后,我创建了另一个容器来提取舞台表的数据,最后我删除了舞台表, 它找到了我的工作,感谢我带来解决方案的想法, 安娜贝尔