En la anterior entrega de esta serie de artículos, explicábamos el proceso a implementar en SSIS para realizar la carga de datos en la tabla Cliente. A pesar de que el resultado obtenido es el adecuado, y puesto que la finalidad de esta tabla será actuar como dimensión del próximo modelo tabular que vamos a construir, los valores de las columnas EstadoCivil y Sexo no parecen muy convenientes para su utilización como atributos de la dimensión.

En el caso de la columna EstadoCivil, en lugar de los valores “M” (Married) y “S” (Single), sería más acertado emplear los literales “Casado” o “Casada”, y “Soltero” o “Soltera” respectivamente.

En cuanto a la columna Sexo, los caracteres “M” (Male) y “F” (Female) los traduciríamos por “Hombre” y “Mujer.

Podemos solventar esta situación desde SSIS, empleando una transformación de tipo Columna derivada (Derived Column Transformation), cuyo cometido, tal y como su nombre indica, consiste en aplicar modificaciones sobre las columnas que un Data Flow Path transporta dentro de un diseñador de Flujo de datos.

Volveremos, por lo tanto, a editar el flujo flw_Cliente, añadiendo la mencionada transformación, a la que daremos el nombre deriv_DimCustomer, y que situaremos entre la conversión conv_DimCustomer y el destino dest_Cliente. También modificaremos el Data Flow Path, cuyo origen está en conv_DimCustomer, para conectarlo con esta nueva transformación.

 

A continuación, editaremos la transformación abriendo su ventana Derived Column Transformation Editor, y para cada una de las columnas de datos que provienen de la transformación conv_DimCustomer, realizaremos los siguientes pasos:

  • En el panel inferior del editor, abrir la lista desplegable Derived Column, seleccionando la columna de datos.
  • Desde la carpeta Columns, situada en la parte superior izquierda del editor, arrastrar la columna de datos hasta la columna Expression del panel inferior.

 

 

De especial interés resulta la columna Expressión de este editor, ya que tal y como indica su nombre, será allí donde escribiremos, para las columnas MaritalStatus y Gender de la transformación conv_DimCustomer, las expresiones con las que modificaremos sus valores de origen.

Mediante el operador condicional ( ? : ), comprobaremos el valor tanto de la columna MaritalStatus como de Gender, para devolver el literal adecuado, utilizando las siguientes expresiones.

conv_DimCustomer.MaritalStatus == "S" ? "Soltero(a)" : "Casado(a)"
 
conv_DimCustomer.Gender == "M" ? "Hombre" : "Mujer"

 

 

Aceptaremos los cambios del editor y volveremos al diseñador del flujo de datos, conectando el Data Flow Path de deriv_DimCustomer con dest_Cliente.

 

Ejecutando de nuevo el paquete, obtendremos los siguientes resultados al consultar la tabla Cliente.

 

Aunque los valores de la columna EstadoCivil pueden considerarse correctos, la utilización de la partícula “(a)” en el literal, para que este sea válido tanto para referirse al masculino como al femenino, puede resultar una práctica un tanto engorrosa. Es por ello que, con una expresión condicional más afinada, como la que se muestra en el siguiente bloque de código, conseguiremos el literal exacto para cada situación, combinando los valores de las columnas MaritalStatus y Gender con el operador AND (&&) de SSIS, junto a la anidación de operadores condicionales.

conv_DimCustomer.MaritalStatus == "S" && conv_DimCustomer.Gender == "M" ? "Soltero" : (conv_DimCustomer.MaritalStatus == "S" && conv_DimCustomer.Gender == "F" ? "Soltera" : (conv_DimCustomer.MaritalStatus == "M" && conv_DimCustomer.Gender == "M" ? "Casado" : "Casada"))

 

Es importante tener en cuenta que debemos escribir este código todo seguido, sin rupturas de línea, o de lo contrario se producirá un error al evaluar la expresión.

Realizada esta mejora y ejecutado de nuevo el paquete, la consulta contra la tabla Cliente mostrará unos valores más adecuados.

Finalizados estos retoques, que mejoran los datos proporcionados por la tabla Cliente, concluimos la actual entrega de esta serie. El próximo artículo estará dedicado al desarrollo del proceso de carga para la tabla Producto.