两次提取最频繁的值

时间:2019-04-01 19:17:00

标签: sql powerbi dax

我是Bi的新手,需要一些帮助来提取某个时间段内最频繁的值。下表是您可以看到下午1点到2点之间最频繁的值是E360,下午2点到3点之间最频繁的值是A178。请帮助我在Power BI中执行此操作。

item    Timestamp                
E360    03/11/2019 01:00:30              
E360    03/11/2019 01:07:02              
E360    03/11/2019 01:08:32              
E360    03/11/2019 01:11:02     
E360    03/11/2019 01:18:03     
E360    03/11/2019 01:20:53     
E360    03/11/2019 01:23:49              
E360    03/11/2019 01:26:31              
E360    03/11/2019 01:50:55              
E360    03/11/2019 01:54:08              
E360    03/11/2019 01:56:21              
E360    03/11/2019 02:04:08              
E360    03/11/2019 02:06:35              
E360    03/11/2019 02:09:13              
E360    03/11/2019 02:11:53              
E360    03/11/2019 02:14:27              
E360    03/11/2019 02:17:08              
A178    03/11/2019 02:19:49              
A178    03/11/2019 02:22:22              
A178    03/11/2019 02:33:49              
A178    03/11/2019 02:36:14              
A178    03/11/2019 02:49:35              
A178    03/11/2019 02:52:56              
A178    03/11/2019 02:55:16              
A178    03/11/2019 02:57:43              
A178    03/11/2019 03:00:31

上面显示的数据是原始数据,我在Power BI中创建了另一个表。我正在尝试在该小时内添加具有最可能值的列。请帮助我做到这一点。

Timestamp StartTime     Timestamp End Time        Most probable Value
03/11/2019 01:00:00     03/11/2019 02:00:00       E360
03/11/2019 02:00:00     03/11/2019 03:00:00       A178

我想添加一个每小时可能值最高的列

2 个答案:

答案 0 :(得分:1)

在Power BI中,您可以执行以下操作:

要么创建具有日期-小时分辨率的日历,然后在数据表中创建一个“日期-小时”计算列。或创建分辨率为1秒的日历(如果您的数据表包含很多天,则不建议这样做)

Calendar = 
SELECTCOLUMNS(
    CROSSJOIN(
        CALENDAR(DATE(2019;3;1); DATE(2019;3;31));
        GENERATESERIES(
            0;
            TIME(23;0;0);
            TIME(1;0;0)
        )
    );
    "dateTime";  [Date]& " " &[Value]  
)

“数据”表中的计算列:

DateHour = 
DATE(
    YEAR(Data[dateTime]); 
    MONTH(Data[dateTime]); 
    DAY(Data[dateTime])
    )& " " & 
    TIME(HOUR(Data[dateTime]); 0; 0)    

在日历和新的日期-小时列之间创建一个关系。

enter image description here

然后添加以下措施:

MostProbableValue = 
MINX (
    TOPN (
        1;
        ADDCOLUMNS (
            VALUES ( Data[item] );
            "Frequency"; CALCULATE ( COUNT ( Data[item] ) )
        );
        [Frequency];
        0
    );
    Data[item]
)

在“数据”表中添加第二个计算列:

Timestamp_EndTime = [DateHour]+Time(0; 59; 59)

然后,您可以通过拖动[DateHour],[Timestamp_EndTime]和MPV度量来创建可视表。将[DateHour]列重命名为Timestamp_Start],您将得到一个如下所示的表:

enter image description here

N.B:当您在表中写入数据时,将不清楚在哪个bin中带有准确时间戳为02:00:00的值(如果不是两次)。因此,上限为+ 59分钟59秒。如果仍然希望它看起来像您编写的表,则将计算的[Timestamp_EndTime]列改为+ TIME(1; 0; 0)。

此外,如果您知道数据表中每个时间戳只有一个单一值,那么您实际上不需要日历。

答案 1 :(得分:0)

__m128     _mm_permute_ps(__m128  a, int imm8);
__m256d _mm256_permute_pd(__m256d a, int imm8);

这将给您每个的计数。并以正确的顺序。现在,从该集合中排第一,您可以选择基于数据库引擎的各种技术。在SQL中排名第一。在oracle rownum <2中,依此类推,例如oracle将是

select item, count(*) cnt
from table
where <date time filter>
group by item
order by 2 desc