Esempi di espressioni avanzate di Integration Services
In questa sezione vengono forniti esempi di alcune funzioni avanzate, in cui sono combinati più operatori e funzioni. Le espressioni utilizzate nei vincoli di precedenza o nella trasformazione Suddivisione condizionale devono restituire un valore booleano. Tale restrizione non si applica tuttavia alle espressioni utilizzate in espressioni di proprietà e variabili, nella trasformazione Colonna derivata o nel contenitore Ciclo For.
Negli esempi seguenti vengono utilizzati il database AdventureWorks e il database AdventureWorksDW2012 di Microsoft SQL Server. Per ogni esempio viene indicata la tabella utilizzata.
Espressioni booleane
In questo esempio viene utilizzata la tabella Product. L'espressione valuta la voce del mese nella colonna SellStartDate e restituisce TRUE se il mese è giugno o un mese successivo.
DATEPART("mm",SellStartDate) > 6
In questo esempio viene utilizzata la tabella Product. L'espressione valuta il risultato arrotondato della divisione della colonna ListPrice per la colonna StandardCost e restituisce TRUE se tale risultato è maggiore di 1,5.
ROUND(ListPrice / StandardCost,2) > 1.50
In questo esempio viene utilizzata la tabella Product. L'espressione restituisce TRUE se tutte e tre le operazioni restituiscono TRUE. Se la colonna Size e la variabile BikeSize hanno tipi di dati incompatibili, l'espressione richiederà un cast esplicito, come mostrato nel secondo esempio. Il cast a DT_WSTR include la lunghezza della stringa.
MakeFlag == TRUE && FinishedGoodsFlag == TRUE && Size != @BikeSize MakeFlag == TRUE && FinishedGoodsFlag == TRUE && Size != (DT_WSTR,10)@BikeSize
In questo esempio viene utilizzata la tabella CurrencyRate. L'espressione confronta valori in tabelle e variabili. Restituisce TRUE se la voce nella colonna FromCurrencyCode o ToCurrencyCode è uguale al valore della variabile corrispondente e se il valore in AverageRate è maggiore di quello in EndOfDayRate.
(FromCurrencyCode == @FromCur || ToCurrencyCode == @ToCur) && AverageRate > EndOfDayRate
In questo esempio viene utilizzata la tabella Currency. L'espressione restituisce TRUE se il primo carattere nella colonna Name non è a o A.
SUBSTRING(UPPER(Name),1,1) != "A"
L'espressione seguente restituisce gli stessi risultati ma è più efficiente, perché viene convertito in maiuscolo un solo carattere.
UPPER(SUBSTRING(Name,1,1)) != "A"
Espressioni non booleane
Le espressioni non booleane vengono utilizzate nella trasformazione Colonna derivata, nelle espressioni di proprietà e nel contenitore Ciclo For.
In questo esempio viene utilizzata la tabella Contact. L'espressione rimuove gli spazi iniziali e finali dalle colonne FirstName, MiddleName e LastName. Estrae la prima lettera della colonna MiddleName e, se non è Null, concatena l'iniziale del secondo nome con i valori in FirstName e LastName, quindi inserisce gli spazi appropriati tra i valori.
TRIM(FirstName) + " " + (!ISNULL(MiddleName) ? SUBSTRING(MiddleName,1,1) + " " : "") + TRIM(LastName)
In questo esempio viene utilizzata la tabella Contact. L'espressione convalida le voci nella colonna Salutation. Restituisce una voce di Salutation o una stringa vuota.
(Salutation == "Sr." || Salutation == "Ms." || Salutation == "Sra." || Salutation == "Mr.") ? Salutation : ""
In questo esempio viene utilizzata la tabella Product. L'espressione converte in maiuscolo il primo carattere nella colonna Color e in minuscolo i caratteri rimanenti.
UPPER(SUBSTRING(Color,1,1)) + LOWER(SUBSTRING(Color,2,15))
In questo esempio viene utilizzata la tabella Product. L'espressione calcola il numero dei mesi per cui un determinato prodotto è rimasto in vendita e restituisce la stringa "Unknown" se la colonna SellStartDate o la colonna SellEndDate contiene NULL.
!(ISNULL(SellStartDate)) && !(ISNULL(SellEndDate)) ? (DT_WSTR,2)DATEDIFF("mm",SellStartDate,SellEndDate) : "Unknown"
In questo esempio viene utilizzata la tabella Product. L'espressione calcola il margine di profitto sulla colonna StandardCost e arrotonda il risultato alla precisione 2. Il risultato viene presentato come percentuale.
ROUND(ListPrice / StandardCost,2) * 100
Attività correlate
Utilizzo di un'espressione in un componente flusso di dati
Contenuto correlato
Articolo tecnico relativo al foglio d'aiuto per le espressioni SSIS sul sito Web pragmaticworks.com
|