Forum Discussion
¿Variable parece romper modelo?
- 4 years ago
Hola @vckbx ,
Cambiar su medida a la siguiente resolverá el problema:Active = VAR _date = FIRSTDATE('Date'[Date]) VAR _start = SELECTEDVALUE('Registration'[StartDate]) VAR _end = SELECTEDVALUE('Registration'[EndDate]) RETURN SWITCH ( TRUE (), ISEMPTY ( Registration ), BLANK (), _start <= _date && ( _end >= _date || _end=BLANK() ), 1, 0 )
Enviaré un seguimiento tratando de explicar por qué estás golpeando este problema en primer lugar.
Hola @vckbx ,
Cambiar su medida a la siguiente resolverá el problema:
Active =
VAR _date = FIRSTDATE('Date'[Date])
VAR _start = SELECTEDVALUE('Registration'[StartDate])
VAR _end = SELECTEDVALUE('Registration'[EndDate])
RETURN
SWITCH ( TRUE (),
ISEMPTY ( Registration ), BLANK (),
_start <= _date && ( _end >= _date || _end=BLANK() ), 1,
0
)
Enviaré un seguimiento tratando de explicar por qué estás golpeando este problema en primer lugar.
- Syndicate_Admin4 years agoAdministrator
Así que lo primero es recrear el problema con el DAX más simple posible. Si reemplaza su medida "Activo" por
Active = 1Encontrarás que obtienes exactamente las mismas filas en el visual. En efecto, su medida es devolver cada combinación (un producto de unión cruzada / cartesiana) entre el equipo y el registro. La alteración que sugerí a su medida verifica si para un equipo en particular la tabla de registro está vacía, y devuelve en blanco si es lo que impide que ocurra esta unión cruzada.
Todo esto se debe a la consulta que Power BI escribe debajo de la superficie contra su motor. La ejecución del analizador de rendimiento y la limpieza de la consulta muestran que el objeto visual de la tabla ejecuta algo como:
DEFINE VAR FilterTable = FILTER( KEEPFILTERS(VALUES('Date'[Date])), 'Date'[Date] >= DATE(2022, 4, 2) ) VAR Result = SUMMARIZECOLUMNS( 'Registration'[Person], 'Registration'[Start Date], 'Registration'[End Date], 'Team'[Mascot], 'Team'[Team], FilterTable, "Active", [Active] ) EVALUATE ResultEn relación con la Guía DAX, hay la siguiente nota con respecto a SUMMARIZECOLUMNS:
"Los filtros en SUMMARIZECOLUMNS solo se aplican a las columnas agrupadas de la misma tabla y a las medidas. No se aplican a las columnas de grupo por de otras tablas directamente, sino indirectamente a través del filtro implícito no vacío de las medidas. Para aplicar un filtro a la columna de grupo por incondicionalmente, aplique el filtro a través de una función CALCULATETABLE que evalúa SUMMARIZECOLUMNS."
El filtro de fecha no se aplica directamente a ninguna columna, por lo que literalmente está formando un producto caresiano de Registros y Equipos para el cual su medida "Activa" original siempre devolverá un valor. La única forma de corregir esto es forzar que la medida regrese en blanco en las filas que no queremos.
Otra forma de ver lo que está haciendo SUMMARIZECOLUMNS es crear una tabla calculada en PowerBI con el siguiente DAX:
Test Table = SUMMARIZECOLUMNS( 'Registration'[Person], 'Registration'[Start Date], 'Registration'[End Date], 'Team'[Mascot], 'Team'[Team] )Escribí una solución similar en el siguiente blog: SUMMARIZECOLUMNS and Filters – Dobbs On Data
Citando a Alberto "SUMMARIZECOLUMNS es probable que sea el rey de las travesuras de DAX"
- Syndicate_Admin4 years agoAdministrator
Impresionante, muchas gracias por la respuesta detallada!