Рвав-рвав, собака Смайл говорит: «Здрям!»
Представляем вашему вниманию свою 4-ю разработку комплекта отчетности «Офисная жизнь» — отчет «Аптечка первой помощи», помогающий контролировать наличие в офисе такой важной вещи, как лекарства.
Информация, представленная в отчете, носит демонстрационный характер, и не является руководством к действию, собака Смайл при разработке активно пользовался гуглом.

Отчет реализован при помощи DAX, Power Query, и построен на базе производственного календаря (см. отчет Производственный календарь).
Рвав-рвав, не устаю повторять, что «Производственный календарь» — наше все. Хотя, раскрою секрет, в данном случае он избыточен, и используется просто календарь с датами. Однако собака Смайл — маленький стратег, и где-то в голове у него стала мелькать идея создать комплект отчетности по принципу «Один файл — много отчетов». Так что, зрим глубже, пишем универсально, по возможности — просто, и единообразно. (Наверно, вы уже заметили это по дизайну).
Разработка содержит 2 листа:
- Лист «Отчет» — собственно, сам отчет, содержащий данные по состоянию аптечки в компании;
- Лист «Информация» — памятка пользователя.
Используемые элементы:
- Скрывающаяся панель фильтров (стандартный функционал).
- Кнопки.
- Иконки.
- Подсказки.
- В качестве основного элемента используется «Матрица», а дополнительных — «Карточка» и «Кольцевая диаграмма».
- Прочие украшательства — «Текстовое поле», «Фигуры», условное форматирование.
Процесс разработки:
- Для указания базового промежутка времени на уровне Power Query были созданы параметры «Начало периода» и «Конец периода» — это даты начала и окончания периода, которые выведены в название отчета.
- Создана таблица «Меры» — техническая таблица, созданная для удобства.
- Создана таблица «Параметры» — содержит параметры отчета для указания необходимого отрезка времени.
- Создана таблица «Праздники» — таблица настройки, содержащая список российских праздников.
- Создана таблица «Переносы» — таблица настройки, содержащая даты так называемых «перенесенных» дней.
- Создана таблица «Плановые позиции» — содержит набор исходных данных, который имеет минимально необходимую структуру для планирования стоимости аптечки, а именно:
— плановое количество указанных позиций (поскольку их может быть больше одной в зависимости от количества сотрудников);
— плановую цену позиции (ориентировочная цена позиции, так сказать, чтобы представлять бюджет).
- Создана таблица «Фактические позиции» — содержит набор исходных данных, который имеет минимально необходимую структуру для контроля текущего состояния аптечки, а именно:
— фактическое количество указанных позиций;
— дату проверки аптечки;
— фактический срок годности конкретной позиции.
- Создана таблица «Справочник позиций» — содержит набор исходных данных, в котором отражена следующая информация:
— наименование позиции;
— форму выпуска позиции;
— заявленный срок годности позиции;
— назначение позиции;
— фармакологическая группа.
Рвав-рвав, на этом работы с Power Query завершены. видимо, тут стоит пояснить, почему, собственно, так «сложно».
Итак, логика хитрой собаки следующая:
- Количество позиций может быть различно, в зависимости от количества сотрудников, работающих в офисе (планирование количества обязательно, так как таблеток может на всех не хватить).
- Цена позиции, используемая для оценки стоимости аптечки, близка к реальной, для большей точности конечный потребитель может ее периодически актуализировать, или выставлять фактические цены последней закупки.
- Срок годности позиций может быть разным даже при одинаковом названии позиции (например, в аптеке лекарства попались из разных партий). Также есть позиции без срока годности (например, медицинские ножницы), или с большим сроком годности (например, тонометр).
- Есть очень важный момент: препарат может быть в наличии, но при этом просрочен, что, в свою очередь, означает, что по факту его нет.
Рвав-рвав, просроченные лекарства отправляем в утиль, однозначно!
- Проверку состояния аптечки лучше делать, например, ежемесячно, то есть мы предполагаем, что сроки годности вносятся исправно, а просроченные позиции заменяются нормальными на постоянной основе :-)
- Также важно понимать разницу между позициями, составляющими «джентельменский набор» (в примере использовано 20 наименований), и позициями, которые необходимо закупить (их может быть больше 20, в зависимости от размеров коллектива). То есть первое — это некая постоянная величина, когда отсутствие чего-либо дает повод, как минимум, озаботиться данным вопросом, а второе можно планировать в зависимости от частоты наступления конкретных обстоятельств.
Рвав-рвав, проще говоря, не стоит народ на лапах — покупай бинты и йод!
- На уровне модели данных создана таблица «Календарь» — базовая таблица, определяющая набор дат для расчета.
- Следующим этапом является проверка связей получившейся модели данных, и их корректировка в случае необходимости. Схема модели представлена ниже:

- Затем при помощи DAX начинаем формировать нужные аналитические разрезы, например, производим деление общего массива данных, сформированного в таблице «Dataset_Actual», на дополнительные составляющие: в соответствии со сроком годности получаем статус позиции, равный «Нормально» или «Просрочено».
- Далее, при помощи мер, производится расчет необходимых показателей для формирования итогового количества позиций по закупке. Данное количество также распределено по статусам.
- При визуализации данных был применен функционал условного форматирования.
- При визуализации данных был применен функционал всплывающих подсказок.
- Управление фильтрацией данных в разрезе временных периодов не реализовано специально (за исключением параметров), поскольку в данном отчете, по нашему мнению, важно именно состояние в настоящий момент времени. Именно для этого введена информация о дате последней проверки.
Особенности разработки:
- Работа и функционал созданного календаря подробно описана в одной из предшествующих статей, все преимущества сохранены.
- При разработке сделано допущение, что информация вносится в источник данных в разрезе каждой позиции. Также, справочник позиций, используемый в качестве демонстрационных данных, должен быть расширен в соответствии с потребностями конкретной организации.
- Отчет, на начальном этапе, подскажет, что можно использовать для облегчения появившегося недомогания (см. фильтр «Симптомы»), однако это не панацея, и, по-хорошему, нужно обратиться к врачу.
- Дополнительно обозначена примерная стоимость аптечки.
- При разработке отчета данные исходного набора значений вносились непосредственно в Power BI (таблицы «Плановые позиции», «Фактические позиции» и «Справочник позиций»), дабы конечный файл не зависел от внешних источников. Переключение на внешние источники данных не составляет проблем.
Рвав-рвав, граждане, здоровье — штука важная, своевременно и правильно используя данную разработку, можно избежать множества проблем, если вдруг «авось» все-таки наступит.
Правда в случае, как у меня на фото, одним йодом не отделаешься. Когда повредил лапу, хозяин, бросив все, вез меня на такси к хирургу. Дело было зимой, напоролся на стекло, закончилось все нормально.
На этом все.
Будьте здоровы!
Ваш Смайл