Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
3 years ago

Error de formato

Según la documentación, la función FORMAT toma como entrada "Una expresión de formato personalizado para números puede tener de una a tres secciones separadas por punto y coma". Si tres secciones, "La primera sección se aplica a valores positivos, la segunda a valores negativos y la tercera a ceros". Además, puede usar una coma como marcador de posición decimal. Todo esto está bien, y como está documentado, se comporta de manera muy similar al formato de Excel.

El problema es que cuando se usa una coma como marcador de posición decimal, las tres secciones ya no se aplican a los valores positivos y negativos. Si los valores positivos o negativos se evalúan a cero, se utiliza el formato cero en su lugar. Este comportamiento no está documentado y es contrario a las reglas de formato de Excel, que aplican estrictamente los formatos a números positivos y negativos independientemente del redondeo a cero.

Este es un problema importante porque los contadores y estadísticos saben que 0 vs. (0) vs. "-" en Excel significan cosas diferentes. El 0 es un número redondeado a cero, (0) redondeado a cero, y "-" es un cero "puro" sin redondeo. A medida que migramos informes a Power BI, nuestros usuarios rechazan Power BI porque insisten en tener estos formatos. Y no estoy deseando arreglar este lío.

Puede replicar esto con esta medida en Power BI:

Format bug = "Positive: " & FORMAT(1000000, "#,##0,,.0M;-#,##0,,.0M;-")
           & " Negative: " & FORMAT(-1000000, "#,##0,,.0M;-#,##0,,.0M;-")
           & " Zero: "     & FORMAT(0, "#,##0,,.M;-#,##0,,.M;-")

Da el resultado correcto de 3 formatos diferentes:

Pero si los números positivos y negativos se redondean a cero, usan incorrectamente el formato cero:

Format bug = "Positive: " & FORMAT(1000, "#,##0,,M;-#,##0,,M;-")
           & " Negative: " & FORMAT(-1000, "#,##0,,M;-#,##0,,M;-")
           & " Zero: "     & FORMAT(0, "#,##0,,M;-#,##0,,M;-")

O más descaradamente:

Format bug = "499,999 in millions = " & FORMAT(499999, "#,##0,,M;-#,##0,,M;0???")

Este error debe corregirse o POR FAVOR actualice la documentación para describir este comportamiento sin sentido.

"La primera sección se aplica a los valores positivos, la segunda a los valores negativos y la tercera a los ceros, excepto cuando no lo hacen..."

6 Replies

  • @Rudz - esto es realmente preocupante.

    Lo probé yo mismo en dax.do (Azure Analysis Services) y Power BI Desktop, y veo exactamente el mismo comportamiento que ha descrito.

    La buena noticia es que las cadenas de formato (como la que publicó) parecen comportarse correctamente cuando se aplican como la cadena de formato de una medida numérica o columna.

    Sin embargo, comparto su frustración de que FORMAT no se comporte como está documentado, y por ahora tendremos que ser muy cautelosos al usarlo. Estoy feliz de registrar esto como un error mientras tanto.

  • Si pudieras registrar esto como un error, ¡sería increíble!

    Y gracias por señalar esto como una solución para mí:


    @OwenAuger escribió:

    La buena noticia es que las cadenas de formato (como la que publicó) parecen comportarse correctamente cuando se aplican como la cadena de formato de una medida numérica o columna.

    Estoy trabajando en un informe delgado conectado a un modelo, por lo que cambiar los formatos significa esperar los cambios de modelo, y la función FORMAT me ayuda a tomar el control del formato en el informe. Pero para cumplir con este requisito, puedo esperar a que los cambios de modelo obtengan el #,##0;(#,##0);" -" parte hecha, y luego hacer la parte /1000000 donde estoy haciendo la función FORMAT y lograr lo mismo.


  • @Rudz escribió:

    Estoy trabajando en un informe delgado conectado a un modelo, por lo que cambiar los formatos significa esperar los cambios de modelo, y la función FORMAT me ayuda a tomar el control del formato en el informe. Pero para cumplir con este requisito, puedo esperar a que los cambios de modelo obtengan el #,##0;(#,##0);" -" parte hecha, y luego hacer la parte /1000000 donde estoy haciendo la función FORMAT y lograr lo mismo.


    No importa. Esto no funciona. La corrección de errores es mi única respuesta con nuestra adición de declaraciones IF para manejar esto.

  • Aquí está la solución con IF:

    Format workaround = 
    VAR _Pos = 1000
    VAR _Neg = -1000
    VAR _Zero = 0
    RETURN "Positive: " & IF(_Pos>0, FORMAT(_Pos,"#,##0,,;(#,##0,,);0"),
                             IF(_Pos<0, FORMAT(_Pos,"#,##0,,;(#,##0,,);(0)"),"-"))
        & " Negative: " & IF(_Neg>0, FORMAT(_Neg,"#,##0,,;(#,##0,,);0"),
                             IF(_Neg<0, FORMAT(_Neg,"#,##0,,;(#,##0,,);(0)"),"-"))
        & " Zero: "     & IF(_Zero>0, FORMAT(_Zero,"#,##0,,;(#,##0,,);0"),
                             IF(_Zero<0, FORMAT(_Zero,"#,##0,,;(#,##0,,);(0)"),"-"))
  • Ah, ya veo, sí, si te estás conectando a un modelo remoto, lo ideal es que se fije allí.

    Para lo que está haciendo, ¿tiene que devolver valores numéricos con formato dentro de una medida de texto?

    Si solo necesita medidas numéricas, siempre puede crear medidas de nivel de informe que hagan referencia directa a las medidas originales, pero configuradas con la cadena de formato correcta.

  • Tenemos una tabla de KPI con formato complejo que no se puede crear con el objeto visual Nueva tarjeta. Nuestra solución consiste en generar HTML desde Excel y usar el objeto visual HTML. Cuando se incluye una medida en el HTML, aparece como un número sin formato, por lo que se necesita FORMAT. ¡Solo deseaba que funcionara correctamente!