微软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 总销售额进行排序,并标识在各省份下的排名. 实 ...
随机推荐
- Fiddler抓包3-查看get与post请求
前言 前面两篇关于Fiddler抓包的一些基本配置,配置完之后就可以抓到我们想要的数据了,接下来就是如何去分析这些数据. 本篇以博客园的请求为例,简单分析get与post数据有何不一样,以后也能分辨出 ...
- 格式化输出的方法:%、.format()、f
a = '123'a1 = '456'a2 = '789' %占位符 text = "a=%s"%atext1 = "a=%s,a1=%s,a2=%s"%(a, ...
- Python 检测系统时间,k8s版本,redis集群,etcd,mysql,ceph,kafka
一.概述 线上有一套k8s集群,部署了很多应用.现在需要对一些基础服务做一些常规检测,比如: 系统时间,要求:k8s的每一个节点的时间,差值上下不超过2秒 k8s版本,要求:k8s的每一个节点的版本必 ...
- DOM树示意图
- Nginx教程/概述
Nginx(发音同engine x)是一个异步框架的 Web服务器,也可以用作反向代理,负载平衡器 和 HTTP缓存.该软件由 Igor Sysoev 创建,并于2004年首次公开发布.同名公司成立于 ...
- 《剑指offer》-数据流中的中位数
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值. 最开始的思路 ...
- 详解如何在 Linux 中安装最新的 Python 3.6 版本
# 下载源码包安装,先装wget,或curl. yum install wget # 再安装解压缩和编译环境: yum install zlib-devel bzip2-devel openssl-d ...
- 利用IntelliJ IDEA 创建第一个项目
1.创建项目 打开后点击第一个按钮
- Python库资源大全
转载地址:https://zhuanlan.zhihu.com/p/27350980 本文是一个精心设计的Python框架.库.软件和资源列表,是一个Awesome XXX系列的资源整理,由BigQu ...
- Redis分布式锁实现方式(附有正解及错误示例)
一.前言 本文内容主要来自博客:https://wudashan.com/2017/10/23/Redis-Distributed-Lock-Implement/,本文用于归纳总结及笔记用途,如有需要 ...