Función USERNAME y Detalles De Fina Coquetería en Tus Reportes.
En este artículo te hablaré de cómo crear una medida que detecte el nombre de usuario que se encuentra leyendo el reporte y agregar una etiqueta que lo salude.
— TABLA DE CONTENIDO DE ESTE ARTÍCULO
1. Etiqueta de Usuario en Reporte
a. Función USERNAME
b. Tabla con Usuarios
c. Determinar nombre con LOOKUPVALUE
En el lenguaje DAX tenemos un conjunto de funciones que nos retorna información acerca del sistema, el usuario y su conexión.
Específicamente son las funciones USERNAME, USERPRINCAPALNAME y USEROBJECTID.
Estas funciones, aunque fáciles de usar, son poco implementadas ya que mayoritariamente se empelan para crear las expresiones de privacidad a nivel de fila (RLS) mediante la fucionalidad en Power BI desktop de administración de roles, una temática muy bonita que estaremos desarrollando en detalle en nuestro próximo libro: Power BI para Reportes en Informes (Muy pronto en el 2020).
En este artículo vamos a utilizar la función USERNAME para añadirle un detalle de fina coquetería a nuestros reportes.
Vamos al tema.
Etiqueta de Usuario en Reporte
Imaginemos que tenemos el siguiente reporte:
Reporte que vamos a subir al servicio de Power BI y que agregaremos a un grupo de trabajo para que diversos usuarios puedan leer y ver qué pasa en la compañía.
— So far, so good …
Qué tal si le agregamos una etiqueta que salude al usuario que esta conectado leyendo el reporte, mejor dicho:
— ¿Lo viste?
Un pequeño detalle de fina «coquetería» para hacer nuestro reporte más «sexy».
Chistes aparte, en caso de que en la imagen anterior no se vea bien hagamos un zoom para apreciarlo mejor:
— ¿Cómo lo logramos?
Es lo que vamos descubrir enseguida →
Función USERNAME
El «nombre» del usuario lo podemos obtener gracias a la función USERNAME en el lenguaje DAX.
Función que de tipo escalar que no requiere ningún parámetro ya que: devuelve un texto que señala la conexión actual, es decir, el dominio del usuario y el nombre del usuario.
En otras palabras, el dominio y nombre en este formato: nombre-dominio\nombre-usuario.
Básicamente que son las credenciales de conexión del usuario, por lo tanto, si estamos en Power BI de Escritorio o en el servicio de Power BI esto va a variar, debido a que:
.
- En Escritorio Aparecerá: dominio/nombre, ejemplo: LENOVO-Y700\Miguel
- En el Servicio en la Nube: aparecerá el correo, ejemplo: miguelcaballero@ehf.onmicrosoft.com
.
Como vemos, no hay garantía de obtener el nombre de forma limpia, a razón de que en un equipo local el usuario puede registrado su equipo como: mcaballero, Miguel, MiguelCaballero, MiguelC, etc..
Claro en mi caso, puedo extraer todo lo que se encuentra en la parte izquierda del «\» , así:
InfoInicio :=
— Determinación de hora del día para saludo
VAR Hora =
HOUR ( NOW () )
VAR Saludo =
SWITCH (
TRUE ();
Hora < 12; «buenos días»;
AND ( Hora >= 12; Hora < 18 ); «buenas tardes»;
«buenas noches»
)
— Extracción del nombre de usuario
VAR DominioyNombreUsuario =
USERNAME ()
VAR PosicionIncialDeNombreDeUsuario =
SEARCH ( «\»; DominioyNombreUsuario )
VAR NombreUsuario =
MID (
DominioyNombreUsuario;
PosicionIncialDeNombreDeUsuario + 1;
LEN ( DominioyNombreUsuario )
)
— Resultado
VAR Resultado = «Hola « & NombreUsuario & «, « & Saludo
RETURN
Resultado
Por cierto, si no tienes ideas de variables, puedes estudiar una introducción aquí.
Pero no es útil para todos los casos, igualmente, en el servicio de Power BI en la nube sería diferente dado que es el correo, además allí es donde sería más útil en grupo de trabajo con varios usuarios que puedan leer el reporte.
— ¿Cómo lo hacemos?
Tabla de Usuarios
En una nueva tabla, la cual podemos crear con la funcionalidad de especificar datos, creamos una primera columna donde listamos las diferentes opciones de dominio usuario que arroja en equipos de escritorio, además, en esa primera columna también registramos todos los correos.
En una segunda columna ponemos los nombres correctos de usuarios, claro podeos poner sólo los correos que es lo más útil, adicionalmente, son fáciles de conseguir y obtener una lista si llega a ser un número de usuarios considerable, no obstante, les ilustro que también es posible con los dominios en equipos de escritorio:
Dicha tabla no queda relacionada con ninguna otra tabla en el modelo, es más, lo mejor sería ocultarla en la vista de informe.
Determinar Nombre con LOOKUPVALUE
La función LOOKUPVALUE podemos asemejarla a la función BUSCARV (aunque no son iguales), pero para lo que necesitamos aquí podeos pensarlo de esa manera.
LOOKUPVALUE tiene un número indeterminado de parámetros, sin embargo, vamos asumir que tiene tres para lo que necesitamos aquí
= LOOKUPVALUE ( ColumnaDeResultado, ColumnaDeBusqueda, ValorAbuscar )
Como podemos ver es sencillo, por lo tanto, ya podeos arreglar nuestra expresión:
InfoInicio :=
— Determinación de hora del día para saludo
VAR Hora =
HOUR ( NOW () )
VAR Saludo =
SWITCH (
TRUE ();
Hora < 12; «buenos días»;
AND ( Hora >= 12; Hora < 18 ); «buenas tardes»;
«buenas noches»
)
— Extracción del nombre de usuario
VAR CredencialesDeUsuario =
USERNAME ()
VAR NombreUsuario =
LOOKUPVALUE ( Usuarios[Nombre]; Usuarios[Usuario]; CredencialesDeUsuario )
— Resultado
VAR Resultado = «Hola « & NombreUsuario & «, « & Saludo
RETURN
Resultado
Eso sería todo por el presente, artículo.
Estamos charlando en la sección de comentarios.
— Miguel Caballero