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

Be 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

Reply
Syndicate_Admin
Administrator
Administrator

Filtrado dinámico del objeto visual de tabla en Power BI en función de la selección de la fecha de la segmentación de datos

Hola a todos, tengo 2 mesas sin relación activa entre sí. En la Tabla 1 se muestran los siguientes datos.

Tabla 1:

IntervalDate

2024-07-07

2022-05-26

2022-05-25

2021-12-13

2021-12-12

2021-12-01

2021-11-30

2021-11-29

2021-10-01

Esta fecha se utiliza en la segmentación de datos con la configuración de selección única.

Tabla 2: Tiene diferentes versiones de Producto No basadas en válido desde y válido hasta la fecha., cuando una versión se cierra, otra versión comienza al día siguiente.,

y mi objetivo es encontrar la última versión entre él para cada combinación de productos sin ella.

Producto No Válido De Válido A ProductQty

257298 2020-06-05 2021-11-29 100

257298 2021-11-30 2021-12-12 150

257298 2021-12-13 2022-05-25 175

257298 2022-05-26 9999-12-31 200

131278 2021-12-10 2022-12-30 500

131278 2022-12-31 9999-12-31 350

Aquí tengo 2 productos uniqe por lo que la última versión del mismo basado en el máximo de válidos hasta la fecha sería:

Producto No Válido De Válido A ProductQty

257298 2022-05-26 9999-12-31 200

131278 2022-12-31 9999-12-31 350

Hasta aquí soy capaz de lograr el resultado., El verdadero problema viene cuando la Tabla 2 está siendo filtrada por el IntervalDate de la Tabla 1

El Cuadro 2 sólo debe mostrar los datos válidos a partir de la fecha < = fecha seleccionada del Cuadro 1.

Para lograrlo, utilicé la medida calculada en la columna ProductQty de la siguiente manera:

Cantidad de producto = CALCULAR(PROMEDIO('Tabla 2'[ProductQty]),FILTRO('Tabla 2',
'Tabla 2'[Válido desde]<=MÁXIMO(Tabla 1[IntervalDate ])))
Entonces, si selecciono IntervalDate como 2022-05-25, obtendré una salida inferior basada en el filtrado (puedo lograr esto)

Producto No Válido De Válido A ProductQty

257298 2020-06-05 2021-11-29 100

257298 2021-11-30 2021-12-12 150

257298 2021-12-13 2022-05-25 175

131278 2021-12-10 2022-12-30 500

Ahora, a partir de este resultado, la última versión debería calcularse en función del máximo de válidos hasta la fecha (2022-05-25 y 2022-12-30 para cada número de producto) que se encuentra por debajo de la salida final:

Producto No Válido De Válido A ProductQty

257298 2021-12-13 2022-05-25 175

131278 2021-12-10 2022-12-30 500

Pero Power BI sigue considerando 9999-12-31 como el máximo de válido hasta la fecha. Este filtrado dinámico no lo puedo lograr a partir de un resultado ya filtrado.

Para entenderlo mejor, pongamos un ejemplo más. IntervalDate: 2021-12-12, los datos filtrados serían:

Producto No Válido De Válido A ProductQty

257298 2020-06-05 2021-11-29 100

257298 2021-11-30 2021-12-12 150

131278 2021-12-10 2022-12-30 500

Ahora, a partir de este resultado, PBI debe calcular el máximo de válido hasta y debe mostrar las siguientes filas como resultado final

Producto No Válido De Válido A ProductQty

257298 2021-11-30 2021-12-12 150

131278 2021-12-10 2022-12-30 500

¿Alguien puede ayudarme a lograr este filtrado dinámico basado en datos ya filtrados? Gracias de antemano.

@আশিষে_মাথুৰ @quantumudit @quantumudit1 @v-huijiey-msft @gmsamborn @v-jialongy-msft @v-kaiyue-msft @v-jiewu-msft @lbendlin

4 REPLIES 4
Syndicate_Admin
Administrator
Administrator

Hola, @aatish178

Basándome en su descripción, utilicé los siguientes datos de ejemplo:

Tabla 1:

vjianpengmsft_0-1718940464975.png

Tabla 2:

vjianpengmsft_1-1718940492424.png

vjianpengmsft_2-1718940535967.png

He creado una medida con la siguiente expresión DAX para lograr el resultado deseado que esperaba anteriormente:

Measure2 =
VAR _seleted_date =
    SELECTEDVALUE ( Table1[IntervalDate] )
VAR _table =
    FILTER ( ALL ( Table2 ), 'Table2'[Valid From] <= _seleted_date )
VAR _table1 =
    SUMMARIZE (
        _table,
        Table2[Product No ],
        "maxValid from",
            VAR _current_No =
                SELECTEDVALUE ( Table2[Product No ] )
            VAR _max_date =
                MAXX (
                    FILTER ( _table, 'Table2'[Product No ] = _current_No ),
                    'Table2'[Valid From]
                )
            RETURN
                _max_date,
        "maxValid to",
            VAR _current_No =
                SELECTEDVALUE ( Table2[Product No ] )
            VAR _max_date =
                MAXX (
                    FILTER ( _table, 'Table2'[Product No ] = _current_No ),
                    'Table2'[Valid To]
                )
            RETURN
                _max_date,
        "qty",
            VAR _current_No =
                SELECTEDVALUE ( Table2[Product No ] )
            RETURN
                MAXX (
                    FILTER ( _table, 'Table2'[Product No ] = _current_No ),
                    'Table2'[ProductQty]
                )
    )
RETURN
    IF (
        SELECTEDVALUE ( Table2[Valid From] )
            IN SELECTCOLUMNS ( _table1, [maxValid from] ),
        MAXX (
            FILTER (
                _table1,
                'Table2'[Product No ] = SELECTEDVALUE ( Table2[Product No ] )
            ),
            [qty]
        ),
        BLANK ()
    )

Esto es lo que puedes esperar:

vjianpengmsft_3-1718940669584.png

vjianpengmsft_4-1718940698827.png

Miré su expresión DAX y parece que desea el promedio de cantidad para cada número de producto en 'Table2'[Valid From]<=MAX(Table1[IntervalDate], luego puede usar la siguiente expresión DAX:

MEASURE =
VAR _seleted_date =
    SELECTEDVALUE ( Table1[IntervalDate] )
VAR _table =
    FILTER ( ALL ( Table2 ), 'Table2'[Valid From] <= _seleted_date )
VAR _table1 =
    SUMMARIZE (
        _table,
        Table2[Product No ],
        "maxValid from",
            VAR _current_No =
                SELECTEDVALUE ( Table2[Product No ] )
            VAR _max_date =
                MAXX (
                    FILTER ( _table, 'Table2'[Product No ] = _current_No ),
                    'Table2'[Valid From]
                )
            RETURN
                _max_date,
        "maxValid to",
            VAR _current_No =
                SELECTEDVALUE ( Table2[Product No ] )
            VAR _max_date =
                MAXX (
                    FILTER ( _table, 'Table2'[Product No ] = _current_No ),
                    'Table2'[Valid To]
                )
            RETURN
                _max_date,
        "qty",
            VAR _current_No =
                SELECTEDVALUE ( Table2[Product No ] )
            RETURN
                AVERAGEX (
                    FILTER ( _table, 'Table2'[Product No ] = _current_No ),
                    'Table2'[ProductQty]
                )
    )
RETURN
    IF (
        SELECTEDVALUE ( Table2[Valid From] )
            IN SELECTCOLUMNS ( _table1, [maxValid from] ),
        MAXX (
            FILTER (
                _table1,
                'Table2'[Product No ] = SELECTEDVALUE ( Table2[Product No ] )
            ),
            [qty]
        ),
        BLANK ()
    )

Estos son los resultados:

vjianpengmsft_6-1718940915766.png

vjianpengmsft_5-1718940902605.png

He proporcionado el archivo PBIX utilizado esta vez a continuación.

Cómo obtener respuestas rápidas a tu pregunta

Si no ayuda, proporcione más detalles con la salida deseada y el archivo pbix sin información de privacidad (o algunos datos de muestra).

Saludos

Jianpeng Li

Si esta publicación ayuda, considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Hola, Gracias por su apoyo :), pero la solución está fallando en el último paso:

RETURN
    IF (
        SELECTEDVALUE ( Table2[Valid From] )
            IN SELECTCOLUMNS ( _table1, [maxValid from] ),
        MAXX (
            FILTER (
                _table1,
                'Table2'[Product No ] = SELECTEDVALUE ( Table2[Product No ] )
            ),
            [qty]
        ),
        BLANK ()
    )

Aquí, en el momento en que selecciono válido desde, menor que la fecha de vencimiento de validez actual., se muestra en blanco.,

aatish178_0-1718970583961.png

Mi expectativa es que la fecha de selección válida de la segmentación de datos., si se ajusta a los criterios de IntervalDate, entonces el objeto visual de la tabla también muestra esa entrada., pero aquí se muestra en blanco

¿Puedes por favor ayudarme a saber hjow puedo arreglarlo?

Hola, la solución está funcionando como se esperaba, sin embargo, no entiendo la última parte

RETURN
    IF (
        SELECTEDVALUE ( Table2[Valid From] )
            IN SELECTCOLUMNS ( _table1, [maxValid from] ),
        MAXX (
            FILTER (
                _table1,
                'Table2'[Product No ] = SELECTEDVALUE ( Table2[Product No ] )
            ),
            [qty]
        ),
        BLANK ()
    )

¿Puede explicarlo, por favor?

Aatish

Muchas gracias... Lo comprobaré de inmediato

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!

Dec Fabric Community Survey

We want your feedback!

Your insights matter. That’s why we created a quick survey to learn about your experience finding answers to technical questions.

ArunFabCon

Microsoft Fabric Community Conference 2025

Arun Ulag shares exciting details about the Microsoft Fabric Conference 2025, which will be held in Las Vegas, NV.

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