Formateo de moneda con y sin decimales en fórmula IF

Un usuario Pregunto ✅

astanfo

Tengo 3 tablas que he conectado a través de relaciones. Una tabla tiene la estructura de ubicación, otra tiene los gastos de cada ubicación y otra tiene los widgets que tiene cada estructura. Tengo una medida que toma los gastos y divide los gastos por la suma (tabla relacionada (widget), widget.widget). No puedo compartir los datos debido a la privacidad de la empresa. Estoy tratando de averiguar cómo tomar el Costo por widget y si la medida es mayor a 1,000 o menor a -1,000 entonces muestre la moneda con cero decimales. Si el número es inferior a 1000 o superior a -1000, muestre la moneda con 2 decimales. NO QUIERO QUE SE MUESTRE EL VALOR COMO TEXTO porque entonces no puedo usar el número en un gráfico o cuadro. ¿Alguien sabe qué fórmula DAX sería mejor para la medida? Al configurar la medida, probé la siguiente fórmula, pero muestra el valor con ceros finales que no necesito. Además, tengo esta medida configurada como Decimal para el tipo de datos y Moneda general $ para el formato.

FORMATO = SI( O([Cost_Per_Widget]>1000, [Cost_Per_Widget]<-1000), INT([Cost_Per_Widget]), convertir (FIJO ([Cost_Per_Widget]2), MONEDA))

Ejemplos de valores devueltos: $8.130000000000001, $75.26000000000000005, $425.269999999999998

Usaría la función Dollar (), que está en Excel, pero desafortunadamente no existe tal función en Power BI.

Gracias

greg_deckler

Entonces, esto te dará todo menos los $

Column = IF( OR([Value]>1000, [Value]<-1000), FIXED([Value],0), FIXED([Value],2))

greg_deckler

En respuesta a greg_deckler

Ahora que estoy probando esto, creo que hay un error en CURRENCY. Si envuelvo mis declaraciones FIJAS en MONEDA, pone a cero los decimales. Esto no parece lo que dice la documentación:

De: https://docs.microsoft.com/en-us/dax/currency-function-dax

La función MONEDA redondea hacia arriba el quinto decimal significativo, en valor, para devolver el cuarto dígito decimal; el redondeo se produce si el quinto decimal significativo es igual o mayor que 5. Por ejemplo, si el valor es 3,6666666666666, la conversión a moneda arroja $3,6667; sin embargo, si el valor es 3,0123456789, la conversión a moneda devuelve $3,0123.

Ese no es el comportamiento que estoy experimentando. Sin embargo, dicho esto, me pregunto si esto aún estaría en conflicto con el formato especificado en la cinta para una medida o columna que debe especificar 0 o 2 decimales y, de cualquier manera, el resultado que obtenga no será el que desea. .

Tad17

Hola @astanfo

Solo necesita envolver la parte de su fórmula que le está dando la solución en una función de FORMATO

FORMATO DAX: https://docs.microsoft.com/en-us/dax/format-function-dax

Luego use un formato personalizado para cada uno de sus posibles resultados, ya sea dándole decimales o no:

Formatos numéricos personalizados para FORMAT DAX: https://docs.microsoft.com/en-us/dax/custom-numeric-formats-for-the-format-function

Si esto ayuda, por favor kudo.

Si esto resuelve su problema, acéptelo como una solución.

astanfo

En respuesta a Tad17

¿En qué envolvería la fórmula? Divisa()? Si hago eso, todavía me dará múltiples decimales.

https://docs.microsoft.com/en-us/dax/currency-function-dax

Tad17

En respuesta a astanfo

Necesitarás algo como:

FORMATO = SI( O([Cost_Per_Widget]>1000, [Cost_Per_Widget]<-1000), FORMATO([Cost_Per_Widget]"$#,##0;($#,##0)"), FORMATO([Cost_Per_Widget]"$#,##0.00;($#,##0.00)")

No estoy seguro de si eso es del todo correcto, pero debería estar cerca.

Consulte también este artículo: https://radacad.com/custom-format-fields-and-measures-in-power-bi

Me gusta usar FIXED, pero no te da el «$»

greg_deckler

En respuesta a Tad17

@ Tad17 pero usando FORMATO así, ¿no se convertirá eso simplemente en Texto?

Tad17

En respuesta a greg_deckler

@Greg_Deckler Sí, me di cuenta de eso, pero de lo contrario no estoy seguro de cómo obtener el lugar decimal condicional. ¿Puede @astanfo crear una columna calculada usando su método y luego simplemente cambiarla al formato de moneda en la pestaña de modelado?

astanfo

En respuesta a Tad17

@ Tad17 No puedo crear una columna calculada. Simplifiqué la explicación de mis datos para ver si hay solución para una medida. Estoy usando calcular (), filtro cruzado () y cambiar () dentro de mis medidas, por lo que debe seguir siendo una medida. ¿Alguna otra recomendación? ¿Sabe si el comando Dollar() se creará en el futuro?

Además, necesito todo esto en una sola medida. Entonces, cuando filtro $, el número se mostrará como una moneda sin decimales. Cuando filtro en $ por widget, el número se mostrará con dos decimales. Es importante para mí tener un filtro para esto en lugar de mostrar dos columnas, porque ahorra espacio en la página y una persona que está viendo la página puede querer mirar $ mientras que otra persona puede querer mirar solo $ por widget.

astanfo

En respuesta a greg_deckler

Hola a todos, tanto Fixed() como Format() convierten el número en texto. Por lo tanto, el número aparecerá bien en una tabla de matriz, pero cuando se coloque en un gráfico de líneas u otro gráfico, la medida no funcionará.

greg_deckler

En respuesta a astanfo

Así que probé una idea que tenía para usar la técnica de formato personalizado (solo para visualización) utilizada en la duración de Chelsie Eiden. https://community.powerbi.com/t5/Quick-Measures-Gallery/Chelsie-Eiden-s-Duration/mp/793639#M389

Creé 2 medidas y tenía sus formatos de visualización como $#,### y $#,###.##. Estos funcionaron muy bien. Los deja como números pero muestra el formato correcto. Mi pensamiento entonces fue escribir una tercera medida que seleccionara entre estas dos medidas. Esto también funciona, pero se ejecuta en conflicto con los lugares decimales de la cinta de formato como me temía. Se adjunta PBIX.

astanfo

En respuesta a greg_deckler

@Greg_Deckler Hola Greg, ¿puedes explicar con más detalle la solución sugerida?

Si utilizo una medida para mostrar el formato como $#,##0 y otra medida para mostrar el formato como $#,##0.#0, todavía tendré que usar una medida para seleccionar estas medidas. ¿Está diciendo que la medida (llámela SELECCIONAR) que selecciona las dos medidas de formato formateará el número según el formato de las medidas de formato en lugar del formato de la medida SELECCIONAR?

greg_deckler

En respuesta a astanfo

Correcto, el problema de encontrar una solución a esta solución es que, dado que todo se reduce a una sola medida, el formato en la cinta será el árbitro final de cuántos decimales se muestran. Esto solo se puede establecer en una sola cosa, ya sea 0 decimales o 2 decimales. Por lo tanto, no puedo ver una solución en este momento para lo que está tratando de hacer que no sea convertirlo en texto para fines de visualización, lo que no desea hacer. Cuando me refiero a la cinta, me refiero a esto:

imagen.png

astanfo

En respuesta a greg_deckler

@Greg_Deckler ¿Algún nuevo desarrollo/solución con esto?

astanfo

En respuesta a greg_deckler

De acuerdo, es un fastidio que no haya una fórmula que especifique cuántos lugares decimales desea en un número/moneda.

smpa01

En respuesta a astanfo

@astanfo es posible que desee probar esto a través del Editor Tabular. Tabular Editor tiene una opción de secuencias de comandos avanzadas de C# para medidas. Vale la pena probar un C# condicional para un formato personalizado. Sé que el editor Tabuular tiene muchas funcionalidades para medidas DAX y formato de bulf y cosas por el estilo.

Recursos: https://docs.tabulareditor.com/Useful-script-snippets.html

https://tabulareditor.com/

Es posible que desee iniciar el editor tabular a través de herramientas externas en PBI.

Aunque no estoy 100% seguro de que funcione.

astanfo

En respuesta a smpa01

@ smpa01 A partir de una breve mirada al editor tabular, parece que me encontraría con el mismo problema.

¿Conoces alguna forma de entrar? Editor tabular para medir el formato de la moneda (no texto) pero cambie los lugares decimales dependiendo del tamaño del número ( Si O(>1000,<-1000) entonces hacer formato de moneda con 0 decimales demás hacer formato de moneda con 2 decimales)?

smpa01

En respuesta a astanfo

@astanfodid eche un vistazo a esto y mi enfoque fue el mismo que @Greg_Deckler con FIJO, pero no puedo envolverlo dentro de CURRENCY.

si encuentra una solución a este DAX/Tab. editor o algo más, no olvides etiquetarme en esa solución.

romgut

En respuesta a astanfo

es realmente una pena.

Las tarjetas están formateando los números bastante bien: si el número es demasiado largo, lo corta y escribe tsd o mil y no tiene que jugar con el formato para que quepa en la tarjeta.

Pero si es un valor monetario, Business quiere ver un signo de moneda.

Es posible agregar el signo de la moneda a través del formato «Moneda», pero el número es como 13’54… y debe ajustar el tamaño del texto de la tarjeta.

Quiero tener ambos: signo de moneda y redondeo inteligente 🙂

Deja un comentario

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