cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Frequent Visitor

Power Query selecciona filas entre dos fechas

¿Puedes ayudarme, por favor, tengo dos mesas una se ve así

Fecha de Eqmt
A 15/08/20
B 03/09/20
C 05/08/20

Y otra que parece:

Eqmt Dev IniDate EndDate

A 1 01/jul/20 01/aug/20

A 3 01/aug/20 01/sep/20

B 4 01/jul/20 01/aug/20

B 5 01/aug/20 01/sep/20

B 2 01/sep/20 01/oct/20

C 4 01/jul/20 01/aug/20

C 3 01/aug/20 01/sep/20

Quiero capturar el valor de desarrollo que está entre IniDate y EndDate, algo como esto:

Eqmt Date Dev
A 15/08/20 3
B 03/09/20 2
C 05/08/20 3

¿Puede darme alguna respuesta, sin usar funciones DAX si es posible? Gracias por tu respuesta

1 ACCEPTED SOLUTION
Super User II
Super User II

Creo que esto lo hace. Por favor, prueba.

Agregue una columna en la primera tabla (cambie el nombre de la segunda tabla por TableB

List.First(
            Table.SelectRows(
                TableB,
                (r) =>
                    r[IniDate] < [Date]
                    and
                    r[EndDate] > [Date]
                    and
                    r[Eqmt] = [Eqmt] 
            )[Dev]
        )

View solution in original post

2 REPLIES 2
Responsive Resident
Responsive Resident

Hola @logrt . Suponiendo que seas la tabla más pequeña se llama Table1 y el más grande se llama Table2 lo que hice fue:

1. Tabla 2 combinada en la Tabla 1 solo tiene dev,IniDate y EndDate agregados.

2. Se ha añadido una columna personalizada utilizando la siguiente instrucción if:

if [Date] < [EndDate] and [Date] > [IniDate] then true else false

3. Filtrado para mostrar sólo verdadero

4. Se han eliminado las columnas IniDate, EndDate y Custom dejando solo la fecha, Eqmt y Dev.

No es el más elegante, pero se realiza el trabajo en Power Query. Así es como se ve la M para él. Concedido que no querrías usar mi fuente que querrías usar la tuya.

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WstA3NNU3MjAyUNJRclSK1YlWstQ3hgk4gQUs9OEqnJViYwE=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Date = _t, Eqmt = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type date}}),
    #"Merged Queries" = Table.NestedJoin(#"Changed Type", {"Eqmt"}, Table2, {"Eqmt"}, "Table2", JoinKind.LeftOuter),
    #"Expanded Table2" = Table.ExpandTableColumn(#"Merged Queries", "Table2", {"Dev", "IniDate", "EndDate"}, {"Dev", "IniDate", "EndDate"}),
    #"Added Custom" = Table.AddColumn(#"Expanded Table2", "Custom", each if [Date] < [EndDate] and [Date] > [IniDate] then true else false),
    #"Filtered Rows" = Table.SelectRows(#"Added Custom", each ([Custom] = true)),
    #"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"Custom", "IniDate", "EndDate"})
in
    #"Removed Columns"

image.png


¿Mi(s) respuesta(s) le ayudó? Dale un kudos haciendo clic en Thumbs Up! ?
¿Mi publicación respondió a tu(s) pregunta(s)? Marca mi puesto como solución. Esto ayudará a otros a encontrar la solución.

Super User II
Super User II

Creo que esto lo hace. Por favor, prueba.

Agregue una columna en la primera tabla (cambie el nombre de la segunda tabla por TableB

List.First(
            Table.SelectRows(
                TableB,
                (r) =>
                    r[IniDate] < [Date]
                    and
                    r[EndDate] > [Date]
                    and
                    r[Eqmt] = [Eqmt] 
            )[Dev]
        )

View solution in original post

Helpful resources

Announcements
secondImage

Congratulations!

We are excited to announce the Power BI Super Users!

Wave Release 2

Check out the updates in Power BI.

Overview of Power BI 2020 release wave 2!

Microsoft Ignite

Microsoft Ignite

Join digitally, March 2–4, 2021 to explore new tech that's ready to implement. Experience the keynote in mixed reality through AltspaceVR!

secondImage

The largest Power BI virtual conference

100+ sessions, 100+ speakers, Product managers, MVPs, and experts. All about Power BI. Attend online or watch the recordings.