March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount! Early bird discount ends December 31.
Register NowBe one of the first to start using Fabric Databases. View on-demand sessions with database experts and the Microsoft product team to learn just how easy it is to get started. Watch now
Hola
Estoy tratando de averiguar si es posible crear una columna que calculará su valor dinámicamente en función de un filtro deslizante de fecha. Intenté muchos approches, pero ninguna de ellas tuvo éxito. Estoy considerando si esto es posible.
Pero lo que quiero hacer. Tengo una tabla con ID de columna (no único) y DateTime. Quiero agregar la siguiente columna esLast que identificará si una fila tiene la última DateTime de filas con el mismo identificador.
Traté de crear una columna como esta:
Aquí está el archivo de origen: https://1drv.ms/u/s!Ag6JEwnU6D76m78KmEurRzSfFx0VDQ?e=pf6IUc
Tx
Hola @kostal ,
Cree una medida como se muestra a continuación en lugar de una columna calculada.
Measure =
VAR c =
CALCULATE (
COUNTROWS ( AllData ),
FILTER (
ALLSELECTED ( AllData ),
AllData[DateTime] <= MAX ( AllData[DateTime] )
),
VALUES ( AllData[ID] )
)
VAR c_ =
CALCULATE (
COUNTROWS ( AllData ),
ALLSELECTED ( AllData ),
VALUES ( AllData[ID] )
)
RETURN
IF ( c = c_, TRUE (), FALSE () )
Pbix como adjunto.
Hola @kostal
Tiene razón: no es posible porque tiene una columna calculada (isLast) y está intentando utilizar una segmentación de datos para cambiar los valores de esa columna. Esto no es posible, ya que no se puede utilizar la segmentación de datos para cambiar la tabla de datos.
Aquí hay una solución alternativa:
1. Cree una medida llamada isLast (Measure) como se muestra a continuación
isLast (Measure) =
VAR vMaxDatePerID = CALCULATE(MAX(AllData[DateTime]), ALLSELECTED(AllData[DateTime]))
VAR vDatePerID = CALCULATE(MAX(AllData[DateTime]))
RETURN vMaxDatePerID = vDatePerID
2. En la tabla visual que tiene, reemplace el campo isLast con el isLast (Medida) como se ve a continuación en la captura de pantalla. He publicado dos capturas de pantalla (una para ningún filtro de fecha aplicado y otra para el filtro de fecha aplicado) y funciona según sea necesario.
¡Espero que esto ayude!
Hola bheepatel,
genial, funciona! Es desafortunado que no sea posible hacerlo con la columna, pero tal vez pueda vivir con esta solución.
Sin embargo. No estoy seguro de cómo funciona exactamente. No veo ninguna mención sobre la columna ID y todavía la salida se agrupa a través de ID.
Probablemente está conectado de alguna manera a visual donde cuando elimino el ID de columna deja de funcionar:
Incluso cuando agrego alguna otra columna deja de funcionar. Eso es difícilmente utilizable para algunos casos de uso más complicados.
Por favor, ¿puede sorrándome cómo funciona todo para que pueda encontrar soluciones para otros casos?
¡Tx!
Hola @kostal
Tiene razón: está conectado al objeto visual y depende de qué columnas se insertan en el objeto visual.
Para entender cómo funciona, debe comprender cómo funcionan las tablas y medidas visuales. Si solo hubiera colocado la columna ID en una tabla, obtendrá la tabla siguiente. Solo obtendrá 4 filas donde cada fila es un registro distinto. No obtendrá las 8 filas que tiene en el conjunto de datos.
Id |
1 |
2 |
3 |
4 |
Supongamos que ahora crea una medida llamada MaxDate - Max(DateTime) y, a continuación, agregar lo a la tabla anterior. A continuación, el modelo comprobará cuál es la fecha máxima para cada uno de esos cuatro documentos. Lo que hace Power BI es que examina una fila distinta y, a continuación, calcula la fecha máxima para esa fila distinta.
Cuando ahora agregue el campo DateTime a la tabla anterior, verá que ahora tendrá 8 filas porque las 8 filas son distintas, es decir, hay una combinación distinta de ID & DateTime. Y ahora si agrega la medida MaxDate, entonces tendrá 8 resultados diferentes.
De forma similar, si agrega una tercera columna, por ejemplo, la columna Datos y, a continuación, agrega la medida MaxDate, el modelo buscará una combinación distinta de las columnas ID, DateTime y Data y, a continuación, elaborará la fecha máxima para esa combinación.
¿Espero que tenga sentido?
Ahora en es Last (Measure) hay una variable llamada vMaxDatePerID. Lo que hace esta variable es exactamente la misma función que la medida MaxDate anterior, pero tiene en cuenta cualquier filtro aplicado en el campo DateTime. Para ilustrar, mire la siguiente tabla. Los campos ID y Datos tienen los mismos valores. Pero el campo DateTime es diferente, por lo que hay dos filas únicas. Por lo tanto, tendrá dos respuestas diferentes para la medida MaxDate como se ve a continuación.
Id | Datetime | Datos | MaxDate |
1 | 2020/01/01 | Prueba | 2020/01/01 |
1 | 2020/01/07 | Prueba | 2020/01/07 |
Cuando no se aplica ningún filtro en el campo DateTime, vMaxDatePerID será 2020/01/07 para ambos registros.
Cuando se aplica un filtro,digamos 2020/01/01 - 2020/01/05, el vMaxDatePerID será 2020/01/01 porque vMaxDatePerID intenta encontrar los valores máximos de lo seleccionado (es decir, 2020/01/01 - 2020/01/05).
La clave es que la medida MaxDate examinará los campos ID, Data y DateTime para entrenar el valor máximo (ignorando los filtros externos en DateTime), pero vMaxDatePerID examinará los campos ID y Data para entrenar el valor máximo (teniendo en cuenta los filtros externos en DateTime).
¿Espero que eso ayude?
Hola @kostal ,
Simplemente modifique su DAX a lo siguiente:
isLast á CALCULATE(isblank(COUNTROWS(AllData)); FILTER(ALLSELECTED(AllData); AND([DateTime] > EARLIER(AllData[DateTime]); [ID] - EARLIER([ID]))))
Si esto ayuda y resuelve el problema, apreciar un Kudos y marcarlo como una solución! 🙂
Gracias
Pragati
Hola @Pragati11 ,
tx para una respuesta. Pero desafortunadamente no funciona. Ya probé esto, pero sin ningún impacto notable en la salida 😞
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!