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

Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!

Reply
Anonymous
Not applicable

No se puede convertir Tipo a lista de tipos

Hola

Quiero eliminar todos los registros de una tabla llamada F_SOURCE_DAILY excepto la fecha más reciente y las 4 fechas siguientes (en total 5 fechas de calidad)

El único campo que indica la fecha es el campo FK_DATE. El campo FK_DATE es Número entero y su tipo no debe cambiarse

Ejemplo:

Filtered_Rows_01.jpg

En este ejemplo se encuentra la fecha más reciente 20200820 (20 de agosto de 2020).
En este caso quiero mantener los registros desde 20200816 hasta 20200820 (16 de agosto de 2020 hasta el 20 de agosto de 2020)

Resultado:

Filtered_Rows_04.jpg

Observación de que 20200815 no está incluido porque no está en el número 20200820, 20200819, 20200818, 20200817, 20200816,

Quiero aplicar un paso Filas filtradas para hacer esto.

Para encontrar la fecha más reciente en la tabla, podría usar en power Query las funciones List. Max () o List. MAXN ()

Intenté esta expresión:

• Table.SelectRows(F_SOURCE_DAILY,

cada uno (#date(

Int32.From(Text.Middle(Text.From([FK_DATE]),0,4)),
Int32.From(Text.Middle(Text.From([FK_DATE]),4,2)),
Int32.From(Text.Middle(Text.From([FK_DATE]),6,2)))

>- Date.AddDays(

#date(Int32.From(Text.Middle(Text.From(List.Max([FK_DATE])),0,4)),
Int32.From(Text.Middle(Text.From(List.Max([FK_DATE])),4,2)),
Int32.From(Text.Middle(Text.From(List.Max([FK_DATE])),6,2))), -4)))

Recibo un error:

Filtered_Rows_03.jpg

También probé esta expresión:


• Table.SelectRows(F_SOURCE_DAILY, each each ([FK_DATE] á List.MaxN([FK_DATE],5)))


pero eso da el error:

Filtered_Rows_02.jpg

¿Alguien tiene idea de cómo resolver esto?

1 ACCEPTED SOLUTION

Hola @RudyWelvaert

tendrías que ajustar la sintaxis a esto:

Table.SelectRows(F_SOURCE_DAILY, each each ([FK_DATE] á List.MaxN(F_SOURCE_DAILY[FK_DATE],5)))

Por razones de rendimiento, probablemente tendría sentido almacenar en búfer la tabla F_SOURCE_DAILY antes de alimentarse en este paso.

Dentro del 2o argumento de Table.Select Rows, el formulario corto [FK_Date] devuelve el campo del registro (la fila actual) y no toda la columna. Por lo tanto, debe escribir explícitamente el nombre de la tabla cuya columna desea elegir para List.Max.

@FarhanAhmed ,

sólo una advertencia: Los comandos de ordenación en Power Query no mantienen de forma fiable el criterio de ordenación sin un búfer: https://community.powerbi.com/t5/Community-Blog/Bug-warning-for-Table-Sort-and-removing-duplicates-i...


Imke Feldmann (The BIccountant)

If you liked my solution, please give it a thumbs up. And if I did answer your question, please mark this post as a solution. Thanks!

How to integrate M-code into your solution -- How to get your questions answered quickly -- How to provide sample data -- Check out more PBI- learning resources here -- Performance Tipps for M-queries

View solution in original post

4 REPLIES 4
FarhanAhmed
Community Champion
Community Champion

Prueba esto

Necesitas ordenar tu columna

let
    Source = Excel.Workbook(File.Contents("C:\Users\farhan.ahmed\Desktop\Book1.xlsx"), null, true),
    Table1_Table = Source{[Item="Table1",Kind="Table"]}[Data],
    
    #"Sorted Rows" = Table.Sort(Table1_Table,{{"FK_Date", Order.Descending}}),

    Distincttable =  Table.Distinct(Table.SelectColumns(#"Sorted Rows","FK_Date")),
    TopTable = Table.FirstN(Distincttable,5),
   
   
    FilteredTable = Table.NestedJoin(#"Sorted Rows", {"FK_Date"}, TopTable, {"FK_Date"}, "Table1", JoinKind.Inner),
    RemoveColumn = Table.RemoveColumns(FilteredTable,{"Table1"})
in
    RemoveColumn







Did I answer your question? Mark my post as a solution! Appreciate your Kudos!!

Proud to be a Super User!




Hola @RudyWelvaert

tendrías que ajustar la sintaxis a esto:

Table.SelectRows(F_SOURCE_DAILY, each each ([FK_DATE] á List.MaxN(F_SOURCE_DAILY[FK_DATE],5)))

Por razones de rendimiento, probablemente tendría sentido almacenar en búfer la tabla F_SOURCE_DAILY antes de alimentarse en este paso.

Dentro del 2o argumento de Table.Select Rows, el formulario corto [FK_Date] devuelve el campo del registro (la fila actual) y no toda la columna. Por lo tanto, debe escribir explícitamente el nombre de la tabla cuya columna desea elegir para List.Max.

@FarhanAhmed ,

sólo una advertencia: Los comandos de ordenación en Power Query no mantienen de forma fiable el criterio de ordenación sin un búfer: https://community.powerbi.com/t5/Community-Blog/Bug-warning-for-Table-Sort-and-removing-duplicates-i...


Imke Feldmann (The BIccountant)

If you liked my solution, please give it a thumbs up. And if I did answer your question, please mark this post as a solution. Thanks!

How to integrate M-code into your solution -- How to get your questions answered quickly -- How to provide sample data -- Check out more PBI- learning resources here -- Performance Tipps for M-queries

@RudyWelvaert Tomé un enfoque ligeramente diferente usando List.Contains.

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("jc67CcAwDAXAXVS7kJ5/8izG+68RUCACJQS1V93eJFQIDGYF0ymbEKE+IMugRegOajAiTIdpoBGWwzAQfolfpd+CP2kJqQlBQiQh/CXnAg==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [ID = _t, DateKey = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"DateKey", Int64.Type}}),
    #"Keep 5 Days" = 
        Table.SelectRows(
            #"Changed Type",
            each
                let
                    varLastDate = List.Max(#"Changed Type"[DateKey]),
                    varKeepDays = {varLastDate - 4..varLastDate}
                in
            List.Contains(varKeepDays, [DateKey])
        )
in
    #"Keep 5 Days"
  • varLastDate es igual a 20200820
  • varKeepDays devuelve una lista de enteros desde 20200816 hasta 20200820
  • ListContains es la condición de filtro Seleccionar filas: mantiene todo en la tabla del paso #Changed paso que existe en la lista varKeepDays.

Creo que depende de lo que necesites. El List.MaxN mantendrá los 5 días más recientes en la lista, que sería 20, 19, 18, 17 y 15. No veo un 16 en tus datos. Mi método mantendrá 5 días calendario, por lo que 20, 19, 18, 17 y 16, aunque no hay 16 en los datos.



Did I answer your question? Mark my post as a solution!
Did my answers help arrive at a solution? Give it a kudos by clicking the Thumbs Up!

DAX is for Analysis. Power Query is for Data Modeling


Proud to be a Super User!

MCSA: BI Reporting
Greg_Deckler
Super User
Super User

@ImkeF , @edhans


@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
Mastering Power BI 2nd Edition

DAX is easy, CALCULATE makes DAX hard...

Helpful resources

Announcements
April AMA free

Microsoft Fabric AMA Livestream

Join us Tuesday, April 09, 9:00 – 10:00 AM PST for a live, expert-led Q&A session on all things Microsoft Fabric!

March Fabric Community Update

Fabric Community Update - March 2024

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

Top Solution Authors