Определение смены стиля на машине с помощью PowerBI - PullRequest
2 голосов
/ 22 мая 2019

Итак, у меня есть таблица, в которой выводятся все машины в отделе со стилями. Например:

|Machine| |Style| | QTY|  |Time|   |Date|    etc...
     1       001    100   8:00AM   5/21/19
     2       001    200   8:05AM   5/21/19
     1       001    100   9:00AM   5/21/19     
     1       004    100   10:00AM  5/21/19
     2       001    200   9:05AM   5/21/19

Я смотрю, сколько раз стиль меняется для машины. Таким образом, в этом случае для Машины 1 это было одно изменение стиля, а для Машины 2 - ноль.

Я пытался адаптировать некоторый код безрезультатно; главным образом потому, что у меня проблемы с пониманием логики, и я не могу придумать хороший индекс для работы. Вот что я получил до сих пор:

EarliestChange Over Index = 
VAR Temp =
    CALCULATE (
        MAX ( Table[Index] ),
        FILTER (
            Table,
            [Index] < EARLIER ( [Index] )
                && [Style] <> EARLIER ( [Style])
                && Table[Date] = today()-1
        )
    )
VAR Temp1 =
    CALCULATE (
        MIN ( [Index] ),
        FILTER (
            Table,
            [Index] > EARLIER ( [Index] )
                && [Style] <> EARLIER ( [Style])
                && Table[Date] = today()-1
        )
    )
RETURN
   IF ( [Index] > temp && OR ( [Index] < temp1, ISBLANK ( temp1 ) ), temp + 1, 0 ) 

Я пытался ограничить его одним днем, чтобы я мог оценить результаты, чтобы эту часть можно было отбросить. Я пробовал два разных индекса, один был номером машины, а другой - разницей во времени с сегодняшнего дня и минимальной даты в таблице. На визуальном снимке я взял отдельный счетчик индекса EarliestChange и вычел его, поскольку он не представлял собой «изменение».

EDIT: Проблема, при которой одновременно регистрируются несколько стилей, что приводит к ложным изменениям.

    |Machine| |Style| | QTY|  |Time|   |Date|    etc...
         1       001    100   8:00AM   5/21/19
         1       001    100   9:00AM   5/21/19     
         1       004    100   10:00AM  5/21/19
         1       004    100   10:00AM  5/21/19
         1       004    100   10:00AM  5/21/19

В одном отделе время никогда не будет дублироваться. Однако в другом отделе (по какой-либо причине) может одновременно регистрироваться 3 броска. Это приведет к тому, что уравнение войдет в 10:00 утра как 3 смены. Это может быть системный сбой, почему нет уникальных временных меток на рулон, но, к сожалению, это так.

1 Ответ

2 голосов
/ 22 мая 2019

Один из способов сделать это:

Сначала я изменил ваши данные следующим образом:

enter image description here

  • Добавилзапись для Machine 1 в 11:00 AM, чтобы зафиксировать ситуацию, когда стиль возвращается к старому;
  • Добавлен столбец для Date-Time (просто Date + Time), чтобы упростить жизнь;
  • Таблица названа как «Данные»

Мера:

Style Change Count
=
SUMX (
    Data,
    VAR Current_DateTime = Data[Date-Time]
    VAR Current_Style = Data[Style]
    VAR Previous_DateTime =
        CALCULATE (
            MAX ( Data[Date-Time] ),
            FILTER ( ALLEXCEPT ( Data, Data[Machine] ), Data[Date-Time] < Current_DateTime )
        )
    VAR Previous_Style =
        CALCULATE (
            VALUES ( Data[Style] ),
            FILTER ( ALLEXCEPT ( Data, Data[Machine] ), Data[Date-Time] = Previous_DateTime )
        )
    RETURN
        IF ( Current_Style = Previous_Style || ISBLANK ( Previous_Style ), 0, 1 )
)

Результат:

enter image description here

Как это работает:

  • Нам нужно использовать SUMX, чтобы убедиться, что наши промежуточные итоги и итоги верны;
  • SUMX перебирает таблицу данных и для каждой записи вычисляет "Предыдущая дата-time ", который просто является максимальным значением даты / времени меньше текущего времени данных на машину (следовательно, ALLEXCEPT);
  • Затем мы можем вычислить предыдущий стиль, который представляет собой стиль, где date-time = предыдущая дата-время;
  • Наконец, мы сравниваем текущий стиль и предыдущий стиль.Если они не совпадают, мы добавляем 1;
  • Кроме того, я добавил тест для начального условия - первое вхождение машины, для которой предыдущий стиль еще не существует.Я не относился к таким записям как «смена стиля».Если вы хотите считать начальные записи как изменение стиля, удалите часть ISBLANK ().
...