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