Home
» Power BI
»
Tabla virtual de LuckyTemplates | 5 consejos y trucos para la depuración
Tabla virtual de LuckyTemplates | 5 consejos y trucos para la depuración
La tabla virtual de LuckyTemplates es mi tema DAX favorito personal. Son la clave para desbloquear todo el poder de DAX. Las tablas virtuales son el único tipo de tablas dentro de LuckyTemplates que son completamente dinámicas y existen problemas que solo se pueden resolver aplicando técnicas de tablas virtuales dentro de sus medidas. Puedes ver el video completo de este tutorial en la parte inferior de este blog.
En este tutorial, voy a compartir mis 5 mejores consejos y trucos que he acumulado a lo largo de los años y que realmente me han ayudado a comprender y depurar lo que sucede en las tablas virtuales de Power Bi.
El ejemplo que voy a analizar hoy es del y proviene de un miembro llamado Dave C, que trabaja en seguridad industrial. Dave tenía una serie de puntajes de seguridad y quería normalizarlos para que el puntaje máximo fuera 10, y luego presentar dinámicamente el enésimo en esa lista.
Inicialmente, pensamos en hacer esto a través de una medida simple , pero luego nos dimos cuenta de que muchos de sus valores normalizados tienen vínculos. Por ejemplo, si desea el séptimo elemento de la lista, no habrá un número siete en un RANKX. No hay una manera fácil de sacar eso de una condición de filtro. Así que decidimos una medida basada en para que siempre contara hacia atrás el número n.
Esto es similar a cuando estás sacando la séptima carta de una baraja, cuentas siete cartas y luego volteas esa pila de siete, y la carta en la parte inferior es la que quieres. Vamos a hacer el equivalente de eso en una medida TOPN.
Sugerencia n.º 1: use una herramienta externa para visualizar su tabla virtual de LuckyTemplates
Puede usar DAX Studio o Tabular Editor. En este ejemplo, estoy usando Tabular Editor 3 (TE3). Es técnicamente posible hacer esto usando la pestaña Modelado - Nueva tabla, pero eso va a crear tablas físicas dentro de su modelo de datos. Vas a tener que alternar manualmente entre eso y el editor y es solo una forma lenta y difícil de hacerlo.
Cuando vea la forma dinámica en que se puede hacer a través de una herramienta externa, verá el beneficio.
Entonces, dentro del TE3, creamos una nueva consulta DAX. Podemos tomar nuestra medida inicial y copiarla en nuestra consulta DAX.
Si recuerda, las consultas DAX siempre comienzan con EVALUATE . Vamos a recibir un error inicialmente porque las consultas DAX devuelven tablas . Esta fue una medida con las dos últimas variables que son escalares. Lo que podemos hacer aquí es cambiar el valor de retorno , que es mi siguiente consejo.
Sugerencia n.º 2: depure su tabla virtual de LuckyTemplates en partes usando variables
Puede depurar tablas virtuales de la misma manera que lo hace con las medidas: pieza por pieza, cambiando el valor de retorno. Comencemos con la primera tabla virtual, la vEvalTable . Simplemente reemplazamos el valor de RETORNO (Final) con nuestra primera variable (VAR). Y puede ver que el error desaparece porque la consulta DAX ahora está obteniendo una tabla.
En vEvalTable, estamos tomando los datos originales, que son los puntajes de seguridad, y los estamos normalizando y agregando esa columna de valor normalizado a la tabla virtual. Tenemos el índice, el valor de la región y el valor normalizado. Podemos ordenar estos valores hacia arriba o hacia abajo y filtrar los valores también.
Esto nos está dando exactamente lo que esperábamos. Devuelve 50 filas, que es el conjunto de datos completo. Todo va bien, así que bajemos y exploremos la siguiente tabla, que es vTableTopN . En esta tabla, estamos tomando TOPN usando el valor del control deslizante del elemento n. En este ejemplo, tenemos ese séptimo valor de la tabla virtual anterior (vEvalTable), y estamos tomando ese TOPN en función del valor normalizado en orden descendente.
Entonces, cuando cambiamos nuestra función RETURN a eso, se cae y no obtenemos nada. Echemos un vistazo a por qué, porque este es un concepto realmente importante para depurar y comprender las tablas virtuales.
Si observamos la fórmula, tenemos el valor del control deslizante del elemento N como el principal sospechoso aquí. Volviendo a LuckyTemplates, podemos ver que esto es básicamente solo cosechar el número siete. Tenga en cuenta que los controles deslizantes existen dentro del contexto de una página .
Entonces, en este caso, cuando buscamos depurar esa tabla fuera de contexto, ese valor seleccionado no tiene contexto a su alrededor . No tiene nada en términos de poder sacar ese número. Estábamos obteniendo un TOPN, pero no sabemos cuál es la N en TOPN porque ese valor seleccionado devuelve un espacio en blanco.
¿Cómo manejamos eso? Veamos la medida de valor seleccionada. La mayoría de las veces, siempre prestamos atención al primer parámetro en , pero hay un segundo parámetro, que es una alternativa. Esto nos lleva a mi tercer consejo.
Sugerencia n.º 3: use el parámetro alternativo en SELECTEDVALUE
Lo que sucedió aquí es que ha estado sacando el espacio en blanco como suplente. Pero lo que queremos hacer (para propósitos de depuración) es que queremos poner un valor real aquí . Entonces, ponemos el número 7 y guardamos eso.
Ahora tenemos algunos valores. Está devolviendo siete filas, que es exactamente lo que debería debido a ese valor TOPN de siete.
Continuemos por la línea hasta la siguiente tabla virtual, que es vTableNthItem . Tenemos esa pila de siete cartas, y esta mesa básicamente está volteándola. Estábamos en orden descendente en la tabla anterior y ahora estamos en orden ascendente.
Si tomamos y copiamos esto en la sección RETORNO, obtenemos los resultados. Es interesante que no devuelva una fila. Está devolviendo tres filas porque estas tres están empatadas. Esa es exactamente la razón por la que usamos TOPN en lugar de RANKX, en este caso.
Ahora vamos a Result . Si copiamos el resultado del VAR en la sección RETORNO, esto llega a mi cuarto consejo.
Consejo n.º 4: use { } para convertir escalares en tablas
Dentro de la fórmula, tomamos el máximo ( ) de ese vTableNthItem y devolvemos el valor normalizado. Esto podría ser , podría ser , podría ser . Es solo un agregador que devuelve ese valor en esa tabla. Entonces, si copiamos esto, nos dará un error porque ahora es un escalar.
Pero este es mi cuarto consejo, que está en el contexto de la depuración. Lo que puede hacer es simplemente agregar los corchetes . Al hacerlo, convierte ese escalar en una tabla.
Y luego, lo que tenemos aquí es solo una verificación de error final, que es si resulta que la tabla de evaluación es más pequeña que el número de filas, devolverá datos insuficientes. Pero sabemos que en este caso nuestro conjunto de datos es lo suficientemente grande. Sin embargo, podemos probarlo escribiendo Final . Nuevamente, debido a que es un escalador, también necesitamos los corchetes y obtenemos el mismo valor aquí.
Hemos profundizado y depurado esta tabla virtual, y hemos usado el valor alternativo en SELECTEDVALUE para evitar que se salga de contexto. Ahora solo quiero mostrarles un consejo adicional que encontré realmente útil.
Consejo #5: Use CONCATENATEX/UNICHAR para convertir una tabla en un escalar
En el contexto de la depuración, querrá ver en LuckyTemplates cómo se ve esa tabla. La regla general es que una medida solo puede devolver un escalar, no una tabla. Pero, hay un truco que les voy a mostrar que le permite casi devolver una mesa.
Echemos un vistazo a esta medida, que es la Tabla virtual visualizada , y aquí tenemos todas las tablas virtuales que teníamos inicialmente. Por ejemplo, queremos mostrar, digamos en la primera página del informe, el vTableTopN.
Puede utilizar esta función . De hecho, puede tomar ese nombre de tabla virtual (vTableTopN) y tomar los valores en esa tabla y concatenarlos. Puede crear algo que básicamente se parece a una mesa virtual.
Si tomamos esta medida, debemos volver a LuckyTemplates y colocarla en una medida de tarjeta. Por lo general, la tabla da un error, pero a través de CONCATENATEX, convirtió esa tabla en un escalador. Puede ver que es bastante primitivo, pero devuelve exactamente lo que esperamos y lo hace de forma dinámica.
Es una forma de llevar una tabla a una medida y mostrarla en su informe. Es un truco de depuración realmente útil. Proporcionará un buen formato en un valor de tarjeta que puede usar en un informe.
Con suerte, este tutorial le dará algo de reflexión en términos de trabajar con una tabla virtual de LuckyTemplates. Estos son algunos consejos y trucos adicionales para comprender lo que sucede dentro de sus mesas virtuales. Espero que hayas encontrado eso útil.
Visite nuestro sitio web para obtener más tutoriales de LuckyTemplates y consulte los enlaces a continuación para obtener más contenido relacionado.