Table.RemoveColumns на основе даты - PullRequest
0 голосов
/ 12 февраля 2019

Я ищу, чтобы вставить шаг удаления столбца, который удаляет любой столбец, в котором заголовок (который является датой) предшествует определенной дате (старше, чем X лет до текущей даты).Я получаю большой дамп данных, который представляет собой просто список имен клиентов и сборов, которые они платят каждый месяц с 2012 года по сегодняшний день, во главе с месяцем, в который они платят каждый сбор, но со временем мне не нужны самые старые данные.

До сих пор я пытался создать список из заголовков (основываясь на предыдущем ответе другого члена правления - thankyou @horseyride!) И затем удалить столбцы, которые не соответствуют критериям ИЗ этого списка.Однако он продолжает ломаться.

Это самая последняя строка в расширенном редакторе

# "Pivoted Column" = Table.Pivot (Table.TransformColumnTypes (# "Удаленные столбцы", {{"КалендарьПериод ", введите текст}}," en-GB "), List.Distinct (Table.TransformColumnTypes (#" Удаленные столбцы ", {{" Календарный период ", введите текст}}," en-GB ") [#"Календарный период "])," Календарный период "," Утвержденная сумма счета ", List.Sum)

Это строки, которые я пытаюсь создать:

" ColumnList "= List.Select(Table.ColumnNames (# "Pivoted Column"), каждый Text.Contains (_, "")) ,,

"Удалить столбцы" = Table.Transform (# "Pivoted Column", Table.RemoveColumns (# "ColumnList", каждый {}) в виде таблицы)

в # "Удалить столбцы"

Второй бит кода, который, как мне кажется, не может быть правильным - это то, что, я считаю, должно выглядетькак сейчас.Но, по сути, я хочу, чтобы таблица удалила все столбцы, в которых их заголовок (дата) предшествует количеству X лет, превышающему текущую дату.

РЕДАКТИРОВАТЬ - снимок экрана до и после того, как желаемое сокращение было декабрь 2012 г.:

Пример данных

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Просто используйте следующий код.Для статической даты:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    final = Table.SelectColumns(Source, List.Select(Table.ColumnNames(Source),
                                each try Date.From(_) >= #date(2012,12,1) otherwise true))
in
    final

Для динамической даты (старше 3 лет до текущей даты):

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    final = Table.SelectColumns(Source, List.Select(Table.ColumnNames(Source), 
            each try Date.From(_) >= Date.AddYears(Date.From(DateTime.FixedLocalNow()),-3)
                 otherwise true))
in
    final
0 голосов
/ 12 февраля 2019

Предполагая, что у вас есть именованный диапазон date_var, который содержит дату (построенную с использованием любой формулы, которую вы хотите), и вы хотите исключить все столбцы, которые меньше этой даты

Метод 1 - Отключить иповернуть назад.Может быть медленнее, чем метод 2

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Unpivoted Other Columns" = Table.UnpivotOtherColumns(Source, {"Primary Customer Name"}, "Attribute", "Value"),
#"Changed Type" = Table.TransformColumnTypes(#"Unpivoted Other Columns",{{"Attribute", type date}}),
DateVar=Date.From(Excel.CurrentWorkbook(){[Name="date_var"]}[Content]{0}[Column1]),
#"Filtered Rows" = Table.SelectRows(#"Changed Type", each [Attribute] >= DateVar),
#"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Filtered Rows", {{"Attribute", type text}}, "en-US"), List.Distinct(Table.TransformColumnTypes(#"Filtered Rows", {{"Attribute", type text}}, "en-US")[Attribute]), "Attribute", "Value", List.Sum)
in #"Pivoted Column"

Метод 2 - непосредственно создать список старых столбцов даты и удалить их

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
ColumnList= Table.FromList(List.Skip(Table.ColumnNames(Source),1)),
#"Changed Type" = Table.TransformColumnTypes(ColumnList,{{"Column1", type date}}),
DateVar=Date.From(Excel.CurrentWorkbook(){[Name="date_var"]}[Content]{0}[Column1]),
DateFilter = Table.SelectRows(#"Changed Type", each [Column1] < DateVar),
RemoveList = Table.TransformColumnTypes(DateFilter,{{"Column1", type text}})[Column1],
#"Removed Columns" = Table.RemoveColumns(Source,RemoveList)
in #"Removed Columns"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...