Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Don't miss out! 2025 Microsoft Fabric Community Conference, March 31 - April 2, Las Vegas, Nevada. Use code MSCUST for a $150 discount. Prices go up February 11th. Register now.

Reply

La consulta Dax devuelve un resultado inesperado

Hola a todos,

Tengo un archivo pbix ContosoSales-Excerpt.pbix siendo sólo la tabla 'Producto' del ejemplo de ventas de Contoso. A continuación, hice una consulta de Dax por Dax Studio que calcula el total acumulado de 'Producto' [UnitPrice] por el orden ascendente de 'Product' [ProductSubCategoryKey].

La consulta es bastante simple como se muestra a continuación.

2020-12-17_08h31_41.png

Esto funciona muy bien como se esperaba. Vuelve a continuación como salida

2020-12-17_08h32_29.png

Pero si comentara la línea #7 de la consulta,

2020-12-17_08h39_40.png

AccUnitPrice de todas las filas devuelven los mismos valores.

2020-12-17_08h40_02.png

Parece que los valores devueltos son la suma del precio unitario de todos excepto el cuyo ProductSubCategoryKey es máximo (en este caso #35 ) en el filtro [NombreDeAMbre]"Contoso" && [ClassName]"Regular".

No puedo entender lo que está pasando en esta consulta. Me gustaría saber en qué tipo de contexto Se evalúa AccUnitPrice de cada fila y cómo se calcula así.

Cualquier sugerencia sería apreciada.

Gracias de antemano.

14 REPLIES 14

Hay @AllisonKennedy

Una cosa que hice para pensar en este tema.

Probé varios patrones de condiciones de filtro y ejecuté la consulta.

Permítanme compartir el resultado como se muestra a continuación.

Con la línea #7 , 'Product'[BrandName] ), todos los resultados son naturales y fáciles de entender.

Pero sin #7 de línea, siento que hay algunas regularidades en los cálculos, pero no puedo expresarlo en una oración.

2020-12-21_14h22_29.png

AA) cambiar a "'Producto'[ProductSubcategoryKey] - CurrentSubKey"

<<Sin línea #7>>

2020-12-21_12h49_10.png

<<Con línea #7>>

2020-12-21_12h49_29.png

BB) cambiar a "'Product'[ProductSubcategoryKey] <> CurrentSubKey"

<<Sin línea #7>>

2020-12-21_12h50_08.png

<<Con línea #7>>

2020-12-21_12h50_28.png

CC) cambiar a "'Producto'[ProductSubcategoryKey] - CurrentSubKey + 10"

<<Sin línea #7>>

2020-12-21_12h54_36.png

<<Con línea #7>>

2020-12-21_12h52_34.png

DD) cambiar a "'Producto'[ProductSubcategoryKey] á 11"

<<Sin línea #7>>

2020-12-21_12h56_48.png

<<Con línea #7>>

2020-12-21_12h57_06.png

Lo siento, pero no estoy seguro de que sea significativo...

saludos

@Usagi_Nakamura Sí, eso es meaningul. Eso es básicamente similar a lo que estaba tratando de expresar en oración en uno de mis mensajes anteriores - el contexto de filtro de la subcategoría parece requerir ese contexto de fila de nombre de marca, pero sólo en SUMX y no en CONCATENATEX. Es por eso que agregué la columna CurrentSubcategoryKey a mi consulta de prueba, pero no arrojó mucha luz sobre la situación. He puesto la llamada para más entrada, veremos si tenemos algún otro cerebro que responda aquí, pero gracias por mantener este hilo en marcha.


Please @mention me in your reply if you want a response.

Copying DAX from this post? Click here for a hack to quickly replace it with your own table names

Has this post solved your problem? Please Accept as Solution so that others can find it quickly and to let the community know your problem has been solved.
If you found this post helpful, please give Kudos C

I work as a Microsoft trainer and consultant, specialising in Power BI and Power Query.
www.excelwithallison.com

Hola @AllisonKennedy otra vez,

Muchas gracias por su comentario.

Por ahora, me gustaría compartir con los espectadores el resultado del senario revisado en el que amablemente agrega elementos en su publicación anterior.

Esto muestra sin duda bien el contraste entre Countrows y Countx.

<<Con línea #7>>

2020-12-19_21h44_13.png

<<Sin línea #7>>

2020-12-19_21h39_27.png

Atentamente

Syndicate_Admin
Administrator
Administrator

No @Payeras_BI

Muchas gracias por tu ayuda. ¡Eso es soberón!

Pero mi consulta fue al principio sumando 'Sales'[SalesQuantity] y filtrando 'Product'[ClassName], 'Product'[BrandName] y 'Product'[ProductSubCategoryKey].

Dudé de que el problema provenía de la relación (por ejemplo, relación "ambos", etc.). Así que con el fin de eliminar el impacto de la relación, hice el modelo a la tabla única uno.

De todos modos voy a comprobar mi código anterior.

Gracias de nuevo por su ayuda continua!

saludos

No @Payeras_BI,

Lo siento. No entendí totalmente lo que dijiste.

Incluso si sumamos una columna de otra tabla en lugar de 'Product'[UnitPrice], es posible que no podamos deshacernos de este problema.

El problema puede provenirse del hecho de que más de dos filtros están en una tabla.

La consulta para dos tablas ( 1 Dimension ( Product ) + 1 Fact ( Sales ) pero lo mismo sucede así.

2020-12-18_22h16_01.png

saludos

No @Usagi_Nakamura ,

Responder a su última pregunta:

No es que esté seguro de que esto sea Auto-Exist más, pero en el ejemplo anterior, donde intercambiaste Product[UnitPrice] por Sales[UnitPrice] todavía tenías todos los ingredientes para activarlo de acuerdo con esto:

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


"Un ejemplo en el que auto-exist y ALL() proporcionan resultados inesperados es cuando se filtran en dos o más columnas de la misma tabla (como cuando se usan segmentaciones de datos), y hay una medida en esa misma tabla que utiliza ALL()."

En el último ejemplo ProductSubcategoryKey (ALL), ClassName y BrandName (SLICERS) siguen siendo de la misma tabla. Ahora, mientras que mover ClassName y BrandName a una tabla diferente podría ordenar el problema, todavía queremos saber por qué está sucediendo esto.

Lo dejo a los expertos, pero esperando que esto sea de alguna ayuda, he reproducido el escenario en PBI con la tabla más simple posible (sólo dos filas, sólo una marca / clase y sin duplicados) para descartar posibles causas:

Payeras_BI_0-1608572447688.png

La medida que se rompe:

SUMX = 
VAR CurrentKey = SELECTEDVALUE('Table'[Key])
RETURN
SUMX(
    FILTER(
        ALL('Table'[Key]);
        'Table'[Key]<CurrentKey
    );
    [Sum of UnitPrice]
)

Una medida que funciona:

With Calculate = 
VAR CurrentKey = SELECTEDVALUE('Table'[Key])
RETURN
CALCULATE(
    [Sum of UnitPrice];
    'Table'[Key]<CurrentKey
)

En PBI:

- Una visualización de tabla con sólo una de las columnas utilizadas para cortar se muestra:

Payeras_BI_0-1608569266732.png

- Ok para cortar por el que no está presente en la visualización:

Payeras_BI_4-1608569747679.png

- Pero tan pronto como se corta por ambos de la medida con roturas SUMX:

Payeras_BI_3-1608569691570.png

saludos

If this post answered your question, please mark it as a solution to help other users find useful content.
Kudos are another nice way to acknowledge those who tried to help you.

J. Payeras
Mallorca, Spain

No @Payeras_BI

Muchas gracias por su último post que es muy útil para mí y lamento por responder tarde.

Intenté asignar los casos en su publicación para correspondientes a mi consulta dax y resumir el resultado.

<<En su caso 1>>

image.png

En este caso, una columna de agrupación (clase) + Ningún archivador > SUMX está bien

La consulta dax correspondiente es
2020-12-25_06h27_52.png

<<En su caso 2>>

image.png

Una columna de agrupación ( Clase ) + 1 Columna de filtro ( Marca ) > Aceptar

La consulta dax correspondiente es

image.png

<<En su caso 3>>

image.png

Una columna de agrupación ( Clase ) + 2 Columna de filtro ( Clase, Marca ) > NG

La consulta dax correspondiente es

image.png

Intenté algunos otros casos y resumir el resultado como se muestra a continuación.

image.png

Gracias Saludos amables,

No @Payeras_BI,

Gracias por darme una pista que debe ser útil.

Trataré de entender el concepto de dax-auto-exist y aplicarlo a este asunto.

Saludos amables,

Hola de nuevo @Usagi_Nakamura ,

Para ser honesto, también me cuesta entender por qué el 51.663,53 por cada fila, hágamelo saber si usted se entera.

Pero, al menos, si sigues el consejo al final del artículo te des haces del problema:

"En modelos de datos más simples con una sola tabla y con una distribución de datos elegante de valores, podría ser posible encontrarse con problemas de existencia automática. Cuando esto sucede, la solución más fácil es evitar el uso de una sola tabla y crear un esquema de estrella adecuado en su lugar."

Payeras_BI_0-1608245384457.png

Exactamente la misma consulta, pero ahora cortando en columnas que pertenecen a las tablas de dimensiones:

Payeras_BI_1-1608245413960.png

saludos

If this post answered your question, please mark it as a solution to help other users find useful content.
Kudos are another nice way to acknowledge those who tried to help you.

J. Payeras
Mallorca, Spain

No @AllisonKennedy ,

¡Muchas gracias por sus amables sugerencias!

En realidad sabía que con tu consulta, funcionaba bien.

Además, la consulta, incluso si no hay #63 de línea, puede obtener el mismo resultado.

2020-12-17_21h23_08.png

De hecho, mi consulta era originalmente visual de matriz y SumUnitPrice y AccUnitPrice se calcularon medidas y el filtro BrandName provenía de un objeto visual Slicer. La consulta se realiza a partir de estos objetos visuales, utilizando el analizador de perfomance power bi.

Además, para mi consulta, intenté cambiar SUMX a CONCATENATEX y encontré que con o sin #7 de línea, se devuelve el mismo valor en cada fila. Estos valores deben ser elementos que se calcularán en la versión SUMX. Pero si cambio de nuevo a Sumx, los valores devueltos son diferentes entre con #7 de línea y sin #7 de línea.

<< Con línea #7>>

2020-12-17_21h24_44.png

<<Sin línea #7>>

2020-12-17_21h32_49.png

Traté de averiguar por qué es posible, pero en vano durante tres meses...

Gracias.

@Usagi_Nakamura Veo su problema ahora, interesante que CONCATENATEX se comporta de manera diferente que SUMX. Para ser honesto, esta consulta es multicapa y no se optimizan las mejores prácticas, por lo que la cambiaría, pero me fascina aprender de ella. Definitivamente me está ayudando a entender mejor parte del comportamiento, y me he convertido en escenarios en los que SUMX no se comporta como esperaba y esto podría dar una idea de por qué.

Sólo por diversión, aquí hay algunos ejemplos adicionales para agregar a su escenario. Parece que COUNTROWS se comporta como CONCATENATEX, mientras que COUNTX se comporta como SUMX. Intente también comentar los TREATAS que usa el nombre de marca y tenga en cuenta que esto también corrige las cosas. El problema surge cuando tiene un filtro/relación en una columna que no existe también en la tabla y, a continuación, intenta utilizar iteradores agregados:

1 - SUMMARIZECOLUMNS('Product'[ProductSubcategoryKey], 'Product'[ClassName]
--, 'Producto'[NombreDeAMbre]
,TREATAS('Contoso'', 'Product'[BrandName]),treatas('"Regular"', 'Product'[ClassName]), "SumPriceUnit", CALCULATE(SUM('Product'[UnitPrice]))
, "AccUnitPrice",
VAR CurrentSubKey á VALUES('Product'[ProductSubcategoryKey])
devolución
SUMX(FILTRO(
ALL('Product'[ProductSubcategoryKey]),
'Product'[ProductSubcategoryKey]<CurrentSubKey
),
CALCULATE(SUM('Product'[UnitPrice])))
, "ConcateUnitPrice",
VAR CurrentSubKey á VALUES('Product'[ProductSubcategoryKey])
devolución
CONCATENATEX(FILTRO(
ALL('Product'[ProductSubcategoryKey]),
'Product'[ProductSubcategoryKey]<CurrentSubKey
),
CALCULATE(SUM('Product'[UnitPrice])), ";")
, "SubCategory", VALUES('Product'[ProductSubcategoryKey])
, "Contar precio unitario",
VAR CurrentSubKey á VALUES('Product'[ProductSubcategoryKey])
devolución
COUNTX(FILTRO(
ALL('Product'[ProductSubcategoryKey]),
'Product'[ProductSubcategoryKey]<CurrentSubKey
),
CALCULATE(SUM('Product'[UnitPrice])))
, "CountRows", VAR CurrentSubKey á VALUES('Product'[ProductSubcategoryKey])
devolución
COUNTROWS(FILTER(
ALL('Product'[ProductSubcategoryKey]),
'Product'[ProductSubcategoryKey]<CurrentSubKey
))
, "SUMX",
VAR CurrentSubKey á SELECTEDVALUE('Product'[ProductSubcategoryKey])
devolución
SUMX(FILTRO(
ALL('Product'[ProductSubcategoryKey]),
'Product'[ProductSubcategoryKey]<CurrentSubKey
),
CALCULATE(SUM('Product'[UnitPrice])))
)

Please @mention me in your reply if you want a response.

Copying DAX from this post? Click here for a hack to quickly replace it with your own table names

Has this post solved your problem? Please Accept as Solution so that others can find it quickly and to let the community know your problem has been solved.
If you found this post helpful, please give Kudos C

I work as a Microsoft trainer and consultant, specialising in Power BI and Power Query.
www.excelwithallison.com

No @Usagi_Nakamura ,

De su última explicación este comportamiento parece responder a lo que @AlbertoFerrari explica aquí https://www.sqlbi.com/articles/understanding-dax-auto-exist/

saludos

If this post answered your question, please mark it as a solution to help other users find useful content.
Kudos are another nice way to acknowledge those who tried to help you.

J. Payeras
Mallorca, Spain
AllisonKennedy
Super User
Super User

@Usagi_Nakamura Puede probar esto en su lugar:

Tabla: SUMMARIZECOLUMNS('Product'[ProductSubcategoryKey], 'Product'[ClassName]
--, 'Producto'[NombreDeAMbre]
,TREATAS('Contoso'', 'Product'[BrandName]),treatas('"Regular"', 'Product'[ClassName]), "SumPriceUnit", CALCULATE(SUM('Product'[UnitPrice])), "AccUnitPrice",
VAR CurrentSubKey á VALUES('Product'[ProductSubcategoryKey])
devolución
SUMX(FILTRO(
ALL('Product'[ProductSubcategoryKey]),
'Product'[ProductSubcategoryKey]<CurrentSubKey
// ),
CALCULATE(SUM('Product'[UnitPrice]))))

CALCULATE(
Suma
('Product'[UnitPrice]), ALL('Product'[ProductSubcategoryKey]), 'Product'[ProductSubcategoryKey]<CurrentSubKey))
Puedes ver que he comentado lo que tenías y lo he reemplazado con sólo SUM en lugar de SUMX.
Esta no es todavía una expresión terriblemente eficiente, así que más espacio para mejorarla, pero no estoy seguro de cuál es su objetivo final?

Please @mention me in your reply if you want a response.

Copying DAX from this post? Click here for a hack to quickly replace it with your own table names

Has this post solved your problem? Please Accept as Solution so that others can find it quickly and to let the community know your problem has been solved.
If you found this post helpful, please give Kudos C

I work as a Microsoft trainer and consultant, specialising in Power BI and Power Query.
www.excelwithallison.com

AllisonKennedy
Super User
Super User

@Usagi_Nakamura Esta es una función muy compleja -hay mucho que hacer. En primer lugar, se utiliza CALCULATE para permitirle usar SUM dentro de una columna calculada. La función SUMMARIZECOLUMNS crea una tabla con 2 columnas calculadas: "SumUnitPrice" y "AccUnitPrice". Crea estas 2 columnas dentro del contexto de la tabla que compila: cuando comenta la línea 7, se quita el contexto de ProductBrand, que afecta al contexto en el que se calcula suMX. Puesto que tiene un CALCULATE(SUM() dentro de ese SUMX para calcular AccUnitPrice, este cambio de contexto de eliminación de ProductBrand importa.

¿Tenía algún sentido?


Please @mention me in your reply if you want a response.

Copying DAX from this post? Click here for a hack to quickly replace it with your own table names

Has this post solved your problem? Please Accept as Solution so that others can find it quickly and to let the community know your problem has been solved.
If you found this post helpful, please give Kudos C

I work as a Microsoft trainer and consultant, specialising in Power BI and Power Query.
www.excelwithallison.com

Helpful resources

Announcements
Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!

December 2024

A Year in Review - December 2024

Find out what content was popular in the Fabric community during 2024.

Top Solution Authors
Top Kudoed Authors