开篇介绍

在 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. python3 读取文件跳过文件第一行内容

    Python编程时,经常需要跳过第一行读取文件内容.比较容易想到是为每行设置一个line_num,然后判断line_num是否为1,如果不等于1,则进行读取操作.相应的Python代码如下: #inp ...

  2. python+selenium+Jenkins构建自动化测试

    环境准备 本次使用JDK:1.8.tomcat:8.5.Jenkins:2.127 安装jdk 官方下载地址 安装教程参考 安装tomcat 和jenkins tomcat官方下载地址 jenkins ...

  3. 集合Arraylist的方法的使用和打印

    package chapter090; import java.util.ArrayList;import java.util.List; public class TestList01 { publ ...

  4. 2017-2018-2 20155225《网络对抗技术》实验九 Web安全基础

    2017-2018-2 20155225<网络对抗技术>实验九 Web安全基础 WebGoat 1.String SQL Injection 题目是想办法得到数据库所有人的信用卡号,用Sm ...

  5. 192 Word Frequency

    Write a bash script to calculate the frequency of each word in a text file words.txt. For simplicity ...

  6. BZOJ1076 [SCOI2008]奖励关 概率 状态压缩动态规划

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1076 题意概括 有n个东西,k次扔出来.每次等概率扔出其中一个. 你可以拿这个东西,但是有条件,得 ...

  7. PTA 7-2 是否完全二叉搜索树(30 分) 二叉树

    将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果. 输入格式: 输入第一行给出一个不超过20的正整数 ...

  8. 练习题|网络编程-socket开发

    1.什么是C/S架构? C指的是client(客户端软件),S指的是Server(服务端软件),C/S架构的软件,实现服务端软件与客户端软件基于网络通信. 2.互联网协议是什么?分别介绍五层协议中每一 ...

  9. python tkinter-布局

      包装布局pack() 目前对它的感觉是,当一个窗体的对象都设置完属性后,最后用它来绑定到窗体上.之后就不能再设置属性了 名称 描述 取值范围 expand 当值为“yes”时,side选项无效.组 ...

  10. poj 2406 Power Srings (kmp循环节) (经典)

    <题目链接> 题目大意: 给出一个字符串,求其字串在该字符串中循环的最大周期. 解题分析: length=len-Next[len],len为该字符串的最小循环节,如果len%length ...