Heredar el formato de la medida en Power BI con Deneb

csalcedodatabi Power BI Deneb DAX
Dos paneles unidos por flechas. A la izquierda el editor de Deneb: la tabla que compara Ventas con formato fijo, que sale como 19,903.7 K y ha perdido el símbolo de moneda, frente al formato heredado que la muestra como $19,904 K; abajo, las columnas de apoyo __format y __formatted del conjunto de datos. A la derecha, el TMDL del grupo de cálculo Herencia donde se define cada formato

En resumen — Un elemento de cálculo con formato fijo se lo impone a todas tus medidas, aunque no compartan unidad. SELECTEDMEASUREFORMATSTRING() hace que cada una conserve el suyo, y Deneb lo recibe ya resuelto.

📥 El proyecto de Power BI y el spec están gratis al final del artículo.

El problema aparece al reusar el elemento

En el artículo anterior el grupo de cálculo se aplicaba a una sola medida y todo cuadraba. Este empieza donde aquel termina: qué pasa cuando lo aplicas a la segunda.

Un elemento «en miles» es útil: divide entre mil y añade una K. Le pones un formato fijo, #,0.0 "K", y funciona.

Funciona mientras todas tus medidas compartan formato. En cuanto lo aplicas a una medida de dinero, le quita el símbolo de moneda.

Ventas bajo dos elementos de cálculo idénticos salvo en su formato. Con el formato fijo el importe sale como 19,903.7 K, señalado en rojo por haber perdido el símbolo de moneda; con el heredado sale como $19,904 K y lo conserva. Debajo de cada valor, la cadena de formato que lo produjo

Mira la fila de Ventas. Con el formato fijo el importe sale como 19,903.7 K y ha perdido el símbolo de moneda: deja de leerse como dinero. Con el heredado sale $19,904 K, porque parte del formato que la medida ya tenía.

Lo que se ve por dentro

El formato que Deneb recibe para cada medida lo explica:

ElementoVentasUnidadesMargen %
Original\$#,0#,00.0%
Miles (formato fijo)#,0.0 "K"#,0.0 "K"#,0.0 "K"
Miles (formato heredado)\$#,0 "K"#,0 "K"0.0% "K"

En la fila del formato fijo las tres cadenas son idénticas. El elemento las aplasta al mismo molde y pierde la moneda y el porcentaje por el camino.

En la de abajo cada una vuelve a la suya, con la K añadida al final.

La función que lo arregla

SELECTEDMEASUREFORMATSTRING() devuelve el formato que ya tenía la medida. Se concatena lo que quieras añadir y listo:

Formato fijo contra formato heredado
calculationItem 'Miles (formato fijo)' = DIVIDE( SELECTEDMEASURE(), 1000 )
  formatStringDefinition = "#,0.0 ""K"""

calculationItem 'Miles (formato heredado)' = DIVIDE( SELECTEDMEASURE(), 1000 )
  formatStringDefinition = SELECTEDMEASUREFORMATSTRING() & " ""K"""

La diferencia entre las dos líneas es toda la diferencia entre un grupo de cálculo que sirve para una medida y otro que sirve para todas.

Nota

Heredar no arregla lo que la operación rompe. Dividir un porcentaje entre mil sigue dando un número sin sentido: 0.0% K. Lo que se conserva es el formato, no la lógica. Si un elemento no debe aplicarse a ciertas medidas, eso se resuelve en el propio DAX.

Pruébalo

El modelo es Contoso Retail y es público. El archivo de este artículo trae el grupo de cálculo montado y la página del escenario lista.

Proyecta la columna del grupo junto a dos medidas que no compartan unidad —una de dinero y un porcentaje— y apunta las etiquetas a __formatted. La diferencia entre las dos versiones del elemento se ve sin buscarla.

Si montas el visual desde cero en Deneb 2.0, ten presente que __format y __formatted vienen apagados en un visual nuevo: así se activan. El archivo de descarga ya los trae activados.

Recursos

Descargar gratis los recursos de este artículo

  • El proyecto de Power BI con el grupo de cálculo y las tres medidas de unidades distintas
  • El spec de Deneb suelto, en JSON, para leerlo o pegarlo en otro informe sin abrir Power BI

Es un proyecto PBIP dentro de un .zip: descomprime y abre el archivo .pbip. El archivo no trae datos para pesar poco: al abrirlo pulsa Actualizar y los carga de Contoso Retail en unos segundos.

¿Te resultó útil este artículo?

Tu apoyo me permite seguir creando contenido de calidad.

¡Contáctame!