如何在 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
。使用度量背后的想法是:
- 能够使用时间切片器并查看我正在更新的百分比
- 例如,使用带有我的日期层次结构的条形图,并能够在我的不同层次结构中看到百分比(日期时间 -> 年 -> 月 -> dayOfWeek -> 小时)
尝试
我的想法是创建第一个度量,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] )
这现在与我的日期层次结构完美配合!
我有一个数据集,其中包含我的房间在 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
。使用度量背后的想法是:
- 能够使用时间切片器并查看我正在更新的百分比
- 例如,使用带有我的日期层次结构的条形图,并能够在我的不同层次结构中看到百分比(日期时间 -> 年 -> 月 -> dayOfWeek -> 小时)
尝试
我的想法是创建第一个度量,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] )
这现在与我的日期层次结构完美配合!