使用PowerBI确定机器的样式转换

时间:2019-05-22 17:02:16

标签: powerbi dax

因此,我有一个表,其中包含具有样式的部门中所有机器的输出。例如:

|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 ) 

我试图将其限制在一天之内,以便评估结果,以便删除该部分。我尝试了两个不同的索引,一个是计算机号,另一个是从今天到表上最小日期的时间差。在视觉上,我一直在对EarearestChange Over Index进行不同的计数,并减去了一个,因为它不构成“转换”。

1 个答案:

答案 0 :(得分:2)

一种实现方式:

首先,我对您的数据进行了如下修改:

enter image description here

  • 在上午11:00为Machine 1添加了一条记录,以捕获一种样式恢复为旧样式的情况;
  • 为“日期时间”(简称“日期+时间”)添加了一列,以简化生活;
  • 将该表命名为“数据”

测量:

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遍历数据表,并为每条记录计算“上一日期时间”,即每台机器的最大日期时间小于当前数据时间(因此称为ALLEXCEPT);
  • 然后,我们可以计算Previous Style,这是date-time = Previous date-time;
  • 最后,我们比较当前样式和以前的样式。如果它们不相同,我们加1;
  • 此外,我还对启动条件进行了测试-首次出现机器,但以前的样式尚不存在。我没有将此类记录视为“样式更改”。如果要将初始记录计为样式更改,请删除ISBLANK()部分。