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

Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started

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
Sept PBI Carousel

Power BI Monthly Update - September 2024

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

September Hackathon Carousel

Microsoft Fabric & AI Learning Hackathon

Learn from experts, get hands-on experience, and win awesome prizes.

Sept NL Carousel

Fabric Community Update - September 2024

Find out what's new and trending in the Fabric Community.

Top Solution Authors