获取活动会话总数,开始和结束时间

时间:2019-02-28 06:50:04

标签: powerbi dax

我试图在Power BI上显示一个图表,以按时间段显示活动会话的数量。

我有一组停车场数据,需要显示一天中不同时间在停车场的汽车数量。

数据集示例:

+----+------------+----------+
| ID | Start Time | End Time |
+====+============+==========+
|  1 | 1pm        | 2pm      |
|  2 | 1pm        | 3pm      |
|  3 | 2pm        | 3pm      |
|  4 | 3pm        | 4pm      |
|  5 | 3pm        | 5pm      |
|  6 | 3pm        | 6pm      |
|  7 | 5pm        | 7pm      |
|  8 | 5pm        | 7pm      |
|  9 | 6pm        | 7pm      |
| 10 | 6pm        | 8pm      |
+----+------------+----------+

我根据示例数据集Picture

绘制了一个我想在Power Point中创建的图表的示例。

注意:我之前曾问过这个问题,但没有得到答复,然后我尝试再次询问,但在我需要的内容上(现在)更加详细

注2:我看到了类似的问题,但是DAX语句具有我没有的列名(并且给出的大多数示例都在处理日期,我仅使用时间):

( 'Calendar'[Date] )

Measure =
VAR d =
    SELECTEDVALUE ( 'Calendar'[Date] )
RETURN
    COUNTROWS (
        FILTER (
            Table1,
            Table1[Start Date] <= d
                && (
                    ISBLANK ( Table1[End Date] )
                        || Table1[End Date] > d
                )
        )
    )

2 个答案:

答案 0 :(得分:1)

您将需要一些DAX和几个额外的表。 表格:

  • 停车场数据:需要具有VehicleID,输入日期/时间,离开日期/时间
  • 日期表:您可以使用这些intstructions在Power Query中快速创建一个。您可能只制作了一个简单的项目,其中包括Date,MonthNbr,MonthName,Year。
  • 时间表:此表每分钟有一行。我用the DAX script in this blog post作了一个快速时间表。 (在M中执行可能会更高效,但我没有一个方便的脚本,而且它是一个小表。)

不要在表之间建立任何关系。

添加以下措施:

Vehicles By Date And Time = 
VAR MinTime = Min('Time'[Time])
VAR MaxTime = Max('Time'[Time])
VAR MinDate = Min('Date'[Date])
Var MaxDate = Max('Date'[Date])

RETURN 
CALCULATE(DISTINCTCOUNT('Car Park'[Vehicle_No ]),
Filter('Car Park', TimeVALUE('Car Park'[Enter_Time]) <= MaxTime 
   && TIMEVALUE('Car Park'[Leave_Time]) >= MinTime
   && TRUNC('Car Park'[Enter_Time]) <= MaxDate 
   && TRUNC('Car Park'[Leave_Time]) >= MinDate))

注意:您必须检查此性能。对于较小的数据集,它对我来说效果很好。

此度量使您可以从日期表中选择日期范围,并从时间表中选择时间范围,然后将其用作参数来计算该时间段内存在的汽车数量。我看到了您关于仅使用时间和忽略日期的评论,但在此处添加了日期,以提供更好的解决方案。请注意,日期和时间是独立的,因此您可以说“给我所有在1月1日至4月16日期间停泊的汽车,仅在凌晨2点至上午11点之间的时间。”

相反,如果您想一起而不是分开使用日期和时间,则度量值应如下所示:

Vehicles By DateTime = 
VAR MinTime = Min('Time'[Time])
VAR MaxTime = Max('Time'[Time])
VAR MinDate = Min('Date'[Date])
Var MaxDate = Max('Date'[Date])
Var MinDateTime = MinDate + MinTime
Var MaxDateTime = MaxDate + MaxTime

RETURN 
CALCULATE(DISTINCTCOUNT('Car Park'[Vehicle_No ]),
Filter('Car Park', 'Car Park'[Enter_Time] <= MaxDateTime && 'Car Park'[Leave_Time] >= MinDateTime)
)

以下是说明差异的示例: enter image description here

根据我的数据,我有6辆车。其中5个停在了4/4/2018,一个停在了4/10/2018。如果我选择的日期范围是1/10/2018-4/6/2018,并且小时范围是2am-11 am,那么我可以看到我的“按日期和时间划分的车辆”中有2辆汽车。这两辆车在选定日期范围内的某个日期的凌晨2点至11点之间停放。而如果我使用其他公式,我将计算5辆车,因为它正在寻找在1/10/2018 2:00:00 am和4/6/2018 11:59:00 am之间停放的汽车。

然后,您可以在Power BI中添加一个柱形图,其轴上的下限为60分钟,值中的Vehicles按日期和时间。 enter image description here

答案 1 :(得分:0)

您可以轻松地自己创建时间维度。由于只需要“整个”小时(而不是分钟),因此可以通过在主页选项卡上选择“输入数据”来进行此操作,然后可以手动创建小时数为0到23的表。 如果您需要包含分钟的“时间”维度,则可以使用DAX来实现,可以找到以下示例之一:here

之后,您只需要调整DAX并使用“时间”维度中的列即可。 希望这会有所帮助。