微软BI 之SSIS 系列 - 在 SSIS 输出平面文件时根据运行日期生成不同的文件名称
开篇介绍
在 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 输出平面文件时根据运行日期生成不同的文件名称的更多相关文章
- 微软BI 之SSIS 系列 - 在 SSIS 中将指定目录下的所有文件分类输出到不同文件夹
开篇介绍 比如有这样的一个需求,旧的一个业务系统通常将产出的文件输出到同一个指定的目录下的不同子目录,输出的文件类型有 XML,EXCEL, TXT 这些不同后缀的文件.现在需要在 SSIS 中将它们 ...
- 微软BI 之SSIS 系列 - 在 SSIS 中导入 ACCESS 数据库中的数据
开篇介绍 来自 天善学院 一个学员的问题,如何在 SSIS 中导入 ACCESS 数据表中的数据. 在 SSIS 中导入 ACCESS 数据库数据 ACCESS 实际上是一个轻量级的桌面数据库,直接使 ...
- 微软BI 之SSIS 系列 - 在 SSIS 中使用 Web Service 以及 XML 解析
开篇介绍 Web Service 的用途非常广几乎无处不在,像各大门户网站上的天气预报使用到的第三方 Web Service API,像手机客户端和服务器端的交互等都可以通过事先设计好的 Web Se ...
- 微软BI 之SSIS 系列 - 利用 SSIS 模板快速开发 SSIS Package
开篇介绍 在做 ETL 项目的时候,往往很多 Package 的开发都是基于相同的模型和流程.比如在 Package 开始运行时需要向 Process Log 表中插入记录,在 Package 运行结 ...
- 微软BI 之SSRS 系列 - 实现 Excel 中图表结合的报表设计
来自群里面讨论的一个问题,EXCEL 中有类似于这样的图形,上面是 Chart, Chart X轴上的值正好就是下方 Table 的列头,这个在 SSRS 中应该如何实现? SSRS 2008.2 ...
- 微软BI 之SSRS 系列 - 报表邮件订阅中 SMTP 服务器匿名访问与 Windows验证, 以及如何成功订阅报表的实例
这篇文章源于在上一篇博文中有园友提出订阅 SSRS 报表时的一个问题, 于是就好好总结了一下,把有关 SSRS 报表订阅的要点和容易出现问题的地方写出来,希望对大家有所帮助! 参看上一篇博文 - S ...
- 微软BI 之SSAS 系列 - 自定义的日期维度设计
SSAS Date 维度基本上在所有的 Cube 设计过程中都存在,很难见到没有时间维度的 OLAP 数据库.但是根据不同的项目需求, Date 维度的设计可能不大相同,所以在设计时间维度的时候需要搞 ...
- 微软BI 之SSRS 系列 - 如何实现报表导航 Navigation 和钻取 Drill Down 的效果
开篇介绍 如何在 SSRS 报表中实现标签导航 Navigation 和向下钻取 Drill Down的效果? 如同下面这个例子一样 - 在页面第一次加载的时候,默认显示是全部地区的销售总和情况,上面 ...
- 微软BI 之SSRS 系列 - 巧用 RunningValue 函数在分组中排序并设置 RANK 排名
开篇介绍 经常有像类似于这样的排序需求,以及设置分组下的排序序号.比如此图中要求城市 City 在省份下按照 Internet Sales Amount 总销售额进行排序,并标识在各省份下的排名. 实 ...
随机推荐
- bzoj2152 树分治
还是太菜了,自己写的wa,但是找不到哪里错了,, 感觉现在学树分治早了点..以后回来再看吧 /* 多少点对之间的路径是3的倍数 */ #include<iostream> #include ...
- ERP商品管理业务逻辑封装(三十四)
产品购进管理业务逻辑: public class ProductBLL { /// <summary> /// 产品对象添加 并且返回产品编号 /// </summary> / ...
- Android开源日志库Logger的使用
https://blog.csdn.net/Power_Qyh/article/details/78159598?locationNum=2&fps=1 https://github.com/ ...
- div+css中height:auto !important; height:663px; min-height:663px !important;区别
height:auto !important是高度自适应,主要的是,!important只是对于ie6不认识而已,其他浏览器都是以这个为最高的优先级,执行这个,ie6会无视这个,不是只有火狐而已hei ...
- Mybatis动态公用sql
<select id="collPageCount" parameterType="java.util.Map" resultType="lon ...
- POJ - 1266 -
题目大意:给出一条圆弧上的两个端点A,B,和圆弧上两端点之间的一个点C,现在要用一块各个定点的坐标均为整数的矩形去覆盖这个圆弧,要求最小的矩形面积. 思路:叉积在本体发挥很强大的作用.首先求出三个点所 ...
- Spring Boot 项目实战(一)Maven 多模块项目搭建
一.前言 最近公司项目准备开始重构,框架选定为 Spring Boot ,本篇主要记录了在 IDEA 中搭建 Spring Boot Maven 多模块项目的过程. 二.软件及硬件环境 macOS S ...
- Java基础--对象的序列化
所有分布式应用常常需要跨平台,跨网络,因此要求所有传的参数.返回值都必须实现序列化. 比如常见的Dubbo分布式平台,里面的对象实体类必须实现序列化才能在网络间传递 一.定义 序列化:把Java对象转 ...
- Node+Express+MongoDB+Socket.io搭建实时聊天应用实战教程(一)--MongoDB入门
前言 本文并不是网上流传的多少天学会MongoDB那种全面的教程,而意在总结这几天使用MongoDB的心得,给出一个完整的Node+Express+MongoDB+Socket.io搭建实时聊天应用实 ...
- 洛谷P2879 [USACO07JAN]区间统计Tallest Cow
To 洛谷.2879 区间统计 题目描述 FJ's N (1 ≤ N ≤ 10,000) cows conveniently indexed 1..N are standing in a line. ...