Power BI-在另一个记录的时间范围内查找记录

时间:2018-06-19 20:45:47

标签: powerbi powerquery

我有一个带有开始和结束日期时间的Jobs表,还有一个Events带有事件发生日期时间的表。

我试图发现为什么某些作业要比其他作业花费更长的时间,所以我想将页面过滤到特定作业,并查看哪些事件在开始时间之后和结束时间之前发生。我不确定如何建立这种关系...有什么建议吗?

我有一个日期和时间维度数据集(如果有的话)。

示例(来自与我的问题集不同的域):

工作数据集

Name             - Start              - End
Print Document 1 - 2018-06-19 1:20 PM - 2018-06-19 1:22 PM
Print Document 2 - 2018-06-19 2:20 PM - 2018-06-19 2:55 PM
Print Document 3 - 2018-06-19 3:20 PM - 2018-06-19 3:22 PM

事件数据集

ID - Name          - DateTime
1  - Printer Jam   - 2018-06-15 1:20 PM
2  - Doorbell Rang - 2018-06-19 2:23 PM
3  - Printer Jam   - 2018-06-19 2:35 PM
4  - Out of toner  - 2018-06-20 1:20 PM

我想将Print Document 2Event ID的{​​{1}}和2相关联,以便可以使用过滤器仅显示相关事件,或者可以创建一种统计每个作业的事件数的方法。

我无法将3添加到Job Name数据源,因为事件不一定在工作期间发生,也不一定是工作直接导致的。在我的原始域中,我需要查看系统中其他地方正在发生哪些其他不相关的活动,以确定工作为什么花了太长时间。

1 个答案:

答案 0 :(得分:3)

您可以将Events表中的内容合并到查询编辑器中的Jobs表中。


创建一个自定义列,该列将从Events表中的任何行中提取,其中DateTime字段位于StartEnd值之间。

= Table.AddColumn(#"[Previous Step Name Here]", "Custom",
      (J) => Table.SelectRows(Events, (E) => E[DateTime] >= J[Start] and E[DateTime] <= J[End]))

一旦创建了自定义列,请展开该列(该列每行包含一个表)以关联打印期间发生的所有事件。

结果应如下所示:

Merged tables


您可以通过将以下内容粘贴到高级编辑器中来复制它:

let
    JobsSource = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WCijKzCtRcMlPVjBU0lEyMjC00DUw0zW0VDC0MjJQCPDFEDQCCcbqIOs0QlVkhE2nkZWpKaZOY1RFxth0GsPsjAUA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Name = _t, Start = _t, End = _t]),
    Jobs = Table.TransformColumnTypes(JobsSource,{{"Name", type text}, {"Start", type datetime}, {"End", type datetime}}),
    EventsSource = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUQooyswrSS1S8ErMBfKMDAwtdA3MdA1NFQytjAwUAnyVYnWilYyAUi75+UVJqTk5CkGJeenISi0VjKyMjGFKjXGbCVZoClNoApTyLy1RyE9TKMnPSy1CUgm0GG57LAA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [ID = _t, Description = _t, DateTime = _t]),
    Events = Table.TransformColumnTypes(EventsSource,{{"ID", Int64.Type}, {"Description", type text}, {"DateTime", type datetime}}),
    #"Added Custom" = Table.AddColumn(Jobs, "Custom", (J) => Table.SelectRows(Events, (E) => E[DateTime] >= J[Start] and E[DateTime] <= J[End])),
    #"Expanded Custom" = Table.ExpandTableColumn(#"Added Custom", "Custom", {"ID", "Description", "DateTime"}, {"ID", "Description", "DateTime"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Expanded Custom",{{"ID", Int64.Type}, {"Description", type text}, {"DateTime", type datetime}})
in
    #"Changed Type"