Power Query: номер дня финансового месяца, рабочий день

У меня есть простой финансовый календарь, который имеет такую ​​структуру:

Date    Fiscal Month    Fiscal MonthDays    IsWorkingDay
01.01.2021  12  40  FALSE
02.01.2021  12  41  FALSE
03.01.2021  12  42  FALSE
04.01.2021  1   1   TRUE
05.01.2021  1   2   TRUE
06.01.2021  1   3   TRUE
07.01.2021  1   4   TRUE
08.01.2021  1   5   TRUE
09.01.2021  1   6   FALSE
10.01.2021  1   7   FALSE

У меня есть столбец Fiscal MonthDays, который показывает мне порядковый номер дня, независимо от того, рабочий это день или нет. Теперь я хотел бы добавить столбец с номером дня только для рабочих дней.

Как бы ты это сделал?


person joshua    schedule 28.02.2021    source источник
comment
какой наивысший номер дня? 5? Количество дней в году?   -  person horseyride    schedule 28.02.2021
comment
Наибольшее число составляет 42 для декабрьского / 53-недельного года, где в финансовом месяце в декабре 6 недель вместо 5.   -  person joshua    schedule 28.02.2021


Ответы (2)


Посмотрите, работает ли это для вас

Добавить индекс

Фильтр по рабочим дням

Сгруппируйте по финансовому месяцу (вы можете также добавить финансовый год) и добавить второй индекс. Расширять

Слить обратно в исходную таблицу

Обратите внимание, что WorkingDayNumber из любого неполного месяца в начале таблицы будет иметь неправильные числа. Вы также можете отфильтровать любые строки, в которых для FiscalMonth нет 1 в столбце FiscalMonthDays. Здесь не учтено

введите описание изображения здесь

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type date}}),
#"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1),

//filter for WorkingDay, Group, Add index based on Fiscal Month
#"Filtered Rows" = Table.SelectRows(#"Added Index", each ([IsWorkingDay] = true)),
#"Grouped Rows" = Table.Group(#"Filtered Rows", {"Fiscal Month"}, {{"Count", each Table.AddIndexColumn(_, "Index2", 1, 1), type table}}),
#"Expanded Count" = Table.ExpandTableColumn(#"Grouped Rows", "Count", {"Index", "Index2"}, {"Index", "Index2"}),

//Merge back to original table
#"Merged Queries" = Table.NestedJoin(#"Added Index",{"Index"},#"Expanded Count",{"Index"},"Table2",JoinKind.LeftOuter),
#"Expanded Table2" = Table.ExpandTableColumn(#"Merged Queries", "Table2", {"Index2"}, {"WorkingDaysNumber"}),
#"Sorted Rows" = Table.Sort(#"Expanded Table2",{{"Index", Order.Ascending}}),
#"Removed Columns" = Table.RemoveColumns(#"Sorted Rows",{"Index"})
in #"Removed Columns"
person horseyride    schedule 28.02.2021

Немного другой способ (при условии, что вы используете данные за один год, в противном случае вы должны сначала создать столбец для уникальных месяцев (формат, например, ГГГГ_ММ), а затем сгруппировать по нему таблицу вместо столбца финансового месяца):

let
    Source = Excel.CurrentWorkbook(){[Name="Data"]}[Content],
    group = Table.Group(Source, {"Fiscal Month","IsWorkingDay"}, {"temp", each _}),
    replace = Table.ReplaceValue(group,each [IsWorkingDay],"TRUE",(a,b,c)=>if b=c then Table.AddIndexColumn(a,"i",1) else a,{"temp"}),
    final = Table.Combine(replace[temp])
in
    final
person Aleksei Zhigulin    schedule 28.02.2021