Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powerbi 数据转换工具推荐_Powerbi_Dax_Azure Data Factory - Fatal编程技术网

Powerbi 数据转换工具推荐

Powerbi 数据转换工具推荐,powerbi,dax,azure-data-factory,Powerbi,Dax,Azure Data Factory,我在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

我在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点之间出现故障,然后在晚上11点到午夜之后再次出现故障

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

我可以在Power BI中轻松做到这一点,还是应该使用其他工具,如Azure Data Factory?

将以下计算列添加到表中:

报告日期=表1[时间].[日期]

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
    )
输出:


有关PBIX文件的工作示例,请参见!非常感谢much@Olly我正在尝试根据您的答案创建计算列“PreviousTime”。当我把“CurrentTime”和“CurrentCode”放在比较的右边时,它就工作了。然而,当我把Table1[time]和Table1[code]放在右边时,它就不起作用了。它会产生所有空白值。你能解释一下这种行为吗?背景。当我们计算变量时,我们有行级别的上下文<代码>计算强制进行上下文转换(这是我们想要的,因为我们想要查看表中的所有行),因此行级上下文不再存在。我们可以使用前面的
(Table1[time])
来代替变量,但是只对变量进行一次评估会带来(微小的)性能提升。@Olly感谢您的解释。我现在明白了。
Faulty % Day = 
    IF ( 
        HASONEVALUE ( Table1[Report Date] ),
        DIVIDE ( 
            [Faulty Hours],
            DISTINCTCOUNT ( Table1[code] ),
            BLANK()
        ),
        BLANK()
    )