请教一个SSIS数据清洗的问题

solar_star0829 2010-09-15 10:32:47
我刚接触BI,使用SSIS做数据整合的时候,碰到了这样一个问题,请大家给予指导:

财务系统每个年度都会建一个费用字典表,基本上每个年度的表中的数据差异不大,但是存在一些不一致的数据,例如

年度 科目编号 科目名称
2008 00001 会议费
2009 00001 调研费
2009 00002 会议费

可以看出,两个年度中,会议费的科目编号是不一样的。
我现在要做跨年度的经费统计,所以想出一张统一的费用字典表,通过ETL以上条目可变成如下形式:
00001 会议费
00002 调研费

数据流应该怎么做呢?
...全文
272 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
pxwcypx 2011-05-18
  • 打赏
  • 举报
回复
搞定没有啊
xiaoyucaozhang 2010-12-10
  • 打赏
  • 举报
回复
LZ先生 搞定了没有呢?
[Quote=引用楼主 solar_star0829 的回复:]
[/Quote]
xiaoyucaozhang 2010-12-09
  • 打赏
  • 举报
回复
我遇到了和搂住一样的问题,谁回答对了我加分啊!!!

T1 T2 在数据库中 T3 也在!

要求通过SSIS流

1:T1.a*T2.a 导入到T3.a

2: 通过T1 T2 创建T4 并 把T1.a*T2.a 导入到 T4 !
liaosunny 2010-10-21
  • 打赏
  • 举报
回复
可用分啊可用分.
smallfish0302 2010-09-25
  • 打赏
  • 举报
回复
SSIS中有很多可以写SQL语句的组件,你可以在源数据那里选择SQL查询,然后写脚本取数据。
fpzgm 2010-09-21
  • 打赏
  • 举报
回复
不知道楼主的数据库中的表是什么样具体的形式,还有不知道楼主最终的结果要不要显示科目编号
1:若科目编号,科目名称,和对应的费用数据在一张表里面,就不要用
select 取年(时间),科目编号,科目名称,sum(费用) from table group by 取年(时间)
的格式
直接用
 select 取年(时间),科目名称,sum(费用) from table group by 取年(时间)

因为科目编号是不准的,直接根据科目名称来取数据,然后如果想要显示科目编号,就直接可以给每个
科目名称设一个编号…… (估计这种情况应该不会存在)
2:一般情况下,我估计楼主的表数据为
数据表t1 : 时间,科目编号,费用,……
科目对应表t2: 时间,科目编号,科目名称……
这样的话一种做法是
select 取年(t1.时间),t2.科目名称,sum(t1.费用)from t1,t2 
where 格式(t1.时间)=t2.时间 and t1.科目编号=t2.科目编号 group by 取年(t1.时间)


另一种办法就是在两个表中分别加一个字段,使用联合键来对应,如果只是想得到最终的费用表,不建议用 这种办法,这是一种我研究出的一种解决缓慢变化维的办法(并已实际证明正确)

3:打了不少字了,希望对楼主有所帮助,有什么问题可以加我互相交流学习!!!
fpzgm 2010-09-21
  • 打赏
  • 举报
回复
不知道楼主的数据库中的表是什么样具体的形式,还有不知道楼主最终的结果要不要显示科目编号
1:若科目编号,科目名称,和对应的费用数据在一张表里面,就不要用
select 取年(时间),科目编号,科目名称,sum(费用) from table group by 取年(时间) 的格式
直接用 select 取年(时间),科目名称,sum(费用) from table group by 取年(时间)
因为科目编号是不准的,直接根据科目名称来取数据,然后如果想要显示科目编号,就直接可以给每个
科目名称设一个编号…… (估计这种情况应该不会存在)
2:一般情况下,我估计楼主的表数据为
数据表t1 : 时间,科目编号,费用,……
科目对应表t2: 时间,科目编号,科目名称……
这样的话一种做法是
select 取年(t1.时间),t2.科目名称,sum(t1.费用)from t1,t2
where 格式(t1.时间)=t2.时间 and t1.科目编号=t2.科目编号 group by 取年(t1.时间)

另一种办法就是在两个表中分别加一个字段,使用联合键来对应,如果只是想得到最终的费用表,不建议用 这种办法,这是一种我研究出的一种解决缓慢变化维的办法(并已实际证明正确)

3:打了不少字了,希望对楼主有所帮助,有什么问题可以加我互相交流学习!!!
Me_online 2010-09-16
  • 打赏
  • 举报
回复
首先纠正LZ的一些设计思想吧,不要为了SSIS 而SSIS,SSIS 只是个工具箱而已,里面的组件就像工具,这里面有个最基本的工具叫 Execute SQL, 可以执行绝大多数的SQL 语句,不一定非要用数据流任务。
solar_star0829 2010-09-15
  • 打赏
  • 举报
回复
在哪里写这句话呀?我的意思是在数据流的那个组件中写这句话呢?
华夏小卒 2010-09-15
  • 打赏
  • 举报
回复
;with cte as
(
select 科目编号,科目名称 ,pm=row_number()over(partition by 科目名称 order by getdate())
)
select * from cte where pm=1
solar_star0829 2010-09-15
  • 打赏
  • 举报
回复
补充一句,我用的是SqlServer 2008

700

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧