开篇介绍

在 SSIS 中操作文件的输入和输出是非常方便的,这个例子讲解一个最简单的需求:比如每天从数据库中查询一批数据要输出到文件,每天产生一个文件,那么文件的名称按照"文件名+日期"的格式加以区别,比如 Employee20131225.txt 。

测试案例

我的测试数据非常简单,就是一个查询语句,要将这些查出来的数据输出到文件并使用逗号分隔,每个文件根据时间加以区别。

SELECT EmployeeKey,
ParentEmployeeKey,
EmployeeNationalIDAlternateKey,
FirstName + ' '+ LastName AS FullName,
Title
FROM AdventureWorksDW2012.dbo.DimEmployee

新建一个 SSIS Package 并创建一个数据流,在数据流中使用上面的 SQL 查询语句创建一个数据源表,并且注意最下方先创建两个变量。一个变量表示输出的目录,一个变量表示输出的文件名称。在我之前的项目中,还包括输出的服务器地址,目录,分类然后再是输入的服务器地址,目录分类和文件名等等,这个例子只是简单演示。

新建一个平面文件输出 Flat File Destination 这时编辑 FF_DST_Employee 会提示创建文件连接管理器。

新建文件连接管理器, Overwrite data in the file 是指如果同名文件将覆盖,这个选项很有用,因为有的场景需要你追写文件。

Delimited - 逗号分隔,这个格式最为方便,无论是加载还是输出,格式都是非常方便管理和配置的。当然也有的需要输出成 Fixed width 定长,那么就需要为每一个输出列指定输出的宽度。

定义好连接管理器的名称,并且在 File Name 那里浏览到一个目录并填写一个文件名称,这个文件不需要存在,因为在输出的时候会自动创建。

文件输出是逗号分隔,连格式转换都省略掉了,不用管。

Mapping 是数据源和连接管理器的 Data Mapping ,由于连接管理器是根据上游数据源创建的,所以格式都一样。

保存并运行 Package ,执行成功。

文件已经输出了,数据和格式都没有问题。

这个时候就要开始处理文件的命名了,选择好文件连接管理器并右键属性,找到 Expressions - 这里面提供了大量可配置的选项。

ConnectionString 就是我们要编辑的对象,它指定了平面连接管理器的连接到输出文件的路径。

将我们自定义的两个变量拼接成字符串看看,路径斜杠用 "\\" 表示,点击计算表达式看看实际的路径。也就是说平面连接管理器的路径将由这两个变量来决定了,变量是什么值,路径便是什么。 在这个例子中,其实可以完全不需要使用到这两个变量,但是这是我们处理文件时通常所采用的一种规范的做法,原因就是我们输出的文件地址可能会发生改变,所以这些都是最终需要配置的。

文件名根据时间来计算,我使用到了一些小函数来进行格式转换,这个文字的正下方有很多文件夹 (Mathematical Functions. String Functions),提供了很多的小函数。

@[User::VarOutputFolder]+"\\"+ @[User::VarOutputFileName]+(DT_STR,,)DATEPART( "yyyy" , @[System::StartTime] ) +

RIGHT("" + (DT_STR,,)DATEPART( "mm" ,@[System::StartTime] ), ) +

RIGHT("" + (DT_STR,,)DATEPART( "dd" , @[System::StartTime] ), ) +".txt"

点击计算就能看到计算出来的地址是根据当前运行时间决定的,当然最后的路径不正确。那是因为我们的文件名变量是 Employee.txt,因此最后文件名变成了以 Employee.txt20131224.txt 命名的方式。

要改的话非常容易,将文件名称的变量改成 Employee并保存,然后重新打开连接管理器的表达式看看输出的文件名称就是正确的了。

保存并执行 Package,并将当前系统时间修改为明天再执行。

最终就看到两个文件输出了,名称是根据今天的日期和明天的日期决定的。

更多 BI 文章请参看 BI 系列随笔列表 (SSIS, SSRS, SSAS, MDX, SQL Server) 如果觉得这篇文章看了对您有帮助,请帮助推荐,以方便他人在 BIWORK 博客推荐栏中快速看到这些文章。

微软BI 之SSIS 系列 - 在 SSIS 输出平面文件时根据运行日期生成不同的文件名称的更多相关文章

  1. 微软BI 之SSIS 系列 - 在 SSIS 中将指定目录下的所有文件分类输出到不同文件夹

    开篇介绍 比如有这样的一个需求,旧的一个业务系统通常将产出的文件输出到同一个指定的目录下的不同子目录,输出的文件类型有 XML,EXCEL, TXT 这些不同后缀的文件.现在需要在 SSIS 中将它们 ...

  2. 微软BI 之SSIS 系列 - 在 SSIS 中导入 ACCESS 数据库中的数据

    开篇介绍 来自 天善学院 一个学员的问题,如何在 SSIS 中导入 ACCESS 数据表中的数据. 在 SSIS 中导入 ACCESS 数据库数据 ACCESS 实际上是一个轻量级的桌面数据库,直接使 ...

  3. 微软BI 之SSIS 系列 - 在 SSIS 中使用 Web Service 以及 XML 解析

    开篇介绍 Web Service 的用途非常广几乎无处不在,像各大门户网站上的天气预报使用到的第三方 Web Service API,像手机客户端和服务器端的交互等都可以通过事先设计好的 Web Se ...

  4. 微软BI 之SSIS 系列 - 利用 SSIS 模板快速开发 SSIS Package

    开篇介绍 在做 ETL 项目的时候,往往很多 Package 的开发都是基于相同的模型和流程.比如在 Package 开始运行时需要向 Process Log 表中插入记录,在 Package 运行结 ...

  5. 微软BI 之SSRS 系列 - 实现 Excel 中图表结合的报表设计

    来自群里面讨论的一个问题,EXCEL 中有类似于这样的图形,上面是 Chart, Chart X轴上的值正好就是下方 Table 的列头,这个在 SSRS 中应该如何实现?   SSRS 2008.2 ...

  6. 微软BI 之SSRS 系列 - 报表邮件订阅中 SMTP 服务器匿名访问与 Windows验证, 以及如何成功订阅报表的实例

    这篇文章源于在上一篇博文中有园友提出订阅 SSRS 报表时的一个问题,  于是就好好总结了一下,把有关 SSRS 报表订阅的要点和容易出现问题的地方写出来,希望对大家有所帮助! 参看上一篇博文 - S ...

  7. 微软BI 之SSAS 系列 - 自定义的日期维度设计

    SSAS Date 维度基本上在所有的 Cube 设计过程中都存在,很难见到没有时间维度的 OLAP 数据库.但是根据不同的项目需求, Date 维度的设计可能不大相同,所以在设计时间维度的时候需要搞 ...

  8. 微软BI 之SSRS 系列 - 如何实现报表导航 Navigation 和钻取 Drill Down 的效果

    开篇介绍 如何在 SSRS 报表中实现标签导航 Navigation 和向下钻取 Drill Down的效果? 如同下面这个例子一样 - 在页面第一次加载的时候,默认显示是全部地区的销售总和情况,上面 ...

  9. 微软BI 之SSRS 系列 - 巧用 RunningValue 函数在分组中排序并设置 RANK 排名

    开篇介绍 经常有像类似于这样的排序需求,以及设置分组下的排序序号.比如此图中要求城市 City 在省份下按照 Internet Sales Amount 总销售额进行排序,并标识在各省份下的排名. 实 ...

随机推荐

  1. 【BZOJ4773】负环 [SPFA][二分]

    负环 Time Limit: 100 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description 在忘记考虑负环之后,黎瑟的算法又出错 ...

  2. 在Ubuntu下解决 adb devices :???????????? no permissions 方法

    http://sdvdxl.blog.51cto.com/3845763/1126539 MODE表示读取模式,0666表示任何人都可以访问. 最后 adb devices查看

  3. 百度未授权使用地图API

    百度地图管理员的回复:这是KEY服务升级的问题, 给您造成的不便,非常抱歉.但我们昨日已修复,你可以再审核一番.若不可以,请提供一下您的系统ak,邮箱或qq发送至(wangwenhai@baidu.c ...

  4. 决策树分类算法及python代码实现案例

    决策树分类算法 1.概述 决策树(decision tree)——是一种被广泛使用的分类算法. 相比贝叶斯算法,决策树的优势在于构造过程不需要任何领域知识或参数设置 在实际应用中,对于探测式的知识发现 ...

  5. 7-6 Bandwidth UVA140

    没有清空向量导致debug了好久 这题难以下手  不知道怎么dfs 原来是用排序函数. letter[n]=i; id[i]=n++; 用来储存与设置标记十分巧妙 for(;;) { while(s[ ...

  6. 【Java】 剑指offer(28) 对称的二叉树

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它 ...

  7. python中使用XPath笔记

    XPath在Python的爬虫学习中,起着举足轻重的地位,对比正则表达式 re两者可以完成同样的工作,实现的功能也差不多,但XPath明显比re具有优势,在网页分析上使re退居二线. XPath介绍: ...

  8. EF连接字符串小问题记录

    1.EFDbContext”不包含必需的 providerName 特性: <connectionStrings> <add name="EFDbContext" ...

  9. 三篇文章带你极速入门php(一)之语法

    本文适合阅读用户 有其他语言基础的童鞋 看完w3cschool语法教程来回顾一下的童鞋(传送门,想全面看一下php语法推荐这里) 毫无基础然而天资聪慧颇有慧根(不要左顾右看说的就是你,老夫这里有一本& ...

  10. zip&ftp命令

    zip: C:\Users\IBM_ADMIN>zip -09r Oracle.zip ./Oracle/* C:\Users\IBM_ADMIN>ftp ftp> open adm ...