2 votes

Excel Power Query : Comment ajouter une nouvelle colonne déterminant les dates les plus récentes et les deuxièmes plus récentes (actuelle et antérieure) ?

J'ai un ensemble de données qui contient la date du rapport et certains champs. Je voudrais ajouter une colonne (ex. Statut) en utilisant Excel Power Query qui détermine la date la plus récente (ex. 3/1/2022) et lui attribue la valeur "Actuel", et la deuxième plus récente (ex. 2/1/2022) et lui attribue la valeur "Antérieur". Toute aide serait grandement appréciée. Merci.

Date du rapport

Entreprise

Numéro

Statut

1/1/2022

Apple

7

1/1/2022

HP

4

2/1/2022

Apple

8

Précédent

2/1/2022

HP

9

Précédent

3/1/2022

Apple

10

Actuel

3/1/2022

HP

10

Actuel

2voto

David Points 26

Voilà.

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMtQ31DcyMDJSUNJRciwoyEkFMcwVlGJ1UOU8AkCkCUTCCJsmC0w5iCZLiIQxNk2GBpiSEF1gmVgA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [#"Report Date" = _t, Company = _t, Number = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Report Date", type date}, {"Company", type text}, {"Number", Int64.Type}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"Company"}, {{"All", each _, type table [Report Date=nullable date, Company=nullable text, Number=nullable number]}}),
    #"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each 
        let a = Table.Sort([All], {{"Report Date", Order.Descending}}),
        b = Table.AddIndexColumn(a, "index"),
        c = Table.AddColumn(b, "Status", each if [index] = 0 then "Current" else if [index] = 1 then "Prior" else null )
        in c
        ),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Company", "All"}),
    #"Expanded Custom" = Table.ExpandTableColumn(#"Removed Columns", "Custom", {"Report Date", "Company", "Number", "index", "Status"}, {"Report Date", "Company", "Number", "index", "Status"}),
    #"Removed Columns1" = Table.RemoveColumns(#"Expanded Custom",{"index"})
in
    #"Removed Columns1"

enter image description here

2voto

horseyride Points 654

Dans powerquery, essayez ci-dessous (qui ignore la société)

Pour obtenir toutes les valeurs de la colonne Date du rapport, utilisez
Tableau [ReportDate]

Triez-le pour le mettre dans l'ordre des dates
List.Sort(Table[ReportDate],Order.Descending)

Comme il y a des dates qui se répètent, nous supprimons les doublons.
List.Distinct(List.Sort(Table[ReportDate],Order.Descending))

Si vous prenez la première ligne, c'est la dernière date.
List.Distinct(List.Sort(Table[ReportDate],Order.Descending)){0}

et la date antérieure à celle-là est
List.Distinct(List.Sort(Table[ReportDate],Order.Descending)){1}

Ensuite, il suffit d'ajouter une colonne personnalisée qui compare ReportDate sur chaque ligne à ces

let  Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Report Date", type date}, {"Company", type text}, {"Number", Int64.Type}}),
LastDate=List.Distinct(List.Sort(#"Changed Type"[Report Date], Order.Descending)){0},
NextDate=List.Distinct(List.Sort(#"Changed Type"[Report Date], Order.Descending)){1},
#"Added Custom" = Table.AddColumn(#"Changed Type", "Status", each if [Report Date]=LastDate then "Current" else if [Report Date]=NextDate then "Prior" else null)
in  #"Added Custom"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X