如何格式化週末的 SSIS 表達式
在命名 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,我會使用如下表達式
(DT_WSTR,4)YEAR(@[System::StartTime]) + RIGHT("0" + (DT_WSTR,2)MONTH(@[System::StartTime]), 2) + RIGHT("0" + (DT_WSTR,2)DAY(@[System::StartTime]), 2)
閱讀後,我使用該
Year
函式提取 4 位數年份,然後將其轉換為 unicode 字元串。然後我使用該
Month
函式返回月份數。然後我將其轉換為字元串。這個和 day 的挑戰在於它們以整數形式返回,而前導零是顯示偽影。所以我將一個 1 或 2 個字元的整數值轉換為一個字元串,並在它前面加上一個前導零。在這一點上,我要麼有一個值,要麼有01
75012
% 的時間,這可行,但我們需要修復剩下的 25%,所以我用RIGHT
呼叫包裝結果值,只保留尾隨的 2 個值。泡沫,沖洗重複,但我使用該
DAY
功能。取所有三個值並根據需要組合
我個人的偏好是在我的 SSIS 包中有很多變數,所以我可能會使用上面名為
Date_YYYMMDD
. 或者我可能已經創建了 3 個單獨的實體作為字元串,然後將它們連接在一起,因為我可能同時需要 YYYYMMDD 和 YYYY-MM-DD 並且不願意維護這種連接/修剪邏輯。這是解決這個問題的一般方法。讓我們開始著手解決您的具體問題。
準備好開始過週末了
我真的不明白週末的表達方式是什麼,但看起來你要麼想要一天回來,要麼想要從今天回來 3 天。那是我世界中的一個變數。
我創造 @
$$ User::SourceDate $$,類型為 DateTime 並將 EvaluateAsExpression 設置為 true 並使用此公式
(DT_I4)DATEPART("weekday",@[System::StartTime]) ==2 ? DATEADD( "D", -3,@[System::StartTime]): DATEADD( "D", -1,@[System::StartTime])
現在我的邏輯很好並且被封裝了,如果我發現我還有另一個案例需要考慮(今天是 1 或 3 天,我需要推遲 4 或 2 天),那麼我只需修復並測試這一件事。
使用源日期
現在我們有了 SourceDate,我們將應用第一組表達式將其轉換為 YYYYMMDD 字元串。創建第二個
@[User::SourceDate_YYYYMMDD]
String 類型的變數,將 EvaluateAsExpression 設置為 true 並使用以下表達式(DT_WSTR,4)YEAR(@[User::SourceDate]) + RIGHT("0" + (DT_WSTR,2)MONTH(@[User::SourceDate]), 2) + RIGHT("0" + (DT_WSTR,2)DAY(@[User::SourceDate]), 2
看看我們如何在這裡簡單地使用我們的變數 SourceDate。一點都不復雜
使我們的文件名
最後一點將使用我們的 SourceDate 的字元串版本並將文件副檔名附加到它上面。第三個變數是
@[User::NewFileName]
String類型,EvaluateAsExpression = true@[User::SourceDate_YYYYMMDD] + ".dtsx"
在這裡,我們只是將
.dtsx
副檔名應用於我們的字元串,但是當我們將其分解為小問題時,在我們的文件前面加上 ClientName_YYYYMMDD.xlsx 是一個更簡單的問題。比姆所有的東西
最後,如果沒有相應的 Biml,這將不是我的答案。Biml,是商業智能標記語言。它是商業智能的作業系統。我們將使用它來生成一個 SSIS 包。您只需下載 Visual Studio/BIDS/SSDT-BI 的免費外掛,稱為BIDS Helper
- 右鍵點擊 SSIS 項目並選擇添加新的 Biml 文件
- 點兩下 BimlScript.biml 文件,將內容替換為以下內容
- 右鍵點擊 BimlScript.biml 並選擇“生成 SSIS 包”
- 查看添加到項目中的 SSIS 包
- 休息一下
<Biml xmlns="http://schemas.varigence.com/biml.xsd"> <Packages> <Package Name="dba_99131" ConstraintMode="Linear"> <Variables> <Variable DataType="DateTime" Name="SourceDate" EvaluateAsExpression="true"> (DT_I4)DATEPART("weekday",@[System::StartTime]) ==2 ? DATEADD( "D", -3,@[System::StartTime]): DATEADD( "D", -1,@[System::StartTime]) <Annotations> <Annotation AnnotationType="Description"> Calculate 1 or 3 days back depending on day of week </Annotation> </Annotations> </Variable> <Variable DataType="String" Name="SourceDate_YYYYMMDD" EvaluateAsExpression="true"> (DT_WSTR,4)YEAR(@[User::SourceDate]) + RIGHT("0" + (DT_WSTR,2)MONTH(@[User::SourceDate]), 2) + RIGHT("0" + (DT_WSTR,2)DAY(@[User::SourceDate]), 2) <Annotations> <Annotation AnnotationType="Description"> Convert our date into a YYYYMMDD format </Annotation> </Annotations> </Variable> <Variable DataType="String" Name="NewFileName" EvaluateAsExpression="true" >@[User::SourceDate_YYYYMMDD] + ".dtsx" <Annotations> <Annotation AnnotationType="Description"> Generate our final file name </Annotation> </Annotations> </Variable> </Variables> </Package> </Packages> </Biml>
樣品包