Подсчет циклов в столбце в Power BI - PullRequest
0 голосов
/ 21 ноября 2019

В основном у меня есть данные, поступающие от датчика каждые несколько секунд. Я пытаюсь найти способ:

  1. Подсчитать количество циклов в данном периоде, например, час / день / неделя (3 цикла показаны на рисунке)
  2. Рассчитатьобщее время, которое датчик собирал в данный час / день / неделю.

Я работаю на рабочем столе PowerBI и не знаю, как это сделать в DAX или редакторе запросов. Есть идеи?

Пример данных: https://i.stack.imgur.com/03qP8.png

1 Ответ

0 голосов
/ 31 декабря 2019

Извините за столь поздний ответ. Не знаю, актуально ли это до сих пор или нет.

Вот пример, где индексация используется для присвоения увеличивающегося номера индекса каждому смежному блоку показаний датчика. Подсчет показаний можно получить, выполнив четкий подсчет этого индекса за те периоды, которые вы хотите описать.

Здесь я смоделировал несколько сотен тысяч показаний, снятых каждые 3 секунды с включенными датчиками в течение 5показания и «выкл.» для 5 показаний.

enter image description here

обратите внимание, что между гранулированными и агрегатными числами есть некоторое скольжение, это результат циклов, которыеохватывал перерывы в периодах.

Вот M-запрос, который я использовал для вашей справки. Надеюсь, это поможет.

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"
...