如何在 DAX 中获取一段时间内(小时刻度)分组值的百分比?

How to get a percentage of grouped values over a period of time (at the hour scale) in DAX?

我有一个数据集,其中包含我的房间在 1 小时内的占用事件的持续时间(以分钟为单位):

 #   room  date                duration
---  ----  ------------------- --------
 0   A1    2022-01-01 08:00:00       30
 1   A1    2022-01-01 10:00:00        5
 2   A1    2022-01-01 16:00:00       30
 3   A1    2022-01-02 10:00:00       60
 4   A1    2022-01-02 16:00:00       60
...

我的日期栏链接到一个日期 table,其中我有:

 #   datetime             year month monthName day dayOfWeek dayName  hour
---  -------------------  ---- ----- --------- --- --------- -------- ----
...
 k   2022-01-01 08:00:00  2022     1   January   1         5 Saturday    8
k+1  2022-01-01 09:00:00  2022     1   January   1         5 Saturday    9
...
 n   2022-03-01 22:00:00  2022     3     March   1         1  Tuesday   22

我正在尝试通过度量检索以下百分比:duration/timeperiod。使用度量背后的想法是:

尝试

我的想法是创建第一个度量,return 当前 选择的第一个日期和最后一个日期之间的分钟数 。这是我想出的:

Diff minutes = DATEDIFF(
  FIRSTDATE( 'date'[date] ),
  LASTDATE( 'date'[date] ),
  MINUTE
)

当时的想法是创建第二个度量,将持续时间的总和除以 Diff minutes' 度量:

My rate = DIVIDE(
  SUM( 'table'[duration] ),
  [Diff minutes]
)

我目前面临一些问题:

  • 切片器设置为 (2022-01-02 --> 2022-01-03),如果我签入矩阵,我的日期时间介于 2022-01-02 0:00:00 和 2022-01-03 23:00:00 之间,但是我的测量 returns 1440 这是一天中的分钟数,但不是在我选择的时间段内
  • 不幸的是,百分比也是错误的。让我们以我在捕获中突出显示的示例为例。 10h 槽有 2 个值,5min 和 60min。但百分比显示为 4.51% 而不是 54.2%。它实际上是 65/1440 的结果,1440 是我整个时间段的总分钟数,而不是我的 10 小时时段。

例子

1- 假设我有一个 2 天的切片器 (2022-01-01 --> 2022-01-02),我的数据集是之前提供的数据集:

  • 我的总时长是 185 分钟 (30+5+30+60+60)
  • 我的时间段是 2 天 = 48 小时 = 2880 分钟
  • 显示的比例为:6.4% (185/2880)

2- 使用相同的切片器,具有小时和百分比的矩阵将给我:

hour rate
---- -----
   0  0.0%
   1  0.0%
...
   8 25.0% <--- 30 minutes on the 1st of January and 0 minutes on the 2nd
   9  0.0% <--- (5+0)/120
  10 54.2% <--- (5+60)/120
...
  16 75.0% <--- (30+60)/120

约束条件

我提供的例子只有1个房间。实际上,有 n 个房间,我希望我的衡量标准是 return 百分比作为我所有房间的平均值。

有可能吗?我选择了正确的方法吗?

您创建的 DateDiff 函数应该可以工作,我已经在一份报告中对其进行了测试,当我 select 一些日期时,它会给出第一个和最后一个 select 编辑日期之间的差异。

确保您的切片器正在与度量交互。

与此同时,我想我找到了一种更简单、更容易的方法。

首先,我在我的日期中添加了一个新列 table,这看起来可疑但实际上很有帮助:

minutes = 60

这让我摆脱了 DATEDIFF 功能。我的利率指标现在看起来像这样:

My rate = DIVIDE(
    SUM( table[duration] ),
    [Number of minutes],
    0
)

在这里,我使用 Number of minutes 度量,它只是 minutes 列中值的总和。为了在我选择多个房间时提供准确的结果,我将分钟数乘以房间数:

Number of minutes = COUNTROWS( rooms ) * SUM( 'date'[minutes] )

这现在与我的日期层次结构完美配合!