Altova MapForce 2025 Professional Edition

Este ejemplo demuestra cómo combinar datos de dos tablas de base de datos con ayuda de un componente de combinación de MapForce. La operación de combinación se lleva a cabo en modo SQL (véase Combinaciones en modo SQL). Recuerde que también se pueden combinar tres o más tablas de una forma muy parecida (véase Ejemplo: crear un informe CSV a partir de varias tablas).

 

Este ejemplo viene acompañado de un diseño de asignación de datos que se encuentra en esta carpeta: <Documentos>\Altova\MapForce2025\MapForceExamples\Tutorial\JoinDatabaseTables.mfd.

mf_map_JoinDatabaseTables

JoinDatabaseTables.mfd

El objetivo de la asignación es combinar datos de dos tablas de base de datos de origen en un solo archivo CSV de destino. Como puede ver en el esquema que aparece a continuación, la primera tabla (users) almacena los nombres y las direcciones de correos de personas y la segunda (addresses) almacena las direcciones de personas. Estas dos tablas están enlazadas por medio de un campo común (el campo id de users corresponde al campo user_id de addresses). En bases de datos este tipo de relación recibe el nombre de relación de clave foránea.

mff_jointables

 

A continuación puede ver los datos que contienen las dos tablas.

mff_jointables_data

 

Cada registro de usuario de la tabla users puede tener cero o más direcciones en la tabla addresses. Por ejemplo, un usuario puede tener una dirección de tipo "home" o dos direcciones (una de tipo "home" y otra de tipo "work") o no tener dirección alguna.

 

El objetivo de la asignación es recuperar todos los datos (nombre, apellido, correo electrónico, ciudad, calle y número) de todos los usuarios que tengan como mínimo una dirección en la tabla addresses. También debería ser posible recuperar solamente cierto tipo de direcciones (p.ej. sólo las de tipo "home" o sólo las de tipo "work"). El tipo de dirección que se debe recuperar ("home" o "work") debe especificarse como parámetro en la asignación. Los registros recuperados deberán ordenarse alfabéticamente según el apellido de la persona.

 

El requisito de la asignación se conseguirá con ayuda de un componente de combinación, tal y como se ilustra en los siguientes pasos.

 

Nota:los componentes de combinación no son el único método posible para combinar tablas o vistas de base de datos. También puede realizar combinaciones de datos de base de datos con ayuda de instrucciones SQL SELECT (véase Instrucciones SQL SELECT como tablas virtuales). La principal diferencia entre las instrucciones SQL SELECT y los componentes de combinación es que aquellas se escriben a mano y permiten mayor flexibilidad. Los componentes de combinación son una alternativa sencilla para quienes no dominen SQL.

 

Paso n°1: Agregar la base de datos de origen

1.En el menú Insertar haga clic en el comando Base de datos. (También puede hacer clic en el botón Insertar base de datos mf_ic_insert_db de la barra de herramientas.)

2.Seleccione el tipo de base de datos SQLite y haga clic en Siguiente.

3.Navegue hasta el archivo Nanonull.sqlite que está en la carpeta <Documentos>\Altova\MapForce2025\MapForceExamples\Tutorial\ y haga clic en Conectarse.

4.Cuando la aplicación lo solicite, seleccione las tablas addresses y users.

mf_map_JoinDatabaseTables1

 

Paso nº2: Agregar el componente de combinación

1.En el menú Insertar, haga clic en Combinar. (También puede hacer clic en el botón Combinar mf_ic_join_button de la barra de herramientas.)

2.Dibuje una conexión entre la tabla users y la primera entrada del componente de combinación.

3.Expanda la tabla users y dibuje una conexión entre la tabla addresses (secundaria de users) y la segunda entrada del componente de combinación. El botón gui_add_function_parameter sirve para añadir más tablas si las necesita. No obstante, en este ejemplo solamente combinaremos dos tablas.

mf_map_JoinDatabaseTables2
Nota:También se puede agregar la conexión desde la tabla addresses directamente (la que no es tabla secundaria de users). Sin embargo, en el ejemplo que nos ocupa las condiciones de combinación deberían definirse a mano (véase Agregar condiciones de combinación). Para este ejemplo asegúrese de crear las conexiones que aparecen en la imagen anterior. Eso garantizará que la condición de combinación necesaria se crea de forma automática.

 

4.Haga clic en el botón Definir condición de combinación mf_ic_join_key del componente de combinación. Observe que la condición de combinación se crea de forma automática (users.id = addresses.user_id).

mf_map_JoinDatabaseTables3

 

Paso n°3: Agregar el componente CSV de destino

1.En el menú Insertar seleccione el comando Archivo de texto. (También puede hacer clic en el botón Insertar archivo de texto ic-component_txt de la barra de herramientas.)

2.Cuando la aplicación le pida que elija un modo de procesamiento, seleccione la opción Utilizar procesamiento básico para archivos CSV.... .

3.Haga clic en Anexar campo varias veces para crear siete campos CSV. Deje las demás opciones de configuración como están.

mf_map_JoinDatabaseTables4

4.Ahora haga doble clic en la celda que contiene el título de los campos recién creados y modifique el nombre de las celdas (para que su asignación sea más fácil de leer).

mf_map_JoinDatabaseTables5

5.Dibuje las conexiones que pueden verse en la siguiente imagen entre el componente de combinación y el componente CSV. La conexión que une el elemento joined del componente de combinación y el elemento Rows del componente CSV de destino da la orden de crear tantos registros (filas) en el destino como registros existan que cumplan la condición de combinación.

mf_map_JoinDatabaseTables6

 

Paso nº4: Agregar la condición WHERE/ORDER de SQL y el parámetro de entrada

1.Haga clic con el botón derecho en la conexión que une el elemento joined del componente de combinación y el elemento Rows del componente CSV de destino y después seleccione Insertar WHERE/ORDER de SQL.

2.Introduzca las cláusulas WHERE y ORDER BY que pueden verse en la siguiente imagen.

mf_map_JoinDatabaseTables7

3.En la asignación añada un componente de entrada (con el comando de menú Insertar | Insertar componente de entrada) y conecte su resultado con el parámetro address_type creado en el paso anterior.

mf_map_JoinDatabaseTables8

4.Haga doble clic en el componente de entrada y configúrelo como muestra la siguiente imagen. Para poder consultar la vista previa de resultados de la asignación en MapForce es necesario tener un valor en tiempo de diseño (en este caso "home"). Si quiere que la vista previa recupere las direcciones de tipo "work", reemplace este valor con "work".

mf_map_JoinDatabaseTables9

 

Funcionamiento de esta asignación de datos

La condición de combinación creada de forma automática en el paso nº2 se asegura de que en el destino sólo se copien los registros que cumplan la condición de combinación users.id = addresses.user_id. La condición de combinación se añadió automáticamente porque las dos tablas están unidas por una relación de clave foránea y porque se dibujaron las correspondientes conexiones de asignación de datos. Para más información consulte el apartado Gestionar relaciones de BD. Como en este ejemplo se han utilizado las relaciones de tablas ya existentes, no ha sido necesario definir manualmente ninguna condición de combinación. Para ver un ejemplo que describa cómo definir condiciones de combinación manualmente véase el Ejemplo: crear un informe CSV a partir de varias tablas.

 

Las dos tablas de origen son de la misma base de datos y del mismo componente así que esta combinación puede hacerse en modo SQL mf_ic_join_sql_enabled. Como el modo SQL está habilitado, la operación de combinación la lleva a cabo la base de datos y no MapForce. En otras palabras, MapForce genera una instrucción de combinación interna INNER JOIN y la envía a la base de datos para que la ejecute. El tipo de combinación (INNER JOIN) se indica mediante el icono Combinación interna mff_ic_inner_join situado delante de la tabla addresses en el componente de combinación. También puede cambiar el modo de combinación LEFT OUTER JOIN mff_ic_left_join (véase Cambiar el modo de combinación). No obstante, tenga en cuenta que al cambiar el modo de combinación no cambia el resultado de este ejemplo.

 

El componente WHERE/ORDER de SQL que se añadió en el paso nº4 permite filtrar (recuperar las direcciones de tipo "home" o "work") y ordenar el conjunto de registros. Tenga en cuenta que la cláusula WHERE creó un parámetro llamado :address_type de tipo string. Este parámetro permite suministrar el tipo de dirección (home o work) desde la asignación. Para más información consulte el apartado Filtrar y ordenar datos de BD (SQL WHERE/ORDER).

 

Por último, el componente de entrada permite suministrar el valor de parámetro actual cuando se ejecuta la asignación. Recuerde que, cuando la asignación se ejecuta fuera de MapForce (p.ej. cuando se ejecuta con MapForce Server en otro equipo), la entrada debe suministrarse en tiempo de ejecución como parámetro de la línea de comandos, en cuyo caso se omitirá el valor mencionado. Para más información consulte el apartado Pasar parámetros a la asignación.

© 2018-2024 Altova GmbH