
Описание
В этом уроке мы в Power Query воспроизведем функцию Switch из стандартного Excel и Power Pivot.
В наших данных есть столбец с датой, по состоянию на которую в отчете содержатся данные. При этом отчет выходит всегда в пятницу. Нам надо добавить еще 1 столбец с датой ближайшей пятницы.
Решение
Получается, что в новом столбце должна выполняться следующая логика: если дата, которая нам дана приходится на понедельник, то прибавить 4 дня, чтобы получить ближайшую пятницу, если на вторник, то 3 и т. д.
Вспомним как создать пользовательскую функцию:
- Создать запрос для одного единственного случая
- Заменить хардкод на название параметра
Наша пользовательская функция будет содержать 3 шага:
- Создать список списков пар соответствий
- Выбор одного дня
- Из списка дня выбрать только нужное значение
Примененные функции
- List.First
- List.Select
- Excel.CurrentWorkbook
- Table.TransformColumnTypes
- Int64.Type
- Table.AddColumn
- Date.DayOfWeekName
- Number.From
Код
Код пользовательской функции:
(week_day) =>
let
source = {
{"понедельник", 4},
{"вторник", 3},
{"среда", 2},
{"четверг", 1},
{"пятница", 0}
},
Result = List.First(List.Select(source, each _{0} = week_day)){1}
in
Result
Код результирующей таблицы:
let
source = Excel.CurrentWorkbook(){[Name = "FUT86_16"]}[Content],
types = Table.TransformColumnTypes(
source,
{
{"Market and Exchange Names", type text},
{"As of Date in Form YYYY-MM-DD", type date},
{"Noncommercial Positions-Long (All)", Int64.Type},
{"Noncommercial Positions-Short (All)", Int64.Type},
{"Commercial Positions-Long (All)", Int64.Type},
{"Commercial Positions-Short (All)", Int64.Type}
}
),
table_add_col = Table.AddColumn(
types,
"Название дня",
each Date.DayOfWeekName([#"As of Date in Form YYYY-MM-DD"]),
type text
),
table_add_col_2 = Table.AddColumn(
table_add_col,
"Дата публикации",
each Date.From(
Ф_SWITCH_РучнойВвод([Название дня])
+ Number.From([#"As of Date in Form YYYY-MM-DD"])
)
)
in
table_add_col_2