【问题标题】:Count cycles in column in Power BI在 Power BI 中的列中计算周期数
【发布时间】:2019-11-21 04:19:11
【问题描述】:

基本上,我每隔几秒就会从传感器传来数据。我正在尝试找到一种方法:

  1. 计算给定时间段内的周期数,例如小时/天/周(图中显示 3 个周期)
  2. 计算传感器在给定小时/天/周内收集的总时间。

我正在使用 PowerBI 桌面,但不确定如何在 DAX 或查询编辑器中执行此操作。有什么想法吗?

数据示例: https://i.stack.imgur.com/03qP8.png

【问题讨论】:

  • 如果一组传感器读数从 11:56:00 开始并持续到第二天的 00:00:05,这是否算作两天中每一天的一个周期(以及两天中的每一天)小时)还是仅根据开始时间或结束时间计算一个周期?
  • 传感器收集的总时间是多少?周期持续时间的总和?指定时间段内第一个循环的第一次读数和最后一个循环的最后一次读数的差值?如果一个周期跨过上述评论(11:56:00 到 00:00:05)的周期怎么办,我们是否仅计算每个周期的活动时间(第 1 天时间为第 2 天,第 2 天时间为第 2 天)还是两天的总时间(第 1 天和第 2 天的时间都相同)

标签: excel dax powerquery powerbi-desktop


【解决方案1】:

抱歉这么晚才回复。不知道这是否仍然相关。

这是一个示例,其中索引用于为传感器读数的每个连续块分配递增的索引号。可以通过在您希望描述的任何时期对该指数进行不同的计数来获得读数计数。

在这里,我模拟了每 3 秒读取数十万个读数,传感器“开启”5 个读数,“关闭”5 个读数。

请注意,细化数字和汇总数字之间存在一些滑动,这是跨越多个周期中断的周期的结果。

这是我供您参考的 M Query。希望对你有帮助。

let
    Source = Excel.Workbook(File.Contents("C:\Users\*****\Desktop\Book2.xlsx"), null, true),
    Table1_Table = Source{[Item="Table1",Kind="Table"]}[Data],
    #"Changed Type" = Table.TransformColumnTypes(Table1_Table,{{"Date", type date}, {"Time", type time}}),
    #"Sorted Rows" = Table.Sort(#"Changed Type",{{"Date", Order.Ascending},{"Time", Order.Ascending}}),
    #"ShiftList" = {""} & List.RemoveLastN(Table.Column(#"Sorted Rows","Sensor Reading"),1),
    #"ColumnsAndShift" = Table.ToColumns(#"Sorted Rows") & {ShiftList},
    #"ResultSet" = Table.FromColumns(#"ColumnsAndShift", Table.ColumnNames(#"Sorted Rows") & {"Previous Reading"}),
    #"Filtered Rows" = Table.SelectRows(ResultSet, each ([Previous Reading] = "")),
    #"Filtered Rows1" = Table.SelectRows(#"Filtered Rows", each [Sensor Reading] <> ""),
    #"Added Index" = Table.AddIndexColumn(#"Filtered Rows1", "Index", 1, 1),
    #"Merged Queries" = Table.NestedJoin(#"ResultSet",{"Date", "Time"},#"Added Index",{"Date", "Time"},"Added Index",JoinKind.LeftOuter),
    #"Expanded Added Index" = Table.ExpandTableColumn(#"Merged Queries", "Added Index", {"Index"}, {"Added Index.Index"}),
    #"Sorted Rows1" = Table.Sort(#"Expanded Added Index",{{"Date", Order.Ascending}, {"Time", Order.Ascending}}),
    #"Filled Down" = Table.FillDown(#"Sorted Rows1",{"Added Index.Index"}),
    #"Added Conditional Column" = Table.AddColumn(#"Filled Down", "Cycle Index", each if [Sensor Reading] <> "" then [Added Index.Index] else ""),
    #"Removed Columns" = Table.RemoveColumns(#"Added Conditional Column",{"Previous Reading", "Added Index.Index"})
in
    #"Removed Columns"

【讨论】:

    猜你喜欢
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多