Tableau Postgres Repository: Como ver los grupos, usuarios y el acceso más reciente de Tableau Server

En los últimos meses he visto cada vez más interés en analizar y obtener valor adicional del PostgreSQ Repository de Tableau Server. La base de datos donde Tablau Server almacena datos de las interacciones de los usuarios, actualizaciones de extractos, workbooks, Sites, projectos, usuarios y mucho más. Si quieres saber más sobre esta base de datos y como poder acceder a ella, echa un vistazo al último blog que escribí al respecto.

Hoy mostraré como podemos crear una fuente de datos que nos devuelva el listado completo de Sites, grupos y usuarios que existen en nuestro Tableau Server así como la fecha del último acceso de cada usuario. Una manera muy útil de gestionar usuarios y llevar un control de aquellos que no están usando el servicio, en el caso de que tengamos un número de licencias limitadas y queramos utilizar dicha información para mover ciertas licencias de unos usuarios, por ejemplo los que no se han conectado en X meses, a otros.

Cosas a tener en cuenta

Es importante tener los siguientes aspectos en cuenta antes de empezar a realizar consultas al repositorio de Tableau Server:

  1. Algunas de las tablas disponibles en el Repositorio son bastante grandes, y realizar consultas en vivo puede acabar teniendo un impacto en el rendimiento del servidor. Por ello, siempre se recomienda usar extractos una vez nos hemos conectado a los datos que necesitamos en lugar de usar conexiones en vivo.
  2. Hay una gran cantidad de tablas en la base de datos y muchas de ellas con una cantidad de columnas considerable. Incluso algunos de ellos puede que no te aporten los datos que buscabas o que crees que tendrían en base al nombre que tienen. Conviene tener siempre abierto a la vez el data dictionary y usarlo como referencia tanto como sea necesario. De nada nos servirá crear un dashboard estupendo si estamos obteniendo datos erróneos. El data dictionary está disponible en este enlace.
  3. Verás que hay ciertas tablas que parecen cubrir temas similares, pero unas con el prefijo “hist_” y otras no. Por ejemplo, existe la tabla hist_groups y la tabla groups. Tablas con el prefijo “hist_” contienen datos que eran relevantes en un punto concreto de tiempo. Por lo que en nuestro ejemplo, hist_groups contendrá grupos de usuarios que ya no existen en el servidor, pero existieron en el pasado y fueron borrados en algún momento. Si no estás interesado en datos históricos y tan sólo quieres una fotografía de la situación actual del servidor, te recomiendo olvidarte de las tablas “hist_”.
  4. Para el caso particular que nos ocupa, ten en cuenta que grupos y usuarios (así como projectos, workbooks y otro contenido) son independientes en cada Site. Por lo tanto, necesitaremos utilizar también la tabla de Sites para obtener la relación entre Sites, Grupos y Usuarios.
  5. Como he dicho antes, cada tabla puede tener un número de columnas considerable y probablemente casi nunca necesitaremos todos. Ocultar los campos que no necesitemos nos simplificará la tarea muchísimo. Especialmente si empezamos a crear joins entre distintas tablas con nombres de campos similares.

Paso 1: Obtener Sites y Grupos

Como hemos necionado antes, Tableau Server está ordenado en Sites independientes, pudiendo cada una tener distintos grupos, usuarios, bases de datos, etc. Por lo que si en tu servidor tienes más de un Site, te conviene utilizar también la tabla de Sites para identificar la relación de cada usuario y grupo con su Site correspondiente. Para ello, tras conectarnos a la base de datos PostgreSQL de Tableau Server, crearemos una Join entre la tabla de Sites y la de Groups del siguiente modo:

Ya tenemos el primer paso listo que nos relaciona Sites y grupos. Con el que podemos obtener la relación de grupos en cada Site, como en la siguiente imagen:

Siguiendo mi consejo anterior, voy a ocultar todos los campos que necesito y me voy a quedar tan sólo con Name de la tabla de Sites y Id (Groups), Name (Groups) y Site Id de la tabla de Groups.

Paso 2: Obtener los Usuarios de cada Grupo

Tenemos ya los grupos pero necesitamos los usuarios que forman parte de cada grupo. Lo primero que nos puede venir a la mente es que usando la tabla Users nos podría bastar, pero no es el caso, y es cuando el data dictionary resulta muy útil. Tenemos que pensar que cada grupo contendrá en principio más de un usuario pero además un usuario puede pertenecer a más de un grupo, por lo que la relación entre grupos y usuarios es una asocación ManyToMany (de muchos a muchos). Afortunadamente el repositorio de Tableau Server cuenta tambíén con una tabla con esta información: group_users. Por lo que podemos unir esa tabla a groups para obtener un listado de todos los usuarios pertenecientes a cada grupo. La join a realizar debe ser groups.id = group_users.group_id como se muestra en la imagen superior. Debemos tener también en cuenta que esto hará aumentar nuestro número de filas. Si antes disponíamos de una fila por cada grupo de cada Site, ahora tendremos un registro por cada usuario de cada grupo de cada Site.

Ahora ya contamos con un campo con el identificador de cada usuario que pertenece a la tabla group_users pero aparte de eso no tenemos realmente ninguna información aún que nos permita identificar fácilmente quien es cada usuario. Para esto, pasemos al siguiente paso.

Paso 3: Enlazar el Id de Users con el Id de System Users

Para obtener información más relevante de cada usario, como el nombre de usuario, el email o el apodo, necesitamos usar la tabla system_users. Pero por desgracia, no hay forma de unir esta tabla a la de groups ni a la de group_users. Por lo que necesitaremos otro paso intermedio: la tabla users. La cual nos permitirá relacionar cada user_ con cada system_user_id ¿cómo? con una join entre la tabla del paso anterior, groups_users y la tabla users en base a dos campos: group_users.user_id = users.id y site.id = users.site_id, tal como se muestra en la imagen siguiente:

¿Qué información obtenemos en este paso? pues que sea de utilidad para un dashboard no gran cosa, pero ahora tendremos además de un user id, también un system user id, que es el campo que necesitamos para cruzar con la tabla system_users. De nuevo, conviene ocultar todos los campos que no necesitemos para reducir el volumen de datos que estamos utilizando y también ganar algo de claridad. De la tabla users nos vamos a quedar sólo con los campos Id (Users), Login At, Site Id (Users) y System User Id.

Paso 4: Obtener información relevante de los usuarios

Este es el último paso para obtener todos los datos que necesitamos. Como tenemos ahora el System User Id de la tabla users, podremos hacer una nueva join entre dicha tabla y el Id de la tabla system_users. Obteniendo así información mucho más relevante de cada usuario, como el nombre, email, etc. La join debe ser como en la siguiente imagen:

¡Ya tenemos todos los datos que necesitamos! pero es importante comprobar que son correctos, por lo que podríamos crear una visualización muy sencilla, para comprobar para cada Site que tenemos el número correcto de grupos y usuarios por grupo así como usuarios totales, pudiendo comparar los datos de la imagen inferior con los que podemos consultar fácilmente desde el la UI de Tableau Server.

Paso 5: Crear una visualización para monitorizar grupos y usuarios en cada Site

Hora de analizar los datos y crear alguna visualización que de respuesta las preguntas que planteábamos al principio. Por ejemplo, podríamos visualizar para cada Site, todos los grupos existentes y el número de miembros usuarios de cada grupo, así como un listado de todos los ususarios, una marca que indique que usuarios es miembro de que grupo y además identificar en rojo aquellos usuarios que no se han conectado a Tableau Server en los últimos 100 días, y crear algo así:

Espero que lo encontréis útil.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *