Sql server 矩阵表-日期列、位置行和日期所在位置的计数天数

Sql server 矩阵表-日期列、位置行和日期所在位置的计数天数,sql-server,powerbi,dax,date-range,Sql Server,Powerbi,Dax,Date Range,我希望在Power BI报告中创建一系列矩阵表 我们掌握的数据是: EventID|VehicleID|LocationID|StartDate|EndDate 1 |1 |GBR |2010-1-1 |2010-1-5 2 |9 |RUS |2010-1-3 |2010-1-7 3 |6 |GBR |2010-1-3 |2010-1-5 4 |1 |USA

我希望在Power BI报告中创建一系列矩阵表

我们掌握的数据是:

EventID|VehicleID|LocationID|StartDate|EndDate
1      |1        |GBR       |2010-1-1 |2010-1-5
2      |9        |RUS       |2010-1-3 |2010-1-7
3      |6        |GBR       |2010-1-3 |2010-1-5
4      |1        |USA       |2010-1-5 |2010-1-7
输出

    LocationID 2010-1-1|2010-1-2|2010-1-3|2010-1-4|2010-1-5|2010-1-6
GBR               1    |   1    |     2  |     2  |   0    |    0
USA               0    |   0    |     0  |     0  |   1    |    1
RUS               0    |   0    |     1  |     1  |   1    |    1
每辆车在一个时间段内只有一个事件,每辆车没有时间重叠。我们试图获得每个日期每个地点的车辆数量计数,例如,如果地点ID在1月1日有4辆车辆,我们在4矩阵单元格中显示4辆


我已经在我们的SQL Server中创建了一个日期表(我们使用的是直接查询),但我真的很难计算每天每个位置的车辆数量。我假设我必须以某种方式将每个事件的日期范围转换为事件的日期列表,并且每个事件的项目计数为1天。然后,我只需要创建一个矩阵,其中的列是Date from Date table和locationID from event table,但我不知道如何获得locationID的计数。有什么想法吗

我根据
开始日期和
结束日期创建了一个带有DAX的新表:

Date = CALENDAR(MIN(Event[StartDate]), MAX(Event[EndDate]))

通过将日期与
StartDate
EndDate
进行比较,建立
Count
度量,并计算行数:

Count = 
COUNTROWS(
    FILTER(
        Event,
        Event[StartDate] <= MAX('Date'[Date]) &&
        Event[EndDate] > MIN('Date'[Date])
    )
) + 0
计数=
计数行(
滤器(
事件
事件[StartDate]分钟('Date'[Date])
)
) + 0
结果:


我可以通过在SQL Server中创建一个视图来实现这一点,该视图在日期范围内每天将事件拆分为多行,然后将其导入PowerBI。但是,我们试图避免在SQLServer中创建视图(因为我们要管理数百个视图)。我更喜欢纯PowerBI解决方案,这样我也能理解怎么做。你能提供一个最小的样本数据集和预期结果吗?@FoxanNg对此表示抱歉-添加了样本数据我认为我无法使用DirectQuery创建表到SQL Server?另外,如果我使用SQL Server日期表和你的度量,我似乎得到了错误的数字。我似乎需要使用Count=SUMX(过滤器(Event,Event[StartDate]MIN('Date'[Date]),(DATEDIFF(Event[StartDate],Event[EndDate],DAY)+1))+0否则,我认为我只得到该类型事件的计数,而不是周期中的总天数。@如果已有日期表,则无需创建日期表。这只是为了演示。