Conectarse a una consulta de SQL personalizada
Nota: El uso de SQL personalizado puede afectar al rendimiento de los libros de trabajo. Trabajar con el DBA le permitirá asegurarse de obtener la mejor consulta SQL personalizada posible. Para realizar las operaciones necesarias para crear vistas en Tableau Desktop, Tableau debe poder controlar WHERE, GROUP BY y otras cláusulas SQL. Dado que una consulta SQL personalizada puede contener esos elementos y Tableau no puede insertarlos en el SQL existente, debe ajustar la instrucción SQL personalizada dentro de una instrucción select. Cuando una conexión SQL personalizada funciona con lentitud o genera un error, suele ser consecuencia del ajuste de SQL personalizado que realiza Tableau Desktop.
En la mayoría de las bases de datos puede conectarse a una consulta concreta, en lugar de conectarse a todo el conjunto de datos. Como las bases de datos presentan una sintaxis SQL algo diferente, es posible que la consulta personalizada de SQL que utilice para conectarse a una base de datos sea diferente de la que utilice para conectarse a otra base de datos. No obstante, las consultas personalizadas de SQL pueden ser útiles si sabe exactamente la información que necesita y sabe escribir consultas de SQL.
Aunque existen distintos motivos comunes por los que podría usar consultas personalizadas de SQL, puede utilizarlas para unir en filas los datos en todas las tablas, redistribuir los campos para efectuar uniones en columnas entre bases de datos cruzadas, reestructurar o reducir el tamaño de los datos para llevar a cabo análisis, etc.
Para Excel y fuentes de datos de archivos de texto, esta opción solo está disponible en libros de trabajo creados antes de Tableau Desktop 8.2 o al utilizar Tableau Desktop en Windows con la conexión heredada. Para conectarse a Excel o al archivo de texto mediante la conexión heredada, conéctese al archivo y, en el cuadro de diálogo Abrir, haga clic en el menú desplegable Abrir y, a continuación, seleccione Abrir con conexión heredada.
NOTA: a partir de Tableau 2020.2, las conexiones de Excel y texto heredadas ya no son compatibles. Consulte el documento Legacy Connection Alternatives (Alternativas a las conexiones heredadas) en la Comunidad de Tableau para ver las alternativas a las conexiones heredadas.
Conectarse a una consulta de SQL personalizada
Después de conectarse a los datos, haga doble clic en la opción Nuevo SQL personalizado, en la página Fuente de datos.
Escriba o pegue la consulta en el cuadro de texto. La consulta debe ser una sola instrucción SELECT*.
Cuando haya terminado, haga clic en Aceptar.
Al hacer clic en Aceptar, la consulta se ejecuta y la tabla de consulta SQL personalizada aparece en la capa lógica del lienzo. Solo se mostrarán los campos relevantes de la consulta de SQL personalizado en la cuadrícula de datos de la página de fuente de datos.
Para obtener más información sobre las capas lógicas y físicas del lienzo, consulte El modelo de datos de Tableau.
Ejemplos de consultas personalizadas de SQL
Combinar las tablas verticalmente (combinación)
Si tiene que adjuntar datos entre sí, puede utilizar la opción de unión directamente en la capa física del lienzo en Tableau. En los casos en los que la base de datos no admita esta opción, puede utilizar las consultas personalizadas de SQL.
Por ejemplo, supongamos que tiene las dos tablas siguientes: Noviembre y Diciembre.
Noviembre | Diciembre |
---|---|
Puede utilizar la siguiente consulta personalizada de SQL para adjuntar la segunda tabla, Diciembre, a la primera, Noviembre:
SELECT * FROM November UNION ALL SELECT * FROM December
El resultado de la consulta que aparece en la cuadrícula de datos tiene este aspecto:
Para obtener más información sobre la opción de unión, consulte Unir los datos.
Cambiar el tipo de datos de un campo para efectuar una unión entre bases de datos cruzada
Si desea llevar a cabo una unión entre dos tablas en la capa física del lienzo, el tipo de datos de los campos en los que vaya a hacer la unión debe ser el mismo. En los casos en los que el tipo de datos de los campos son diferentes, puede utilizar las consultas personalizadas de SQL para cambiar el tipo de datos (es decir, adaptar el campo) antes de efectuar la combinación.
Por ejemplo, imagínese que quiere combinar dos tablas, Main y Sub, con los campos Root e ID, respectivamente. El campo Root es un tipo de número y el campo ID, un tipo de cadena. Puede utilizar la siguiente consulta personalizada de SQL para cambiar el tipo de datos de Root de un número a una cadena, de modo que pueda unir las tablas Main y Sub con los campos Root e ID.
SELECT
[Main].[Root] AS [Root_Number]
CAST([Main].[Root] AS INT] AS [Root_String]
FROM [Main]
En el resultado de esta consulta se muestra el campo Root original y el campo Root como cadena.
Para obtener más información sobre las combinaciones y las combinaciones de bases de datos cruzadas, consulte Combinar datos.
Reducir el tamaño de los datos
A la hora de trabajar con conjuntos de datos grandes, en ocasiones se puede ahorrar tiempo si se reduce primero el tamaño de estos.
Por ejemplo, supongamos que tiene una tabla de grandes dimensiones llamada FischerIris. Puede utilizar la siguiente consulta personalizada de SQL para recuperar las columnas y registros especificados, con lo que se reduce el tamaño del conjunto de datos al que se conecta desde Tableau.
SELECT
[FischerIris].[Species] AS [Species],
[FischerIris].[Width] AS [Petal Width],
COUNT([FischerIris].[ID]) AS [Num of Species]
FROM [FischerIris]
WHERE [FischerIris].[Organ] = 'Petal'
AND [FischerIris].[Width] > 15.0000
GROUP BY [FischerIris].[Species], [FischerIris].[Width]
Reestructurar los datos (pivote)
En algunos casos es posible que esté trabajando con una tabla que se debe reestructurar antes de llevar a cabo un análisis. Aunque este tipo de tarea se puede realizar en la capa física del lienzo de Tableau usando opciones como Crear tabla dinámica, la base de datos podría no admitir estas opciones. En tal caso, puede utilizar SQL personalizado.
Por ejemplo, supongamos que tiene la siguiente tabla:
Para modificar la estructura y optimizar los datos para analizarlos en Tableau, puede utilizar la siguiente consulta personalizada de SQL:
SELECT Table1.Season ID AS [Season ID],
Table1.Items - Don't like AS [Quantity],
"Don't Like" AS [Reason]
FROM Table1
UNION ALL
SELECT Table1.Season ID AS [Season ID],
Table.Items - Defective AS [Quantity],
"Defective" AS [Reason]
FROM Table1
UNION ALL
SELECT Table1.Season ID AS [Season ID],
Table1.Items - Too big AS [Quantity],
"Too Big" AS [Reason]
FROM Table1
UNION ALL
SELECT Table1.Season ID AS Season ID,
Table1.Items - Too small AS [Quantity]
"Too Small" AS [Reason]
FROM Table1
El resultado de la consulta que aparece en la cuadrícula de datos tiene este aspecto:
Para obtener más información sobre la opción de pivote, consulte Pivotar datos de columnas a filas.
Combinar (unir) y agregar los datos
Si tiene que combinar tablas y agregar los datos, puede utilizar tanto opciones de unión como de tipo de agregación predeterminadas directamente en la capa física del lienzo en Tableau. En otros casos, es posible que deba utilizar las consultas personalizadas de SQL.
Por ejemplo, supongamos que tiene las dos tablas siguientes: Pedidos y Proveedores.
Pedidos | Proveedores |
---|---|
Puede utilizar la siguiente consulta personalizada de SQL para buscar un recuento en el número de pedidos y efectuar una combinación a la izquierda en las tablas Pedidos y Proveedores:
SELECT Vendors.Name,COUNT(Orders.Order) AS Number Of Orders
FROM Orders
LEFT JOIN Vendors
ON Orders.VendorID=Vendors.VendorID
GROUP BY Name;
El resultado de la consulta será algo parecido a esto:
Para obtener más información sobre las uniones, consulte Combinar datos.
Se producen errores al hacer referencia a columnas duplicadas
Si la consulta personalizada de SQL hace referencia a columnas duplicadas, es posible que reciba errores al intentar utilizar en Tableau una de las columnas en el análisis. Esto sucederá aunque la consulta sea válida. Veamos, por ejemplo, la siguiente consulta:
SELECT * FROM
authors, titleauthor WHERE authors.au_id = titleauthor.au_id
La consulta es válida, pero el campo au_id es ambiguo, ya que en este caso existe en la tabla “authors” y en la tabla “titleauthor”. Tableau se conectará con la consulta, pero usted obtendrá un error siempre que trate de usar el campo au_id . Esto se debe a que Tableau no sabe a qué tabla hace referencia.
Nota: Es una práctica recomendada definir alias de columna con una cláusula AS siempre que sea posible en una consulta SQL personalizada. El motivo es que cada base de datos tiene sus propias reglas a la hora de generar de forma automática un nombre de columna cuando no se utiliza un alias.
Editar una consulta personalizada de SQL
Para editar una consulta SQL personalizada
- En el lienzo de la página de fuente de datos, haga doble clic en la consulta de SQL personalizado en la capa lógica.
- Coloque el cursor sobre la tabla de SQL personalizado en la capa física hasta que se muestre la flecha.
- Haga clic en esa flecha y seleccione Editar consulta de SQL personalizado.
- En el cuadro de diálogo, modifique la consulta SQL personalizada.
Para cambiar el nombre de una consulta SQL personalizada
Cuando se arrastra una consulta de SQL personalizado a la capa lógica del lienzo, Tableau proporciona un nombre predeterminado: Consulta de SQL personalizado, Consulta de SQL personalizado1, etc. Puede cambiar el nombre predeterminado a otro más significativo.
- En la página de la fuente de datos, en la capa lógica del lienzo, seleccione la flecha desplegable en la tabla de consulta de SQL personalizado y seleccione Cambiar nombre.
- Escriba el nombre que desee utilizar para la consulta SQL personalizada.
Utilizar parámetros en una consulta de SQL personalizada
Puede utilizar parámetros en una declaración de consulta de SQL personalizada para reemplazar un valor constante por un valor dinámico. A continuación, podrá actualizar el parámetro en el libro de trabajo para modificar la conexión. Por ejemplo, puede establecer una conexión con una consulta de SQL personalizada que proporcione datos del tráfico web de una página determinada que se especifica mediante un valor de pageID. En lugar de utilizar un valor constante para pageID en la consulta de SQL, puede insertar un parámetro. Después de finalizar la conexión, podrá ver un control de parámetro en el libro de trabajo. Utilice el control de parámetros para cambiar el valor de pageID y extraer datos de cada página que le interese sin tener que editar o duplicar la conexión.
En Tableau Desktop, puede crear un parámetro directamente desde el cuadro de diálogo “SQL personalizado” o usar cualquier parámetro incluido en el libro de trabajo. Si crea un nuevo parámetro, lo encontrará disponible para su uso en el libro de trabajo como cualquier otro parámetro. Consulte Crear parámetros para obtener más información.
Para creación web (en Tableau Cloud o Tableau Server), puede usar un parámetro existente publicado desde Tableau Desktop. No puede crear un parámetro nuevo en la creación web.
Para añadir un parámetro a una consulta de SQL personalizada
- En la página de fuente de datos, en el lienzo, sitúe el ratón sobre la tabla hasta que se muestre el icono Editar y haga clic en él.
- En la parte inferior del cuadro de diálogo, haga clic en Insertar parámetro.
- Seleccione un valor constante en la declaración SQL y luego, en el menú desplegable, Insertar parámetro, seleccione el parámetro que desea usar. Si todavía no ha creado ningún parámetro, seleccione Crear parámetro nuevo. Siga las instrucciones de la sección Crear parámetros para crear un parámetro.
Nota: Los parámetros solo pueden reemplazar valores literales. No pueden reemplazar expresiones ni identificadores, como nombres de tablas.
En el siguiente ejemplo, la consulta personalizada de SQL indica todos los pedidos marcados con prioridad urgente. En la declaración de consulta personalizada de SQL, la prioridad de los pedidos es el valor constante. Si desea cambiar la conexión para ver los pedidos con prioridad Alta, debe modificar la fuente de datos.
En lugar de crear y mantener muchas variantes de la misma consulta, puede reemplazar el valor constante de prioridad de los pedidos por un parámetro. El parámetro debe contener todos los valores posibles de Prioridad de pedido.
Después de crear un parámetro, puede insertarlo en la declaración SQL para reemplazar el valor constante.
Cuando termine de modificar la conexión, el nuevo parámetro se mostrará en el área Parámetros, en la parte inferior del panel Datos, y el control de parámetros se mostrará en la parte derecha de la vista. La conexión se actualiza a medida que selecciona diferentes valores.
Nota: Si está utilizando un extracto, debe actualizarlo para que se reflejen los cambios en el parámetro. Publicar una fuente de datos que utiliza parámetros SQL personalizados incluye los parámetros. Los parámetros se transfieren a los libros de trabajo que se conecten a la fuente de datos.
Compatibilidad de Tableau Catalog para SQL personalizado
La compatibilidad con SQL personalizado en Tableau Catalog depende de la consulta de SQL personalizado.
Tableau Catalog está disponible como parte de la oferta de Data Management para Tableau Server y Tableau Cloud. Para obtener más información sobre Tableau Catalog, consulte "Acerca de Tableau Catalog" en la ayuda de Tableau Server o Tableau Cloud.
Consultas compatibles
El catálogo es compatible con consultas SQL personalizadas que cumplen con el estándar ANSI SQL-2003, con tres excepciones conocidas:
- Expresiones de zonas horarias
- Expresiones de conjuntos múltiples
- Parámetros de Tableau
A partir de la versión 2021.4, Tableau Catalog también admite el uso del dialecto Transact-SQL (T-SQL) en SQL personalizado, con las siguientes excepciones:
- Sugerencias
- Cláusulas FOR
- Las funciones OPENROWSET, OPENXML y OPENJSON
- Funciones escalares ODBC
- FOR SYSTEM_TIME
- TABLESAMPLE
- La expresión MATCH
- La expresión CONTAINS
- La expresión FREETEXT
A partir de Tableau Cloud de octubre de 2023 y Tableau Server 2023.3, Tableau Catalog también ofrece compatibilidad con consultas de SQL personalizado que utilizan PostgreSQL, con las siguientes excepciones:
- Función XML
- Funciones y operadores JSON
Características y funcionalidades compatibles
Catalog es compatible con la siguiente funcionalidad adicional para fuentes de datos, libros de trabajo y flujos con conexiones que utilizan los controladores MySQL o PostgreSQL, por ejemplo, Amazon Aurora para MySQL, Amazon RedShift, Pivotal Greenplum Database, MemSQL, Denodo y otros.
- Función MySQL GROUP_CONCAT
- Arreglos PostgreSQL
- Función PostgreSQL EXTRACT()
Otros escenarios y funcionalidades de SQL personalizados pueden funcionar, pero Tableau no los prueba ni ofrece compatibilidad de forma específica.
Dependencia compatible
Cuando un activo usa SQL personalizado, aparece un mensaje con un botón de Mostrar consulta SQL personalizada en la pestaña Linaje de la página del activo. Haga clic en el botón para ver el SQL personalizado utilizado en la conexión. Luego, si desea copiar el SQL personalizado al portapapeles, haga clic en Copiar.
Algunos tipos de SQL personalizado pueden hacer que el linaje ascendente esté incompleto. Cuando esto sucede, aparece un mensaje con esa información. Es posible que las tarjetas de detalles de campo no contengan enlaces a columnas conectadas o que no muestren ninguna columna conectada. Es posible que las tarjetas de detalles de columna no contengan enlaces a campos que utilicen la columna o que no muestren ningún campo.
Si está examinando el linaje de una tabla, tenga en cuenta que Catalog no puede mostrar información de columnas en el linaje para metadatos de tablas recopiladas mediante SQL personalizado. Sin embargo, si otros activos usan la misma tabla y no usan SQL personalizado, Tableau Catalog podría mostrar información sobre las columnas que ha descubierto a través de estos otros activos.
En la siguiente captura de pantalla, la tabla factAccountOpportunityByQuarter se indexó porque la utilizaba una fuente de datos. Sin embargo, debido a que una consulta SQL personalizada hace referencia a ella, la información de la columna no está disponible.
En caso de que más de una fuente de datos, libro de trabajo o flujo utilice una tabla, cualquiera de los activos descendentes de esa tabla que utilizan una consulta SQL personalizada se excluyen cuando se aplican filtros de nivel de columna. Como resultado, en la dependencia aparecen menos activos descendentes de los que realmente se utilizan.
Para obtener más información acerca de usar el linaje, consulte "Usar el linaje para análisis de impacto" en la ayuda de Tableau Server(El enlace se abre en una ventana nueva) o Tableau Cloud(El enlace se abre en una ventana nueva).