Compartir a través de


Expresiones avanzadas de Integration Services

Esta sección proporciona ejemplos de expresiones avanzadas que combinan varios operadores y varias funciones. Si se usa una expresión en una restricción de precedencia o en la transformación División condicional, su evaluación debe devolver un valor booleano. Sin embargo, esta restricción no se aplica a las expresiones usadas en expresiones de propiedades, variables, la transformación Columna derivada o el contenedor de bucles For.

Los siguientes ejemplos usan las bases de datos AdventureWorks y AdventureWorksDW de MicrosoftSQL Server. Cada ejemplo identifica las tablas que utiliza.

Expresiones booleanas

  • En este ejemplo se utiliza la tabla Product. La evaluación de la expresión busca la entrada del mes en la columna SellStartDate y devuelve TRUE si el mes es junio o un mes posterior.

    DATEPART("mm",SellStartDate) > 6
    
  • En este ejemplo se utiliza la tabla Product. La expresión evalúa el resultado redondeado de dividir la columna ListPrice por la columna StandardCost y devuelve TRUE si el resultado es mayor que 1,5.

    ROUND(ListPrice / StandardCost,2) > 1.50
    
  • En este ejemplo se utiliza la tabla Product. La expresión devuelve TRUE si las tres operaciones devuelven TRUE. Si la columna Size y la variable BikeSize tienen tipos de datos incompatibles, la expresión requiere una conversión explícita, como se indica en el segundo ejemplo. La conversión a DT_WSTR incluye la longitud de la cadena.

    MakeFlag ==  TRUE && FinishedGoodsFlag == TRUE && Size != @BikeSize
    MakeFlag ==  TRUE && FinishedGoodsFlag == TRUE  && Size != (DT_WSTR,10)@BikeSize
    
  • En este ejemplo se utiliza la tabla CurrencyRate. La expresión compara valores de tablas y variables. Devuelve TRUE si las entradas de la columna FromCurrencyCode o ToCurrencyCode son iguales a los valores de la variable y si el valor de AverageRate es mayor que el valor de EndOfDayRate.

    (FromCurrencyCode == @FromCur || ToCurrencyCode == @ToCur) && AverageRate > EndOfDayRate
    
  • En este ejemplo se utiliza la tabla Currency. La expresión devuelve TRUE si el primer carácter de la columna Name no es a o A.

    SUBSTRING(UPPER(Name),1,1) != "A"
    

    La siguiente expresión proporciona los mismos resultados, pero es mucho más eficaz porque sólo se convierte a mayúsculas un carácter.

    UPPER(SUBSTRING(Name,1,1)) != "A"
    

Expresiones no booleanas

Las expresiones no booleanas se usan en la transformación Columna derivada, en expresiones de propiedades y en el contenedor de bucles For.

  • En este ejemplo se utiliza la tabla Contact. La expresión quita los espacios iniciales y finales de las columnas FirstName, MiddleName y LastName. Extrae la primera letra de la columna MiddleName si no es NULL, concatena la inicial del segundo nombre y los valores de FirstName y LastName, e inserta los espacios apropiados entre los valores.

    TRIM(FirstName) + " " + (!ISNULL(MiddleName) ? SUBSTRING(MiddleName,1,1) + " " : "") + TRIM(LastName)
    
  • En este ejemplo se utiliza la tabla Contact. La expresión valida las entradas de la columna Salutation. Devuelve una entrada Salutation o una cadena vacía.

    (Salutation == "Sr." || Salutation == "Ms." || Salutation == "Sra." || Salutation == "Mr.") ? Salutation : ""
    
  • En este ejemplo se utiliza la tabla Product. La expresión convierte el primer carácter de la columna Color a mayúsculas y convierte los demás caracteres a minúsculas.

    UPPER(SUBSTRING(Color,1,1)) + LOWER(SUBSTRING(Color,2,15))
    
  • En este ejemplo se utiliza la tabla Product. La expresión calcula el número de meses que se ha vendido un producto y devuelve la cadena "Unknown" si la columna SellStartDate o SellEndDate contiene NULL.

    !(ISNULL(SellStartDate)) && !(ISNULL(SellEndDate)) ? (DT_WSTR,2)DATEDIFF("mm",SellStartDate,SellEndDate) : "Unknown"
    
  • En este ejemplo se utiliza la tabla Product. La expresión calcula el margen de beneficio de la columna StandardCost y redondea el resultado a una precisión de dos. El resultado se presenta como un porcentaje.

    ROUND(ListPrice / StandardCost,2) * 100