**Caso de Uso:** tenemos acceso a datos remotos; vía JDBC o vía ODBC desde IRIS, y queremos presentar la información en un Dashboard, pero no deseamos o no podemos migrar dicha información a IRIS. **Alternativa:** Tomamos ventaja de la conexión al origen de Datos, usamos "Linked Tables" de IRIS, luego podemos realizar el análisis a estos datos y presentarlos finalmente en un Dashboard. Para este ejemplo vamos a realizarlo en este escenario: Tenemos una instancia de IRIS for Health, y tenemos acceso a una Base de Datos de empleados (un archivo de MS access). Lo primero es tener configurado el ODBC respectivo, en este ejemplo es una VM con Windows, y así se configuró el acceso a esta Base de Datos:   ![](/sites/default/files/inline/images/odbcempleados.png)   El segundo paso es confgurar IRIS para utilizar este ODBC, desde portal de gestión,  Administración --> Configuración --> Conectividad --> Conexiones de SQL Gateway    ![](/sites/default/files/inline/images/sqlgatewaysnmp.png)   Para este ejemplo, usamos conexión ODBC aprovechando la conexión realizada desde el DSN de sistema de Windows (Empleados). Creamos una conexión (botón "Crear nueva conexión") de SQL Gateway para IRIS, y en este ejemplo la nombraremos "Employee", y desde la misma creación podemos "probar" la conexión de modo que se mostrará algo como en la imagen:   ![](/sites/default/files/inline/images/configuraremployeesqlgw.png)   Guardamos la conexión se verá así:   ![](/sites/default/files/inline/images/odbcsqlgw.png) Ahora, lo que necesitamos en acceder a alguna de las tablas que exixten dentro de la Base de Datos externa, por lo que vamos a utilizar la utilidad de IRIS llamada "Tabla vinculada" (Linked Table en inglés). Necesitamos ir al explorador de SQL para utilizar el asistente que ayudará establecer esta conexión. Desde portal de gestión: Explorador --> SQL:   ![](/sites/default/files/inline/images/exploradorsql.png)     Asegurarse trabajar en un Namespace al que podamos tener acceso y crear paquetes y clases. En la ventana central, accedemos al menú "Asistentes --> Tabla vinculada": ![](/sites/default/files/inline/images/menutablavinculada.png)   En el asistente, indicamos la configuración, seleccionando de la lista desplegable, la conexión SQL Gateway que creamos (Employee) y luego el esquema vacío, pues en este caso de ejemplo no hay esquemas configurados, el asistente desplegará las tablas disponibles y podemos seleccionar la de nuestro interés (en este ejemplo: Employee) y vamos a "Siguiente":   ![](/sites/default/files/inline/images/asistente001.png)     Ahora podemos seleccionar el/los campo(s) de nuestro interés o aceptar la propuesta del asistente que en este caso ha seleccionado automáticamente todos los campos y vamos a Siguiente: ![](/sites/default/files/inline/images/asistente002.png) En este paso del asistente, podemos seleccionar su alguno de los campos será de acceso de sólo lectura (por defecto serán lectura y escritura) y además con qué nombre identificaremos cada uno desde SQL, por defecto el asistente replicará el nombre de cada campo para el nombre de SQL, pero podríamos modificarlos como en este ejemplo:   ![](/sites/default/files/inline/images/asistente003.png)   Ahora, necesitamos indicar a IRIS qué campo es el de acceso clave o primario, como no lo reconoce de forma automática, en este caso es necesario hacerlo de forma manual, hacemos clic en el botón de "Buscar" para seleccionar "EmployeeID" :   ![](/sites/default/files/inline/images/asistente004.png)       Hacemos cic en "Guardar" y damos el detalle faltante, que es indicar bajo qué paquete se guardará la tabla vinculada y con qué nombre de clase, además del nombre de la tabla, sólo como referencia usaremos el nombre "EmpleadosLinked" o se puede mantener el nombre propuesto por el asistente:   ![](/sites/default/files/inline/images/asistente005.png)   Podemos hacer clic en botón "Acabar", se abrirá una nueva ventana indicando que se hará un trabajo en segundo plano, podemos cerrar y hacer clic en "Listo". Con esta configuración Inicial, podemos acceder a los datos en la Base de Datos externa, como si lo hicieramos a una de forma local o directo en nuestra instancia de IRIS. Desde el mismo portal de gestión, en sección de SQL, podemos ver que IRIS despliega la tabla vinculada:   ![](/sites/default/files/inline/images/sql001.png)     Eso ya nos permite acceder a los datos directamente e IRIS se encargará de la comunicación al oigen para mostrar los resultados por ejemplo de una consultaSQL (guardaremos la consulta para el paso posterior): ![](/sites/default/files/inline/images/sql002.png)   La consulta:  
<span class="hljs-keyword">SELECT</span>
Apellido, Nombre, EmpleadoID, Departmento, correo, FonoTrabajo, FonoCasa, FonoMobil, Salario, DiasEnfermo, DiasVacaciones, RelacionadoaPropietario
<span class="hljs-keyword">FROM</span> Sample.EmpleadosLinked

 

CREAR DATACONNECTOR

Ahora que tenemos acceso a los datos en la tabla externa, podemos recurrir a la utilidad de IRIS llamada Dataconnector, donde utilizamos una consulta tradicional para la extracción de todos o parte de los campos disponibles y los podremos utilizar posteriormente en la definición de un cubo. Link en Documentanción: [DataConnector](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=D2IMP_CH_CONNECTOR)   El primer paso es crear una clase que extenderá a %DeepSee.DataConnector y en ella definimos el nombre de los campos que serán accesibles desde el cubo. Esta clase tiene dos segmentos particulares para su definición, el "SourceQuery" que definirá la query que utilizará IRIS para la obtención de los datos (podemos copiar y pegar el resultado previo de este mismo ejemplo) y el segmento "Output" que dará un nombre a los campos disponibles y podemos definir además el campo indice o clave primaria. El código de la clase se verá así:  
<span class="hljs-keyword">Class</span> Sample.External <span class="hljs-keyword">Extends</span> <span class="hljs-built_in">%DeepSee.DataConnector</span>
{

<span class="hljs-keyword">Parameter</span> SUPPORTSIDLIST = <span class="hljs-number">1</span><span class="hljs-comment">;</span>
<span class="hljs-keyword">Parameter</span> SUPPORTSSINGLE = <span class="hljs-number">1</span><span class="hljs-comment">;</span>
XData SourceQuery [ XMLNamespace = <span class="hljs-string">"http://www.intersystems.com/deepsee/connector/query"</span> ]
{
<sql>
	SELECT 
	Apellido, Nombre, EmpleadoID, Departmento, 
	correo, FonoTrabajo, FonoCasa, FonoMobil, 
	Salario, DiasEnfermo, DiasVacaciones, RelacionadoaPropietario
	FROM Sample.EmpleadosLinked
</sql>
}

XData Output [ XMLNamespace = <span class="hljs-string">" http://www.intersystems.com/deepsee/connector/output"</span> ]
{
<connector >
   <<span class="hljs-keyword">property</span> name= <span class="hljs-string">"EmpleadoID"</span> sourceProperty =<span class="hljs-string">"EmpleadoID"</span> displayName =<span class="hljs-string">"EmpleadoID"</span> idKey= <span class="hljs-string">"true"</span>/>
   <<span class="hljs-keyword">property</span> name= <span class="hljs-string">"Nombre"</span> sourceProperty =<span class="hljs-string">"Nombre"</span> displayName =<span class="hljs-string">"Nombre"</span>/>
   <<span class="hljs-keyword">property</span> name= <span class="hljs-string">"Apellido"</span> sourceProperty =<span class="hljs-string">"Apellido"</span> displayName =<span class="hljs-string">"Apellido"</span>/>
   <<span class="hljs-keyword">property</span> name= <span class="hljs-string">"Departmento"</span> sourceProperty =<span class="hljs-string">"Departmento"</span> displayName =<span class="hljs-string">"Departmento"</span>/>
   
   <<span class="hljs-keyword">property</span> name= <span class="hljs-string">"correo"</span> sourceProperty =<span class="hljs-string">"correo"</span> displayName =<span class="hljs-string">"correo"</span>/>
   <<span class="hljs-keyword">property</span> name= <span class="hljs-string">"FonoTrabajo"</span> sourceProperty =<span class="hljs-string">"FonoTrabajo"</span> displayName =<span class="hljs-string">"FonoTrabajo"</span>/>
   <<span class="hljs-keyword">property</span> name= <span class="hljs-string">"FonoCasa"</span> sourceProperty =<span class="hljs-string">"FonoCasa"</span> displayName =<span class="hljs-string">"FonoCasa"</span>/>
   <<span class="hljs-keyword">property</span> name= <span class="hljs-string">"FonoMobil"</span> sourceProperty =<span class="hljs-string">"FonoMobil"</span> displayName =<span class="hljs-string">"FonoMobil"</span>/>
   
   <<span class="hljs-keyword">property</span> name= <span class="hljs-string">"Salario"</span> sourceProperty =<span class="hljs-string">"Salario"</span> displayName =<span class="hljs-string">"Salario"</span>/>
   <<span class="hljs-keyword">property</span> name= <span class="hljs-string">"DiasEnfermo"</span> sourceProperty =<span class="hljs-string">"DiasEnfermo"</span> displayName =<span class="hljs-string">"DiasEnfermo"</span>/>
   <<span class="hljs-keyword">property</span> name= <span class="hljs-string">"DiasVacaciones"</span> sourceProperty =<span class="hljs-string">"DiasVacaciones"</span> displayName =<span class="hljs-string">"DiasVacaciones"</span>/>
   <<span class="hljs-keyword">property</span> name= <span class="hljs-string">"RelacionadoaPropietario"</span> sourceProperty =<span class="hljs-string">"RelacionadoaPropietario"</span> displayName =<span class="hljs-string">"FamiliaPropietario"</span>/>
</connector >
}

}
Ahora es posible crear un nuevo Cubo, que tendrá como origen, un "DataConnector": ![](/sites/default/files/inline/images/newcube001.png)     La definición quedará algo como la siguiente imagen: ![](/sites/default/files/inline/images/newcube002.png)     El análisis se hará según sea la necesidad y tendrá disponible todas las herramientas de IRIS como datos calculados, listas, dimensiones y más: ![](/sites/default/files/inline/images/arquitecto001.png)   Una tabla pivot que permita analizar personas por departamento: ![](/sites/default/files/inline/images/pivot001.png)     Y finalmente podemos presentar los datos en un Dashboard:   ![](/sites/default/files/inline/images/dashboard001.png)     Si lo requiere, puede usar más de una tabla vunculada y luevo definir un DataConnector uniendo las que necesita y presentarlas unificadas (SQL) o puede preparar más de un DataConnector si el análisis es más detallado. Al momento de definir el cubo puede establecer criterios de actualización tal como lo hace con cubos de tablas propias de IRIS.