Powerbi 使用DAX计算包含时间戳的日期时间间隔

Powerbi 使用DAX计算包含时间戳的日期时间间隔,powerbi,dax,powerbi-desktop,Powerbi,Dax,Powerbi Desktop,我有两张桌子: 包含日期和时间的日历表 以及一个包含事件的表,除了一组属性外,还包含开始时间和结束时间(示例表中只有一个,事件代码) 对于特定的日期范围,我想显示每小时发生的事件数 下面的度量是有效的,但是当事件表变大并且存在多个切片器时,它会遇到困难 incidentCnt = CALCULATE( COUNTROWS(incidents); FILTER( incidents; incidents[start_datetime] <

我有两张桌子:

包含日期和时间的日历表

以及一个包含事件的表,除了一组属性外,还包含开始时间和结束时间(示例表中只有一个,事件代码)

对于特定的日期范围,我想显示每小时发生的事件数

下面的度量是有效的,但是当事件表变大并且存在多个切片器时,它会遇到困难

incidentCnt = 
CALCULATE(
    COUNTROWS(incidents);
    FILTER(
        incidents;
        incidents[start_datetime] < MAX(date_hour[datetime]) &&
            incidents[end_datetime] > MAX(date_hour[datetime])
    )
)

一种更有效的方法是展开事件表,以便在开始日期时间和结束日期时间之间的每一次发生每个事件。您可以使用这样的计算表执行此操作:

Expanded_Incidents = 
GENERATE(
    incidents;
    SELECTCOLUMNS(
        GENERATESERIES(
            incidents[start_date];
            incidents[end_date];
            TIME(h;m;s)
        );
        "Expanded_incident_time"; [Value]
    )
)
时间(h;m;s)
更改为您选择的时间分辨率


然后在dateTime dim表和
[Expanded\u incident\u time]
列之间建立关系(这应该是1:*)。然后,只需对新表中的行数进行计数。这将为您提供特定时间内活动事件的数量,我相信这将比每次在表上重复要快

这提供了巨大的速度,甚至适用于大型数据集。我尝试在事件表中使用10000行,甚至添加了另外两个属性,分别使用10000和380000个不同的值。结果扩展的_事件表有69762000行。加载需要一些时间,但报告的响应速度非常快。我还尝试用powerquery扩展事件表,效果很好,但生成了更大的*.pbi文件(430MB对200MB)。不知道为什么。
Expanded_Incidents = 
GENERATE(
    incidents;
    SELECTCOLUMNS(
        GENERATESERIES(
            incidents[start_date];
            incidents[end_date];
            TIME(h;m;s)
        );
        "Expanded_incident_time"; [Value]
    )
)