在命名 excel 输出时,我有以下格式来考虑周末。如何只获取日期而不是像 20150429 这样格式的完整开始时间?
((DT_I4)DATEPART("weekday",@[System::StartTime]) ==2 ?
Replace((DT_STR, 20, 1252)(DATEADD( "D", -3,@[System::StartTime])),":","") +
".xlsx" :
Replace((DT_STR, 20, 1252)(DATEADD( "D", -1,@[System::StartTime])),":","") +
".xlsx")
约会
要获得 YYYYMMDD,有时写成 CCYYMMDD,我会使用像这样的表达式
读到它,我使用该
Year
函数提取 4 位数字年份,然后将其转换为 unicode 字符串。然后我使用该
Month
函数返回月份数。然后我将其转换为字符串。this 和 day 的挑战在于它们作为整数返回,前导零是显示工件。因此,我将一个 1 或 2 个字符的整数值转换为一个字符串,并在其前面加上一个前导零。在这一点上,我要么有一个值,要么有01
75012
% 的时间,这有效,但它是我们需要修复的剩余 25%,所以我用一个RIGHT
调用包装结果值,只保留尾随的 2 个值。泡沫,冲洗重复,但我使用的
DAY
功能。取所有三个值并根据需要组合
我个人的偏好是在我的 SSIS 包中有很多变量,所以我可能会创建一个字符串类型的变量,使用上面命名的表达式
Date_YYYMMDD
。或者我可能创建了 3 个单独的实体作为字符串,然后将它们连接在一起,因为我可能同时需要 YYYYMMDD 和 YYYY-MM-DD 并且不希望维护该连接/修剪逻辑。这是解决这个问题的一般方法。让我们开始解决问题并解决您的具体问题。
准备好开始过周末了
我真的不明白周末的表达方式是什么,但看起来你要么想要回到今天,要么想要回到 3 天。那是我世界中的一个变量。
我创建 @[User::SourceDate],类型为 DateTime 并将 EvaluateAsExpression 设置为 true 并使用此公式
现在我的逻辑很好并且被封装了,如果我发现我有另一个案例需要考虑(今天是 1 或 3,我需要退后 4 或 2 天),那么我只修复并测试这件事。
使用 SourceDate
现在我们有了 SourceDate,我们将应用第一组表达式将其变成 YYYYMMDD 字符串。创建第二个
@[User::SourceDate_YYYYMMDD]
字符串类型的变量,将 EvaluateAsExpression 设置为 true 并使用以下表达式看看我们如何在这里简单地使用我们的变量 SourceDate。一点都不复杂
制作我们的文件名
最后一点将使用我们的 SourceDate 的字符串版本并将文件扩展名附加到它上面。第三个变量是
@[User::NewFileName]
String类型,EvaluateAsExpression = true在这里,我们只是将
.dtsx
扩展名应用于我们的字符串,但是当我们将其分解为微小的小问题时,在我们的文件前加上 ClientName_YYYYMMDD.xlsx 是一个简单得多的问题。Biml所有的东西
最后,如果没有相应的 Biml,它不会是我的答案。Biml,是商业智能标记语言。它是商业智能的操作系统。我们将使用它来生成一个 SSIS 包。您只需要为 Visual Studio/BIDS/SSDT-BI 下载名为BIDS Helper的免费插件
样品包