Post-Image

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

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

Данная статья появилась, так сказать, “по запросам пользователей”, хотелось при помощи визуализации “Gauge” (“Датчик”) отслеживать ход проекта по времени. Любопытный пес провентилировал вопрос, результаты следующие:

  • Напрямую “воткнуть” данные, содержащие даты, в визуализацию “Gauge” (“Датчик”) не получилось, причем упорный пес пробовал разные варианты;

  • Гугл выдал подобный англоязычный тикет, где ответ поддержки “Можно”, но не написали, как :-Р

    В общем, взяв себя в лапы, решил справиться своими силами, ну и, конечно, наклепать материал по результатам.

  • Для построения обозначенного примера, нам необходимы исходные данные следующего вида:

    art_004_screen_1

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

    Как вы поняли, это был очередной “совет от хитрой собаки Смайла”. Впрочем, простите, что отвлекся. Начинаем.

    Пояснения примера:

  • Визуальный элемент “Список проектов” – cодержит даты начала и окончания проекта, то есть это обычный справочник;

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

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

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

  • Вывести отдельными элементами даты проекта;

  • Визуализировать продолжительность проекта в абсолютном и относительном выражении;

  • В качестве цели для элемента “Gauge” (“Датчик”) выставить некую константу, например, 85% времени, прошедшего с момента начала проекта. Зачем это надо? Предполагаем, что при пересечении данной отметки необходимо произвести проверку “состояния дел”, ну и покусать кого-нибудь, для большей результативности, если это необходимо.

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

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

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

    Дата начала =
    MINX ( 'Dataset'; 'Dataset'[Дата начала проекта] )

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

    Дата окончания = 
    MINX ( 'Dataset'; 'Dataset'[Дата окончания проекта] )

  • Поскольку в качестве основного элемента визуализации “прогресса” проекта мы выбрали “Gauge” (“Датчик”), для того, чтобы его построить согласно описанным требованиям, нам понадобятся следующие элементы: Value (Значение), Minimum value (Минимальное значение), Maximum value (Максимальное значение) и Target value (Целевое значение). Мера для получения начального значения дуги, в днях, задана константой, и выглядит так:

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

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

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

    Рвав-рвав, совет от хитрой собаки Смайла: всегда проверяйте свои расчеты, или внимательно читайте документацию.

    Конечно, можно положиться на удачу, но в данном случае это не наш метод, несмотря на то, что я собакен самый лучший, и, следовательно, самый удачливый :-)

    Функция DATEDIFF возвращает разницу между двумя датами, значение “+1” в формуле стоит потому, что рассчитанное подобным образом количество дней на один день меньше.

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

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

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

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

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

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

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

    Текущая продолжительность проекта, % =

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

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

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

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

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

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

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

    art_004_screen_2

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

  • Создать несколько элементов “Card” (“Карточка”) для визуализации дат проекта и целевого значения проверки проекта, используя соответствующие меры.

  • Создать визуальный фильтр “Перечень проектов”, используя элемент “Slicer” (“Срез”), при этом в качестве значений использовать данные столбца “Название проекта” таблицы “Dataset”. При помощи данного элемента будет происходить процесс фильтрации проектов, для корректной работы важно в свойствах среза включить настройку “Единичное выделение”;

  • Визуализировать длительность проекта, используя элемент “Gauge” (“Датчик”), построенный при помощи соответствующих мер.

  • создать таблицу “Список проектов”, используя элемент “Table” (“Таблица”), таблица является дополнительным элементом, и содержит полный список проектов, фильтрация при помощи среза “Перечень проектов” в ней отключена.

    Рвав-рвав, товарищи, надеюсь, кому-нибудь помог, на этом все.

    Статья закончена, пойду на обход территории, конкурентов гонять!

    Ваш Смайл

    ДЛЯ ЛЮБИТЕЛЕЙ ПОНАЖИМАТЬ НА КНОПОЧКИ