Skip to content

Instantly share code, notes, and snippets.

@DmitriyVlasov
Last active January 25, 2019 13:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DmitriyVlasov/020f681667fd105d912a2f49d3c0ad48 to your computer and use it in GitHub Desktop.
Save DmitriyVlasov/020f681667fd105d912a2f49d3c0ad48 to your computer and use it in GitHub Desktop.
// Пример использования функции получения Производственного календаря:
//
// источник взят отсюда: http://data.gov.ru/opendata/7708660670-proizvcalendar
// На момент 24.05.2018 в календаре содержатся описание праздников с 1999 года по 2025 год.
//
// let
// PROD_СALENDAR_URL =
// "https://data.gov.ru/opendata/7708660670-proizvcalendar/data-20181017T0930-structure-20181017T0930.csv?encoding=UTF-8",
// ProductionCalendar = getProductionCalendar( PROD_СALENDAR_URL )
// in
// ProductionCalendar
///////////////////////////////////////////////////////////////////////////
let
getProductionCalendar = ( URL as text ) as nullable table =>
let
MONTHS_ORDERED_BY_DEFAULT = {
"Январь", "Февраль", "Март",
"Апрель", "Май", "Июнь",
"Июль", "Август", "Сентябрь",
"Октябрь", "Ноябрь", "Декабрь"
},
GetDataFromGovRu =
Csv.Document(
Web.Contents( URL ),
[ Delimiter = ",",
Encoding = 65001,
QuoteStyle = QuoteStyle.None ]
),
#"Повышенные заголовки" =
Table.PromoteHeaders( GetDataFromGovRu ),
#"Переименовали поле в год" =
Table.RenameColumns( #"Повышенные заголовки",
{
{"Год/Месяц", "Год"}
}
),
#"Выбрали год и месяц" =
Table.SelectColumns( #"Переименовали поле в год",
{ "Год" } & MONTHS_ORDERED_BY_DEFAULT
),
#"Спрямили календарь" =
Table.UnpivotOtherColumns( #"Выбрали год и месяц",
{ "Год" }, "Месяц", "День"
),
#"Добавили номер месяца" =
Table.AddColumn( #"Спрямили календарь", "НомерМесяца", each
1 + List.PositionOf( MONTHS_ORDERED_BY_DEFAULT, [Месяц] ),
type number
),
#"Преобразовали строку дат в список" =
Table.TransformColumns( #"Добавили номер месяца",
{
{ "День", each Text.Split( _, "," ) }
}
),
#"Развернули список дней" =
Table.ExpandListColumn( #"Преобразовали строку дат в список",
"День"
),
#"Добавили сокращенный день" =
Table.AddColumn( #"Развернули список дней", "Сокращенный День", each
Text.Contains( [День], "*" )
),
#"Добавили выходной день" =
Table.AddColumn( #"Добавили сокращенный день", "Выходной День", each
not [Сокращенный День]
),
#"Удалили признак сокращенного дня" =
Table.ReplaceValue( #"Добавили выходной день",
"*", "", Replacer.ReplaceText, { "День" }
),
#"Уточнли тип полей календаря" =
Table.TransformColumnTypes( #"Удалили признак сокращенного дня",
{
{ "Год", Int64.Type },
{ "День", Int64.Type },
{ "НомерМесяца", Int64.Type }
}
),
#"Рассчитали дату" =
Table.AddColumn( #"Уточнли тип полей календаря", "Дата", each
#date( [Год], [НомерМесяца], [День] )
)
in
#"Рассчитали дату"
in
getProductionCalendar
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment