Вічний календар свят – POTW #12 (Power Query Solution)

У цій публікації блогу ми розглянемо моє рішення для . Для цього завдання ми переглянули перше завдання LuckyTemplates «Проблема тижня», де ми створили вічний календар свят із поєднання конкретних і відносних дат. Але цього разу ми будемо використовувати лише Power Query . Ви можете переглянути повне відео цього підручника внизу цього блогу.

Вічний календар свят – POTW #12 (Power Query Solution)

Якщо ви застрягли на самому розподілі проблеми, ви можете переглянути, щоб побачити, чи є в будь-якому з підходів елементи, які можуть допомогти вам у вирішенні цього завдання.

Вічний календар свят – POTW #12 (Power Query Solution)

Читаючи матеріали, я бачив суміш людей, які використовували інтерфейс користувача та писали власні функції для створення вічного календаря. Було приємно аналізувати кожен запис, і якщо ви хочете отримати натхнення, я заохочую вас зробити те саме.

Коли я сам працював над цим сценарієм, я зрештою створив кілька рішень. Той, який я використав, найкраще ілюструє, як можна не лише розбити проблему на менші частини , але й зробити їх видимими . Це дуже корисно, якщо ви зіткнулися з помилкою або неочікуваними результатами.

Зміст

Відправна точка для створення вічного календаря

Цей сирий святковий стіл – наша відправна точка. Щоб скласти дату, нам знадобляться рік, місяць і день для конкретних дат. Не вистачає лише року.

Вічний календар свят – POTW #12 (Power Query Solution)

Але для відносних дат нам потрібно трохи більше попрацювати. Для початку нам потрібно розділити цей стовпець дня на числове значення та день тижня. Давайте розглянемо ці кроки.

Отримання років із таблиці дат

Щоб зробити це рішення динамічним, я збираюся отримати роки з таблиці дат . У рядку формул ви можете побачити, що я використав проекцію, щоб отримати таблицю з одним стовпцем із моєї таблиці дат. Це, звичайно, міститиме дублікати. Щоб видалити їх, я додав Table.Distinct .

Вічний календар свят – POTW #12 (Power Query Solution)

Коли я клацну збоку в білому просторі біля будь-якої з цих таблиць, ви також побачите список із різними роками, присутніми в моєму запиті таблиці дат.

Вічний календар свят – POTW #12 (Power Query Solution)

Нам дали назву місяця , але насправді нам знадобиться номер місяця . Тепер, коли ми об’єднуємо рік із назвою місяця, ми можемо використовувати функцію Date.From , щоб повернути перше число цього місяця як значення дати.

Додавши Date.Month , ми залишимо лише номер місяця для цієї конкретної дати. Для січня повертається 1. Для лютого повертається 2 і так далі.

Вічний календар свят – POTW #12 (Power Query Solution)

Отримання числівника зі стовпця «День».

Щоб отримати цифру зі стовпця дня, ми вирішили не розбивати стовпець і замість цього витягувати значення. Як ви можете бачити в рядку формул, ми використали Text.BeforeDelimiter і використали цей пробіл для ідентифікації правої та лівої частини текстового рядка.

Вічний календар свят – POTW #12 (Power Query Solution)

Якщо місця немає, ми хочемо повернути все, що залишилося в стовпці дня. Отже, для першого запису повертається 1. Для другого запису, який містить цей пробіл, повертається перша частина текстового рядка, слово Third .

Вічний календар свят – POTW #12 (Power Query Solution)

Ми використаємо подібний підхід, щоб отримати назву дати, але використаємо функцію List.PositionOf . Це повертає зміщення від нуля значення у списку, переданого як перший аргумент, і повертає -1, якщо значення не відображається в цьому списку.

Вічний календар свят – POTW #12 (Power Query Solution)

Для першого запису він передає значення 1, якого немає в нашому списку. Ось чому він повертає значення -1. Для другого запису повертається значення Monday .

Він передає це нашій функції та повертає 1, оскільки це другий елемент у нашому списку. Далі ми замінимо всі значення -1 на null .

Вічний календар свят – POTW #12 (Power Query Solution)

На даний момент ми створили всі будівельні блоки, необхідні для виклику спеціальної функції.

Виклик спеціальної функції для постійного календаря свят

У рядку формул ми бачимо, що функція приймає чотири аргументи: рік , місяць , число і день тижня .

Вічний календар свят – POTW #12 (Power Query Solution)

Але як він визначає це значення дати? Ми знову використаємо List.PositionOf , щоб отримати числове значення для числа. У нас є список, що містить перше, друге, третє та четверте. Коли ми передаємо числове значення List.PositionOf , воно повертає зміщення від нуля.

Вічний календар свят – POTW #12 (Power Query Solution)

Знову ж таки, якщо значення відсутнє, воно повертає -1. Отже, для першого запису ми передаємо значення 1. 1 немає в цьому списку, тому він повертає значення -1. Для другого запису ми передаємо значення Third, яке є третім елементом у нашому списку. Це повертає значення 2.

Створення списку дат

Давайте тепер створимо список дат. Ми визначимо дату початку для цього місяця, визначимо кількість днів у цьому місяці та використаємо List.Dates , щоб створити список, який містить усі дні цього місяця.

Вічний календар свят – POTW #12 (Power Query Solution)

Далі ми використаємо List.Select , щоб зберегти лише ті дати, які припадають на певний день тижня.

Вічний календар свят – POTW #12 (Power Query Solution)

Коли ми клацаємо збоку біля будь-якого зі списків, ми бачимо, що він містить лише ці чотири елементи.

Вічний календар свят – POTW #12 (Power Query Solution)

Застосування умовної логіки

Нарешті, ми застосуємо умовну логіку для побудови або отримання дати. Якщо день тижня дорівнює нулю , що вказує на те, що ми маємо конкретну дату, ми можемо використати внутрішній #date для створення значення дати.

Вічний календар свят – POTW #12 (Power Query Solution)

Якщо число дорівнює останньому, ми можемо використати функцію List.Reverse , щоб змінити порядок у списку та отримати перше значення.

Вічний календар свят – POTW #12 (Power Query Solution)

Якщо ми хочемо змінити цей порядок зростання на спадний, ми завжди можемо витягнути останню дату з цього діапазону дат. Немає значення, чотири чи п’ять елементів у списку. Змінивши порядок і витягнувши перший елемент, ми завжди матимемо останню дату.

Вічний календар свят – POTW #12 (Power Query Solution)

Для всіх інших випадків ми використовуємо List.Skip .

Вічний календар свят – POTW #12 (Power Query Solution)

Ми можемо отримати значення на основі цієї позиції в списку. Для Дня подяки цифра є четвертою, а четверта повертає 3. Це пропускатиме перші три значення у списку та завжди повертатиме четвертий елемент.

Вічний календар свят – POTW #12 (Power Query Solution)

Давайте зведемо все разом і перейдемо до запиту розв’язання. Для вихідного кроку ми викликаємо таблицю святкових дат RAW. Далі ми додамо стовпець, який повертає список із датами.

Вічний календар свят – POTW #12 (Power Query Solution)

Перегляд коду M для вічного календаря свят

Давайте перевіримо код M для стовпця. Для кожного рядка таблиці ми вклали таблицю, що містить різні роки з таблиці дат. Потім ми перетворили значення в цьому стовпці року, викликавши спеціальну функцію.

Вічний календар свят – POTW #12 (Power Query Solution)

Звичайно, щоб мати можливість викликати спеціальну функцію, ми повинні спочатку виконати деякі налаштування. Ми повинні отримати номер місяця , числове значення і, звичайно, день тижня . Потім із цієї вкладеної таблиці ми зберегли список із датами.

Вічний календар свят – POTW #12 (Power Query Solution)

Коли ми клацаємо збоку в білому просторі, ми можемо побачити попередній перегляд цього списку внизу.

Вічний календар свят – POTW #12 (Power Query Solution)

Наступним кроком буде розгорнути цей список і додати CelebratedOnDate .

Вічний календар свят – POTW #12 (Power Query Solution)

Це логіка, яку ми використовували в цьому розрахунку: якщо дата припадає на суботу, ми збираємося відняти день, щоб отримати п’ятницю. Якщо це неділя, то ми збираємося додати день, щоб приземлитися на понеділок. Якщо це не субота чи неділя, то ми хочемо нуль.

Вічний календар свят – POTW #12 (Power Query Solution)

Нарешті, останнім кроком є ​​зміна типів.

Вічний календар свят – POTW #12 (Power Query Solution)

Висновок

Просто коротко про це нагадаюце триваюча серія, яка відбувається кожної 1-ї та 3-ї середи на форумі LuckyTemplates. Проблема, опублікована на 1-му тижні, потребує рішення на основі DAX, тоді як проблема на 3-му тижні вимагає рішення на основі Power Query.

Якщо вам сподобався вміст, описаний у цьому POTW, підпишіться на телеканал LuckyTemplates, щоб отримати більше. У нас постійно надходить величезна кількість вмісту, створюваного мною та низкою творців контенту, які всі прагнуть покращити спосіб використання LuckyTemplates і Power Platform.

Меліса


Що таке Power Query та мова M: детальний огляд

Що таке Power Query та мова M: детальний огляд

Цей підручник містить огляд редактора Power Query і мови M на робочому столі LuckyTemplates.

Створення звіту з розбивкою на сторінки: додавання текстів і зображень

Створення звіту з розбивкою на сторінки: додавання текстів і зображень

Дізнайтеся, як створити звіт із розбивкою на сторінки, додати тексти та зображення, а потім експортувати звіт у різні формати документів.

Функція автоматизації SharePoint | Вступ

Функція автоматизації SharePoint | Вступ

Дізнайтеся, як використовувати функцію автоматизації SharePoint для створення робочих процесів і допомоги в мікрокеруванні користувачами, бібліотеками та списками SharePoint.

Вирішіть задачу аналізу даних за допомогою прискорювача LuckyTemplates

Вирішіть задачу аналізу даних за допомогою прискорювача LuckyTemplates

Відточіть свої навички розробки звітів, приєднавшись до змагання з аналізу даних. Прискорювач може допомогти вам стати суперкористувачем LuckyTemplates!

Підсумки в LuckyTemplates за допомогою DAX

Підсумки в LuckyTemplates за допомогою DAX

Дізнайтеся, як обчислювати поточні підсумки в LuckyTemplates за допомогою DAX. Поточні підсумки дозволяють вам не потрапити в окремий результат.

Змінні LuckyTemplates Dax постійні: що це означає?

Змінні LuckyTemplates Dax постійні: що це означає?

Зрозумійте концепцію змінних у DAX у LuckyTemplates і значення змінних для обчислення показників.

Діаграма нахилу LuckyTemplates: огляд

Діаграма нахилу LuckyTemplates: огляд

Дізнайтеся більше про настроюваний візуал під назвою LuckyTemplates Slope chart, який використовується для показу зростання/зменшення для одного чи кількох показників.

Колірні теми LuckyTemplates для однорідної візуалізації

Колірні теми LuckyTemplates для однорідної візуалізації

Відкрийте для себе кольорові теми в LuckyTemplates. Це необхідно для того, щоб ваші звіти та візуалізації виглядали та працювали без проблем.

Обчислення середнього значення в LuckyTemplates: виділення результатів у будні чи вихідні за допомогою DAX

Обчислення середнього значення в LuckyTemplates: виділення результатів у будні чи вихідні за допомогою DAX

Розрахувати середнє значення в LuckyTemplates можна кількома способами, щоб отримати точну інформацію для ваших бізнес-звітів.

Шаблони LuckyTemplates | Стандартне оформлення робочого столу LuckyTemplates

Шаблони LuckyTemplates | Стандартне оформлення робочого столу LuckyTemplates

Давайте заглибимося в стандартну тематику LuckyTemplates і розглянемо деякі функції, вбудовані в саму програму LuckyTemplates Desktop.