JFGrenier
Hola, esta es mi segunda opinión sobre un problema que tengo usando la sintaxis correcta en una consulta DAX de Excel:
Relaciones
Mesas
Hice una medida de trabajo en powerpivot usando una tabla dinámica con filtros:
CountryGrp:=CALCULATE(SUM(DataTable[Value]);CROSSFILTER(DataTable[IdCountry];Country[IdCountry];Both);CROSSFILTER(Country[IdCountry];CountryGroup[IdCountry];Both))
¿Puedo duplicar este comportamiento con una consulta DAX?
Necesito SUMAR los valores donde IdCountryGroup = 1 y Years = 2019
El resultado sería:
2019 Norteamérica 15000
Aquí es donde estoy sin éxito:
EVALUATE
ADDCOLUMNS (
SUMMARIZE ( DataTable, DataTable[Year] ),
"Val",
CALCULATE (
SUM ( DataTable[Value] ),
CROSSFILTER ( DataTable[IdCountry], Country[IdCountry], BOTH ),
CROSSFILTER ( Country[IdCountry], CountryGroup[IdCountry], BOTH ),
FILTER ( CountryGroup, CountryGroup[IdCountryGroup] = 1 )
)
)
¿Y cómo puedo poner un filtro en 2 tablas diferentes?
¡Gracias por tu ayuda!
antrikshsharma
En respuesta a JFGrenier
@JFGrenier Claro, esa es la mejor decisión, puede escribir un DAX complejo que podría fallar mañana si no se escribe teniendo en cuenta todos los detalles posibles, ¡pero un modelo de datos que sea perfecto siempre le brindará la solución requerida con un DAX mínimo!
CNENFRNL
Es raro que mi respuesta anterior desapareciera sin dejar rastro…🤔
@JFGrenier en mi humilde opinión, para propagar el filtro de múltiples lado a uno (1) lado de una relación, tabla ampliada
sería una opción preferible.
En cuanto a su problema, filtros en CountryGroup
CALCULATETABLE ( VALUES ( Country[IdCountry] ), CountryGroup )
puede surtir efecto en Country(1) de esta manera,
entonces dicho filtrado se propaga naturalmente desde Country(1) a DataTable
Total Values :=
CALCULATE (
SUM ( DataTable[Value] ),
CALCULATETABLE ( VALUES ( Country[IdCountry] ), CountryGroup )
)
después.
Por favor, intente medir
1 PNG
2 PNG 2 PNG
JFGrenier
En respuesta a
antrikshsharma
¡Hola AntrikshSharma!
¡Y gracias por tu respuesta!
Hay una razón específica para la tabla CountryGroup. Perdón por no mencionarlo antes. Es porque un país puede estar en un grupo de varios países. Por ejemplo: Egipto puede estar en el grupo de países África y también en el grupo de países África del Norte. Lo que propones crearía una relación de muchos a muchos. ¡Gracias de nuevo!
antrikshsharma
En respuesta a
JFGrenier @JFGrenier Aún así, ¿debe concentrarse en cambiar el modelo, crear 2 filas para Egipto en ese caso, con una clave única para ambos?
JFGrenier
En respuesta a
antrikshsharma
Digamos que Egipto está en 3 CountryGroup, la cosa es que tendría que copiar los datos asociados a Egipto 2 veces más con una identificación diferente. Ya tengo 14 millones de filas en DataTable y, para un sistema de 32 bits, creo que está cerca del máximo. Pero, ¿qué pasa si agrego varias columnas de ID en mi tabla CountryGroup? Comprobaré cuántos países pueden estar en varios CountryGroup. Si hay 15 países, simplemente agregaría 15 columnas de ID y cambiaría la relación en consecuencia. ¿Crees que la función DAX RELACIONADA podría funcionar? ¿O conoces alguna otra función que pueda cambiar las relaciones? Mis consultas DAX se crean en tiempo de ejecución a través de un formulario de usuario de Excel y sería fácil detectar estas excepciones. ¡Me señalas en una nueva dirección! ¡Cambiar el modelo puede ser mi única solución![Year][HS2]Pero antes de eso, daré una oportunidad más a esta consulta:
¿Dónde (sintaxis) podría agregar un filtro a DataTable?
EVALUATE
ADDCOLUMNS (
SUMMARIZE ( DataTable, DataTable[Year] ),
"Val",
CALCULATE (
SUM ( DataTable[Value] ),
CROSSFILTER ( DataTable[IdCountry], Country[IdCountry], BOTH ),
CROSSFILTER ( Country[IdCountry], CountryGroup[IdCountry], BOTH ),
FILTER ( CountryGroup, CountryGroup[IdCountryGroup] = 1 )
)
)
=2019 && tabla de datos
= 10 en la consulta a continuación?
En la función Resumir, en Calcular o si no???
¡Gracias de nuevo!
antrikshsharma
Table =
ADDCOLUMNS (
CALCULATETABLE ( SUMMARIZE ( Data, Data[Year] ), Data[Year] = 2019 ),
"Val",
CALCULATE (
[Total Value],
CROSSFILTER ( Data[IdCountry], Country[IdCountry], BOTH ),
CountryGroup[IdCountryGroup] = 1
),
"CountryName",
CALCULATE (
DISTINCT ( CountryGroup[CountryGroupName] ),
CROSSFILTER ( Data[IdCountry], Country[IdCountry], BOTH ),
CountryGroup[IdCountryGroup] = 1
)
)
En respuesta a
1 PNG 1 PNG
JFGrenier
En respuesta a
antrikshsharma
Hola Antrish,
Probé su última solución DAX en mi ‘Modelo de datos’ real (lo que mostré es una versión reducida y traducida).
¡Tuve que adaptarlo un poco para el estudio DAX en francés y verifiqué varias veces para que coincidiera con su código!
El filtro en IdCountryGroup no parece tener ningún efecto… El nombre del grupo de países cambia en consecuencia, pero los valores devueltos son siempre los mismos. Es la suma de todos los valores de la tabla de datos para el año filtrado. Supongo que tendré que cambiar mi modelo de datos.
¡Gracias por su tiempo y conocimiento!
antrikshsharma
En respuesta a
JFGrenier @JFGrenier Claro, esa es la mejor decisión, puede escribir un DAX complejo que podría fallar mañana si no se escribe teniendo en cuenta todos los detalles posibles, ¡pero un modelo de datos que sea perfecto siempre le brindará la solución requerida con un DAX mínimo!
CNENFRNL
En respuesta a JFGrenier Personalmente, evito aprovechar CROSSFILTER tanto como sea posible, especialmente en un modelo de datos complejo.En cuanto a su modelo, para propagar filtros en PaísGrupo
a
País(1)
CALCULATETABLE ( VALUES ( Country[IdCountry] ), CountryGroup )
,
tabla ampliada es una excelente opción, Además, los filtros en País(1) o
Mes(1)
Total Values =
CALCULATE (
SUM ( Data[Value] ),
CALCULATETABLE ( VALUES ( Country[IdCountry] ), CountryGroup )
)
propagarse de forma natural a
Datos
para cualquier cálculo; por lo tanto, escribiría una medida de esta manera,
greg_deckler
@JFGrenier: no estoy muy seguro de entender la situación completa aquí. Si tiene el mismo modelo de datos en ambos lugares, Excel y Power BI, el DAX debería ser el mismo.
Realmente no hay suficiente información para continuar, primero verifique si su problema es un problema común que se enumera aquí: https://community.powerbi.com/t5/Community-Blog/Before-You-Post-Read-This/ba-p /1116882
Además, consulte esta publicación sobre cómo obtener una respuesta rápida a su pregunta: https://community.powerbi.com/t5/Community-Blog/How-to-Get-Your-Question-Answered-Quickly/ba-p/38490
Las partes más importantes son:
1. Muestre datos como texto, use la herramienta de tabla en la barra de edición
2. Salida esperada de datos de muestra
3. Explicación en palabras de cómo pasar del 1 al 2.
amichandak
@JFGrenier, Dax es el mismo en ambos lugares, debería funcionar.
¿Puede compartir datos de muestra y resultados de muestra en formato de tabla? O un pbix de muestra después de eliminar datos confidenciales.