cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Syndicate_Admin
Administrator
Administrator

Filtrar y cambiar la medida para mostrar 0 en lugar de en blanco en DAX

Hola a todos,

cuando sustituyo un espacio en blanco en una medida por 0, y tener un filtro de fecha mi tabla no se filtra como se muestra a continuación, por ejemplo, hago filtre en 2013, pero todavía veo filas para los otros años

medidas que probé :

// Try 1:
ct_rows = var _res=CALCULATE(COUNTROWS('financials (2)'),FILTER('financials (2)','financials (2)'[Product]="Carretera" ))
return _res+0

// Try 2:
ct_rows = var _res=CALCULATE(COUNTROWS('financials (2)'),FILTER('financials (2)','financials (2)'[Product]="Carretera" ))
return if(isblank(_res),0,_res)

// Try 3:
ct_rows = var _res=CALCULATE(COALESCE(COUNTROWS('financials (2)'),0),FILTER('financials (2)','financials (2)'[Product]="Carretera" ))
return _res

Resultado que obtuve:

as you can see, I filtred on 2013 and I still have rows from 2014como pueden ver, me enloque difiqué en 2013 y todavía tengo filas de 2014

modelo:

Model.jpg

en caso de que mantenga la medida con el espacio en blanco, mi tabla se filtra por la fecha como se muestra a continuación:

ct_rows = var _res=CALCULATE(COUNTROWS('financials (2)'),FILTER('financials (2)','financials (2)'[Product]="Carretera" ))
return _res

resultado de esta medida:

for this you can see that it shows only the 2013 that I filtredpara esto se puede ver que muestra sólo el 2013 que me filtred

cualquiera puede explicarme por qué obtuve este comportamiento, qué hice mal y qué debo hacer para mantener el 0 y tener mi mesa filtrada por fecha.
cualquier ayuda es muy apreciada.

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

Hola de nuevo @data_kab

Lo he mirado y... tienen una explicación, pero se vuelve aún más raro,así que por favor agárrate fuerte a tu asiento.

En primer lugar, aquí está la consulta que genera el objeto visual:

// DAX Query
DEFINE
  VAR __DS0FilterTable = 
    FILTER(
      KEEPFILTERS(VALUES('financials (2)'[Country])),
      NOT('financials (2)'[Country] IN {BLANK()})
    )

  VAR __DS0FilterTable2 = 
    TREATAS({2013}, 'LocalDateTable_e211ee93-ab6a-4ce7-8478-bbd9e48b684c'[Year])

  VAR __DS0Core = 
    SUMMARIZECOLUMNS(
      ROLLUPADDISSUBTOTAL('date'[Date], "IsGrandTotalRowTotal"),
      __DS0FilterTable,
      __DS0FilterTable2,
      "ct_rows_2", 'financials (2)'[ct_rows 2]
    )

  VAR __DS0PrimaryWindowed = 
    TOPN(502, __DS0Core, [IsGrandTotalRowTotal], 0, 'date'[Date], 1)

EVALUATE
  __DS0PrimaryWindowed

ORDER BY
  [IsGrandTotalRowTotal] DESC, 'date'[Date]

La razón por la que ve todos los años/fechas se debe al hecho de que se utiliza la jerarquía de tiempo AUTOGENERATED y la forma en que funciona SUMMARIZECOLUMNS. En primer lugar, al crear manualmente columnas Año y trimestre en la tabla de fechas y colocarlas en la segmentación de datos y, a continuación, también en el objeto visual de tabla, la segmentación de datos cortará correctamente los datos en el objeto visual de la tabla. Esto se debe a que ahora las columnas provienen de una misma tabla y antes de que provendieron de 2 tablas diferentes. ¿por qué? Echa un vistazo al código que obtuve cuando puse las 2 columnas directamente en la tabla de fechas:

// DAX Query
DEFINE
  VAR __DS0FilterTable = 
    FILTER(
      KEEPFILTERS(VALUES('financials (2)'[Country])),
      NOT('financials (2)'[Country] IN {BLANK()})
    )

  VAR __DS0FilterTable2 = 
    TREATAS({2013}, 'date'[Year])

  VAR __DS0Core = 
    SUMMARIZECOLUMNS(
      ROLLUPADDISSUBTOTAL('date'[Date], "IsGrandTotalRowTotal"),
      __DS0FilterTable,
      __DS0FilterTable2,
      "ct_rows_2", 'financials (2)'[ct_rows 2]
    )

  VAR __DS0PrimaryWindowed = 
    TOPN(502, __DS0Core, [IsGrandTotalRowTotal], 0, 'date'[Date], 1)

EVALUATE
  __DS0PrimaryWindowed

ORDER BY
  [IsGrandTotalRowTotal] DESC, 'date'[Date]

¿Qué ha cambiado? ¿Puedes detectarlo?

_DS0FilterTable2 ahora filtra una columna en una tabla diferente! Esto, junto con cómo funciona SUMMARIZECOLUMNS, explica el comportamiento que observa. La explicación del comportamiento de SUMMARIZECOLUMNS tomaría un artículo por sí solo, así que por favor lea esto: https://www.linkedin.com/pulse/peculiar-behavior-summarizecolumns-dax-abhinav-khanduja/ donde mi compañero de trabajo disecciona el extraño behavour que observa. Sin embargo, este comportamiento es técnicamente correcto y se deriva de la especificación de la función.

Pero se vuelve aún más raro, como mencioné. Echa un vistazo a esto:

daxer-almighty_0-1620522456194.png

¿Puedes ver lo que está mal?

El país (que proviene de las finanzas) se filtra en la segmentación porque la segmentación de datos country ejecuta este DAX:

/ DAX Query
DEFINE
  VAR __DS0FilterTable = 
    FILTER(
      KEEPFILTERS(SUMMARIZE(VALUES('date'), 'date'[Year], 'date'[Quarter])),
      AND(
        'date'[Year] IN {"2013"},
        NOT(('date'[Year], 'date'[Quarter]) IN {("2013", "Q-1")})
      )
    )

  VAR __DS0Core = 
    CALCULATETABLE(
      VALUES('financials'[Country]),
      KEEPFILTERS(__DS0FilterTable)
    )

  VAR __DS0PrimaryWindowed = 
    TOPN(101, __DS0Core, 'financials'[Country], 1)

EVALUATE
  __DS0PrimaryWindowed

ORDER BY
  'financials'[Country]

pero los países no se filtran en la tabla visual. Y ahora ni siquiera tienes la oportunidad de hacer clic en nada en la segmentación de datos para limitar las entradas en la tabla!

"Genial", ¿no? 🙂

Como he dicho, este comportamiento de acuerdo con todo sentido común es absurdo y completamente incorrecto, pero técnicamente correcto desde el punto de vista de SUMMARIZECOLUMNS.

Creo que Microsoft tiene un problema. Este problema debe ser reportado a ellos. Yo clasificaría este comportamiento como un error y esto es un error de un callibre muy grande.

Tendré que asegurarme de que esto llegue a la atención de Microsoft, ya que tal comportamiento de SUMMARIZECOLUMNS y la tabla de fechas generada automáticamente no es aceptable de ninguna manera.

@Greg_Deckler, @edhans, @amitchandak, @OwenAuger, @Fowmy, @jdbuchanan71, @HotChilli... Chicos, ¿pueden ayudar a presentar este error correctamente para que llame la atención de Microsoft?

Muchas gracias.

Aquí hay un enlace al archivo que muestra lo anterior: https://1drv.ms/u/s!ApyQEauTSLtOgZZvc-RUdoyLZZoQgQ?e=64tk79

View solution in original post

22 REPLIES 22
Syndicate_Admin
Administrator
Administrator

@daxer todopoderoso ¿Ha presentado un informe de errores y, si es así, puede compartir el enlace aquí?

Syndicate_Admin
Administrator
Administrator

@daxer todopoderoso

¿Cuál es el comportamiento que esperas pero no ves? Se leía como si la cortadora de campo en blanco fuera lo que no te gustaba, pero ese comportamiento tiene sentido para mí como publiqué.

No se trata de la cortadora. Se trata de la mesa.

@daxer todopoderoso

¿Y la mesa? Revisé su archivo y la segmentación de datos filtra la tabla en consecuencia

BTW, es posible que desee echar un vistazo a este video por los gurús en SQLBI.com

https://youtu.be/bGVLguWf4Ls

Syndicate_Admin
Administrator
Administrator

@daxer todopoderoso

El comportamiento de la segmentación por país es lo que esperaría cuando selecciones un cuarto de año que no tenga filas en la tabla de "finanzas", todas las opciones se filtran. Puede editar las interacciones para que la segmentación de datos de fecha no filtre la segmentación por sectores de país, entonces la lista no se borrará para que pueda seguir usándola para filtrar el objeto visual de la tabla.

jdbuchanan71_0-1620576464182.png

Syndicate_Admin
Administrator
Administrator

Hola de nuevo @data_kab

Lo he mirado y... tienen una explicación, pero se vuelve aún más raro,así que por favor agárrate fuerte a tu asiento.

En primer lugar, aquí está la consulta que genera el objeto visual:

// DAX Query
DEFINE
  VAR __DS0FilterTable = 
    FILTER(
      KEEPFILTERS(VALUES('financials (2)'[Country])),
      NOT('financials (2)'[Country] IN {BLANK()})
    )

  VAR __DS0FilterTable2 = 
    TREATAS({2013}, 'LocalDateTable_e211ee93-ab6a-4ce7-8478-bbd9e48b684c'[Year])

  VAR __DS0Core = 
    SUMMARIZECOLUMNS(
      ROLLUPADDISSUBTOTAL('date'[Date], "IsGrandTotalRowTotal"),
      __DS0FilterTable,
      __DS0FilterTable2,
      "ct_rows_2", 'financials (2)'[ct_rows 2]
    )

  VAR __DS0PrimaryWindowed = 
    TOPN(502, __DS0Core, [IsGrandTotalRowTotal], 0, 'date'[Date], 1)

EVALUATE
  __DS0PrimaryWindowed

ORDER BY
  [IsGrandTotalRowTotal] DESC, 'date'[Date]

La razón por la que ve todos los años/fechas se debe al hecho de que se utiliza la jerarquía de tiempo AUTOGENERATED y la forma en que funciona SUMMARIZECOLUMNS. En primer lugar, al crear manualmente columnas Año y trimestre en la tabla de fechas y colocarlas en la segmentación de datos y, a continuación, también en el objeto visual de tabla, la segmentación de datos cortará correctamente los datos en el objeto visual de la tabla. Esto se debe a que ahora las columnas provienen de una misma tabla y antes de que provendieron de 2 tablas diferentes. ¿por qué? Echa un vistazo al código que obtuve cuando puse las 2 columnas directamente en la tabla de fechas:

// DAX Query
DEFINE
  VAR __DS0FilterTable = 
    FILTER(
      KEEPFILTERS(VALUES('financials (2)'[Country])),
      NOT('financials (2)'[Country] IN {BLANK()})
    )

  VAR __DS0FilterTable2 = 
    TREATAS({2013}, 'date'[Year])

  VAR __DS0Core = 
    SUMMARIZECOLUMNS(
      ROLLUPADDISSUBTOTAL('date'[Date], "IsGrandTotalRowTotal"),
      __DS0FilterTable,
      __DS0FilterTable2,
      "ct_rows_2", 'financials (2)'[ct_rows 2]
    )

  VAR __DS0PrimaryWindowed = 
    TOPN(502, __DS0Core, [IsGrandTotalRowTotal], 0, 'date'[Date], 1)

EVALUATE
  __DS0PrimaryWindowed

ORDER BY
  [IsGrandTotalRowTotal] DESC, 'date'[Date]

¿Qué ha cambiado? ¿Puedes detectarlo?

_DS0FilterTable2 ahora filtra una columna en una tabla diferente! Esto, junto con cómo funciona SUMMARIZECOLUMNS, explica el comportamiento que observa. La explicación del comportamiento de SUMMARIZECOLUMNS tomaría un artículo por sí solo, así que por favor lea esto: https://www.linkedin.com/pulse/peculiar-behavior-summarizecolumns-dax-abhinav-khanduja/ donde mi compañero de trabajo disecciona el extraño behavour que observa. Sin embargo, este comportamiento es técnicamente correcto y se deriva de la especificación de la función.

Pero se vuelve aún más raro, como mencioné. Echa un vistazo a esto:

daxer-almighty_0-1620522456194.png

¿Puedes ver lo que está mal?

El país (que proviene de las finanzas) se filtra en la segmentación porque la segmentación de datos country ejecuta este DAX:

/ DAX Query
DEFINE
  VAR __DS0FilterTable = 
    FILTER(
      KEEPFILTERS(SUMMARIZE(VALUES('date'), 'date'[Year], 'date'[Quarter])),
      AND(
        'date'[Year] IN {"2013"},
        NOT(('date'[Year], 'date'[Quarter]) IN {("2013", "Q-1")})
      )
    )

  VAR __DS0Core = 
    CALCULATETABLE(
      VALUES('financials'[Country]),
      KEEPFILTERS(__DS0FilterTable)
    )

  VAR __DS0PrimaryWindowed = 
    TOPN(101, __DS0Core, 'financials'[Country], 1)

EVALUATE
  __DS0PrimaryWindowed

ORDER BY
  'financials'[Country]

pero los países no se filtran en la tabla visual. Y ahora ni siquiera tienes la oportunidad de hacer clic en nada en la segmentación de datos para limitar las entradas en la tabla!

"Genial", ¿no? 🙂

Como he dicho, este comportamiento de acuerdo con todo sentido común es absurdo y completamente incorrecto, pero técnicamente correcto desde el punto de vista de SUMMARIZECOLUMNS.

Creo que Microsoft tiene un problema. Este problema debe ser reportado a ellos. Yo clasificaría este comportamiento como un error y esto es un error de un callibre muy grande.

Tendré que asegurarme de que esto llegue a la atención de Microsoft, ya que tal comportamiento de SUMMARIZECOLUMNS y la tabla de fechas generada automáticamente no es aceptable de ninguna manera.

@Greg_Deckler, @edhans, @amitchandak, @OwenAuger, @Fowmy, @jdbuchanan71, @HotChilli... Chicos, ¿pueden ayudar a presentar este error correctamente para que llame la atención de Microsoft?

Muchas gracias.

Aquí hay un enlace al archivo que muestra lo anterior: https://1drv.ms/u/s!ApyQEauTSLtOgZZvc-RUdoyLZZoQgQ?e=64tk79

View solution in original post

Publique el informe but en el foro de temas. De esta manera, si MS tiene alguna pregunta de seguimiento, estará en condiciones de responderlas. Problemas - Comunidad de Microsoft Power BI

@daxer todopoderoso

mucho lo aprecian,
Realmente lo entiendo ahora,

Estoy muy recommand que se llega a Microsoft, porque usted tiene la comprensión completa de este comportamiento.

Otra vez gracias

Syndicate_Admin
Administrator
Administrator

@data_kab

Replique las tablas (solo los campos relevantes) y no tengo su problema. Todo se filtra como debería ser y las medidas no hacen la diferencia (aunque no deberían escribirse de la manera que usted tiene). Primero debe comprobar si tiene la última versión de PBI Desktop y puede - si no le importa - cargar el archivo (con suficientes datos para demostrar el problema) a un lugar desde el que podríamos descargarlo y ver los detalles con nuestros propios ojos. De lo contrario, estás solo, ya que no podemos reproducir el problema.

@daxer todopoderoso

gracias por su respuesta, muy apreciada

Puedo asegurarme de que estoy ejecutando la última versión de power bi desktop,

data_kab_0-1620515316218.png

y este es el libro de trabajo, si puedes probarlo, gracias

https://drive.google.com/file/d/1SbmtmORnLXAp3_arjDMc2zBf8RsErkrv/view?usp=sharing

Syndicate_Admin
Administrator
Administrator

@vanessafvg mucho lo apreciamos,
Probé su sugerencia, pero desafortunadamente todavía estoy teniendo el mismo problema, como se puede ver a continuación :

resultado:

data_kab_0-1620486672426.png

modelo:

data_kab_1-1620486704247.png

hiya sí veo esto realmente más complicado.

Algunas preguntas ¿qué estás tratando de hacer con el relleno del valor de recuento con 0? y ¿por qué quieres rellenarlo con 0? la eliminación del relleno trae de vuelta los datos correctos. Tal vez si usted puede explicar su requisito de negocio, podemos dar un paso atrás y hacer esto de manera diferente, porque efectivamente la forma en que esto se está modelando no es adecuado para lo que usted está queriendo hacer.

@vanessafvg

Lo que estoy tratando de hacer es convertir el espacio en blanco en mi medida en 0.
pero esto no funciona cuando tengo un filtro de fecha, no filtra mis fechas.
y si usted lee @daxer-todopoderoso respuesta esto es un problema que tiene que ver con RESUMENCOLUMNS.
No sé si tienes algo que añadir a lo que @daxer-todopoderoso explicó.

mi opinión personal es que esto no es un problema con las columnas de resumen, pero con la forma en que ha modelado sus datos.

@vanessafvg

Lamentablemente, no tienes razón. Esto ciertamente es un problema con SUMMARIZECOLUMNS. ¿por qué? Porque el modelo es perfectamente válido. Power BI y DAX no se quejan de ello, por lo que significa que la gente no recibe ninguna indicación de que algo podría estar mal. Compare esto con modelos ambiguos en los que las personas reciben advertencias o incluso errores cuando un modelo no se puede resolver correctamente. Además de eso, SUMMARIZECOLMNS se ejecuta entre bastidores y nadie tiene ninguna obligación de saber cómo funciona, especialmente los usuarios empresariales que no están obligados a ser gurús de DAX. Si un modelo es admisible, debe comportarse correctamente. Pero un modelo correcto no se comporta correctamente aquí. Por lo tanto, en mi mente, y para cualquier mente sana, debe ser clasificado como un error.

@daxer todopoderoso

Quieres decir algo así como esperar que los totales devuelvan totales "correctos", pero cuando no lo hacen el problema es DAX.

Cada vez que leo que el resultado de una medida es incorrecto, SÓLO SONRÍO. (Y luego trate de explicar por qué el resultado es correcto, pero el OP se confunde sobre el resultado)

@PaulDBrown

Y cada vez que veo a personas que se esfuerzan por no entender cuál es el verdadero problema... SÓLO SONRÍO. también.

Me temo que muchos malos modelos se encuentran con problemas donde power bi no se queja. Para ser bueno en Power BI, debe saber algo más que los tecnicismos de cómo funciona power bi, también debe comprender cómo modelar los datos.

usted no será capaz de extraer datos de la tabla finanial2, por fecha con este modelo, ¿hay una fecha en finacials2? lo siento, pensé que lo había y al unir ambas mesas financieras a la mesa de la fecha se podía filtrar ambos.

sin embargo, si no ha querido desnormalizar las 2 tablas financieras creando una tabla a partir de ellas o necesita volver a establecer la tabla 3 (del diagrama siguiente) en una relación bidireccional. Pero deja la mesa de citas tal cual.

Piense en las flechas presentadas aquí como la dirección en la que entran las relaciones, en una sola dirección una a muchas relaciones la que filtra las muchas. En este momento la relación de la fecha se detiene en la primera mesa financiera

cambiar eso de nuevo a birectional. pero deja la fecha tal cual.

vanessafvg_0-1620512345596.png

@vanessafvg

I'm sentimos informar que probé que y aún así didn't solucionar el problema, that's lo que hice :

data_kab_0-1620514419058.png

y este es mi nuevo modelo:

data_kab_1-1620514686376.png

Realmente aprecio tu ayuda, gracias.

aquí está el libro de trabajo si quieres probarlo tú mismo

https://drive.google.com/file/d/1SbmtmORnLXAp3_arjDMc2zBf8RsErkrv/view?usp=sharing

Helpful resources

Announcements
PBI User Groups

Welcome to the User Group Public Preview

Check out new user group experience and if you are a leader please create your group!

MBAS on Demand

Microsoft Business Applications Summit sessions

On-demand access to all the great content presented by the product teams and community members! #MSBizAppsSummit #CommunityRocks

Get Ready for Power BI Dev Camp

Power BI Dev Camp - June 24th

Mark your calendars and join us for our next Power BI Dev Camp!