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

Grow your Fabric skills and prepare for the DP-600 certification exam by completing the latest Microsoft Fabric challenge.

Reply
kostal
New Member

Columna de tabla teniendo en cuenta un filtro deslizante

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:

isLast á CALCULATE(isblank(COUNTROWS(AllData)); FILTER(AllData; AND([DateTime] > EARLIER(AllData[DateTime]); [ID] - EARLIER([ID]))))
Esto funciona bien, pero no tiene en cuenta un filtro deslizante de fecha.
¿Alguien puede ayudarme qué estoy haciendo mal? ¿O incluso es posible hacer esto?

Aquí está el archivo de origen: https://1drv.ms/u/s!Ag6JEwnU6D76m78KmEurRzSfFx0VDQ?e=pf6IUc

Tx

6 REPLIES 6
v-frfei-msft
Community Support
Community Support

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 () )

Capture.PNG

Pbix como adjunto.

Community Support Team _ Frank
If this post helps, then please consider Accept it as the solution to help the others find it more quickly.
bheepatel
Resolver IV
Resolver IV

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.

1.JPG

2.JPG

¡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.

IdDatetimeDatosMaxDate
12020/01/01Prueba2020/01/01
12020/01/07Prueba2020/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?

Pragati11
Super User
Super User

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

Best Regards,

Pragati Jain


MVP logo


LinkedIn | Twitter | Blog YouTube 

Did I answer your question? Mark my post as a solution! This will help others on the forum!

Appreciate your Kudos!!

Proud to be a Super User!!

Hola @Pragati11 ,

tx para una respuesta. Pero desafortunadamente no funciona. Ya probé esto, pero sin ningún impacto notable en la salida 😞

Helpful resources

Announcements
Europe Fabric Conference

Europe’s largest Microsoft Fabric Community Conference

Join the community in Stockholm for expert Microsoft Fabric learning including a very exciting keynote from Arun Ulag, Corporate Vice President, Azure Data.

Power BI Carousel June 2024

Power BI Monthly Update - June 2024

Check out the June 2024 Power BI update to learn about new features.

RTI Forums Carousel3

New forum boards available in Real-Time Intelligence.

Ask questions in Eventhouse and KQL, Eventstream, and Reflex.

Top Solution Authors