Записки охотника

Отслеживание длительности проекта

Тематические статьи
Рвав-рвав, терпеливый собака Смайл рад вас приветствовать!

Данная статья появилась, так сказать, "по запросам пользователей", хотелось при помощи визуализации "Датчик" отслеживать ход проекта по времени.
Любопытный пес провентилировал вопрос, результаты следующие:
- Напрямую "воткнуть" данные, содержащие даты, в визуализацию "Датчик" не получилось, причем упорный пес пробовал разные варианты.
- Гугл выдал подобный англоязычный "тикет", где ответ поддержки был "Можно", но не написали, как :-Р
В общем, взяв себя в лапы, решил справиться своими силами, ну и, конечно, наклепать материал по результатам.

Пример:

Таблица "График проектов" содержит даты начала и окончания проектов, то есть это обычный справочник:

Таблица
График проектов

Рвав-рвав, вообще, используя методику данного примера, можно отслеживать длительность чего угодно, а отслеживать проект только по времени его продолжения не совсем правильно. Тут, скорее, нужно отслеживать процент реализации проекта, ведь время может и пройти, но ничего не будет сделано…
А еще лучше, использовать процент реализации проекта в комплексе с денежной оценкой. Но что имеем, то имеем :-)

Задача:

На основе представленных данных необходимо отслеживать длительность проекта, используя визуализацию "Датчик” в качестве основного элемента.

Процесс разработки:

  • Создана таблица "График проектов" – это таблица, созданная на уровне Power Query, и содержащая входящие данные в столбцах "Дата начала проекта" , "Дата окончания проекта" и "Название проекта".

Рвав-рвав, собака Смайл умеет удивлять: по сути, то все, что было нам необходимо в качестве начальных данных, так как остальное просто чистые расчеты, реализация которых основана на наборе мер. Подчиняясь решению хозяина, пример было решено изменить и дополнить следующим образом:
– Вывести отдельными элементами даты проекта.
– Визуализировать продолжительность проекта в абсолютном и относительном выражении.
– В качестве цели для датчика выставить некую константу, например, 85% времени, прошедшего с момента начала проекта.
Зачем оно надо? Предполагаем, что при пересечении данной отметки необходимо произвести проверку "состояния дел", ну и покусать кого-нибудь, для большей результативности, если это необходимо.

  • Далее необходимо реализовать расчеты, позволяющие осуществить задумку, озвученную выше. Для начала, можем разобраться с датами, тут все просто. Мера для получения текущей даты выглядит следующим образом:

Текущая дата =
TODAY ()

  • Мера для получения даты начала проекта:

Дата начала =
MINX ( 'График проектов', 'График проектов'[Дата начала проекта] )

  • Мера для получения даты окончания проекта:

Дата окончания =
MINX ( 'График проектов', 'График проектов'[Дата окончания проекта] )

  • Поскольку в качестве основного элемента визуализации прогресса проекта мы выбрали "Датчик", для того, чтобы его построить согласно описанным требованиям, нам понадобятся следующие элементы: значение, минимальное значение, максимальное значение, целевое значение.

  • Мера для получения начального значения дуги, в днях, задана константой, и выглядит так:

Начало проекта, дни =
0

  • Мера для получения конечного значения дуги, в днях, выглядит так:

Общая продолжительность проекта, дни =
SUMX (
    'График проектов',
    DATEDIFF (
        'График проектов'[Дата начала проекта],
        'График проектов'[Дата окончания проекта],
        DAY
    ) + 1
)

Рвав-рвав, всегда проверяйте свои расчеты, или внимательно читайте документацию.
Конечно, можно положиться на удачу, но в данном случае это не наш метод, несмотря на то, что я собакен самый лучший, и, следовательно, самый удачливый :-)
Функция DATEDIFF возвращает разницу между двумя датами, значение "+1" в формуле стоит потому, что рассчитанное подобным образом количество дней на один день меньше.

  • Мера для получения количества дней, прошедших с момента запуска проекта, построена таким образом:

Текущая продолжительность проекта, дни =
VAR _Duration =
    DATEDIFF (
        'График проектов'[Дата начала],
        'График проектов'[Текущая дата],
        DAY
    ) + 1
VAR _Result =
    IF (
        [Дата окончания] < [Текущая дата],
        [Общая продолжительность проекта, дни],
        _Duration
    )
RETURN
    _Result

  • Теперь нам нужно сделать расчеты подобного рода для оформления длительности проекта в процентах. Меры для этого блока дополнительно должны иметь формат "Процентный". Мера для получения начального значения дуги, задана константой, и выглядит так:

Начало проекта, % =
0

  • Мера для получения конечного значения дуги, задана константой, и выглядит так:

Общая продолжительность проекта, % =
1

  • Мера для получения количества дней, прошедших с момента запуска проекта, при пересчете в проценты, построена таким образом:

Текущая продолжительность проекта, % =
DIVIDE (
    [Текущая продолжительность проекта, дни],
    [Общая продолжительность проекта, дни],
    0
)

  • Мера для получения целевого значения (наши 85%), после которого планируется проверить состояние проекта, задана константой, и выглядит следующим образом:

Проверка проекта, % =
0.85

Рвав-рвав, можно было, конечно реализовать это при помощи изменяемого пользователем параметра, но, поскольку описание процесса создания параметров это не "пара строк", собака Смайл напишет отдельную статью по этому поводу в будущем.
Тем более, что на это был запрос от аудитории, и удалось нагуглить только англоязычный контент. Тем не менее, человеку мы с хозяином помогли, кратко описав решение проблемы.

  • Как вы, наверно, смогли заметить, при расчете мер для блока по количеству дней, формула подсчета целевого значения была пропущена, это было сделано умышленно, поскольку рассчитывать его константой неправильно, а “85% – это всегда 85%”. Тем не менее, теперь мы в состоянии почитать целевое значение для текущей продолжительности проекта в днях:

Проверка проекта, дни =
[Проверка проекта, %] * [Общая продолжительность проекта, дни]

Собственно, с расчетами закончено. Общий комплект мер – 11 штук. Построение связей в нашем примере не нужно, поскольку все данные хранятся в одной таблице. Результат разработки представлен на рисунке ниже:

Датчик
Длительность проекта в днях и процентах

Процесс визуализации данных:

  • Создано два элемента "Карточка" для визуализации текущей даты и целевого значения проверки проекта.
  • Создан визуальный фильтр "Название проекта", при помощи элемента "Срез", для корректной работы важно в свойствах элемента включить настройку "Единичное выделение".
  • Визуализация длительности проекта производится при помощи элемента "Датчик".
  • Создана таблица "Данные по проекту" при помощи элемента "Таблица".

Статья закончена, на этом все.

Рвав-рвав, товарищи, надеюсь, кому-нибудь помог, на этом все.
Пойду на обход территории, конкурентов гонять!
Ваш Смайл