Рекомендации по инструменту для преобразования данных - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть большие объемы необработанных данных о сбоях в Power BI.

code    time                    status  
x123    2019-04-22T23:57:00     ok  
x123    2019-04-23T01:00:00     faulty  
x123    2019-04-23T02:00:00     ok  
x123    2019-04-23T23:00:00     faulty  
x123    2019-04-24T01:00:00     ok  

Мне нужно преобразовать это, чтобы показать, как долго предмет находился в неисправном состоянии в данный день.Итак, 23-го числа элемент находился в неисправном состоянии между 1 и 2 часами утра, а затем снова между 23 часами до полуночи.

code    day         % of day faulty  
x123    23/04/2019  8.30%           (2 hours)  

Можно ли это легко сделать в Power BI или использовать другой инструмент?такие как фабрика данных Azure?

1 Ответ

1 голос
/ 24 апреля 2019

Добавьте следующие вычисляемые столбцы в таблицу:

Report Date = Table1[time].[Date]

Fault Duration = 
VAR CurrentTime = Table1[time]
VAR CurrentCode = Table1[code]
VAR PreviousTime = 
    CALCULATE ( 
        MAX ( Table1[time] ),
        FILTER ( 
            Table1,
            Table1[time] < CurrentTime && 
            Table1[code] = CurrentCode
        )
    )
VAR NextTime = 
    CALCULATE ( 
        MIN ( Table1[time] ),
        FILTER ( 
            Table1,
            Table1[time] > CurrentTime && 
            Table1[code] = CurrentCode
        )
    )
VAR FaultyFrom = 
    IF(
        Table1[status] = "faulty",
        Table1[time],
        IF (
            DAY(PreviousTime) = DAY(Table1[time]),
            BLANK(),
            Table1[time].[Date]
        )
    )
VAR FaultyTo = 
    IF ( 
        Table1[status] = "ok",
        Table1[time],
        IF (
            DAY(NextTime) = DAY(Table1[time]),
            NextTime,
            Table1[time].[Date] + 1
        )
    )
RETURN
    IF(
        ISBLANK ( PreviousTime ) || ISBLANK ( NextTime ) || ISBLANK ( FaultyFrom ),
        BLANK(),
        FaultyTo - FaultyFrom
    )

Теперь создайте меры:

Faulty Hours = SUM ( Table1[Fault Duration] )

Faulty % Day = 
    IF ( 
        HASONEVALUE ( Table1[Report Date] ),
        DIVIDE ( 
            [Faulty Hours],
            DISTINCTCOUNT ( Table1[code] ),
            BLANK()
        ),
        BLANK()
    )

Вывод:

enter image description here

См. https://pwrbi.com/so_55825688/ для рабочего примера файла PBIX

...