Запрос Azure Application Insights — как рассчитать процент от общего

#azure #azure-application-insights #ms-app-analytics

#azure #azure-application-insights #ms-app-analytics

Вопрос:

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

 Something like this:
ITEM   |   COUNT   |   PERCENTAGE
item 1 |     4     |   80
item 2 |     1     |   20 
  

Я могу легко получить таблицу со строками ITEM и COUNT, но я не могу понять, как получить общее количество (в данном случае 5) в виде числа, чтобы я мог рассчитать процент в столбце%.

 someTable
| where name == "Some Name"
| summarize COUNT = count() by ITEM = tostring( customDimensions.["SomePar"])
| project ITEM, COUNT, PERCENTAGE = (C/?)*100 
  

Есть идеи? Спасибо.

Ответ №1:

Создание такого запроса немного запутанно.

Я сделал это на основе таблицы customEvents в AI. Итак, взгляните и посмотрите, можете ли вы адаптировать его к вашей конкретной ситуации.

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

Таким образом, весь запрос выглядит следующим образом:

 let totalEvents = customEvents
//  | where name contains "Opened form"
    | summarize count() by appName
    | project appName, count_ ;
customEvents
//  | where name contains "Opened form"
    | join kind=leftouter totalEvents  on appName
    | summarize count() by name, count_
    | project name, totalCount = count_ , itemCount = count_1,  percentage = (todouble(count_1) * 100 / todouble(count_))     
  

Если вам нужен фильтр, вы должны применить его к обеим таблицам.

Это выводит:

введите описание изображения здесь

Комментарии:

1. Потрясающе. Заставил его работать именно так, как я хотел. Моя игра «присоединиться» слаба, поэтому любые попытки, которые я предпринимал в этом направлении, не увенчались успехом. Спасибо.

Ответ №2:

Даже не нужно выполнять объединение или создавать таблицу, содержащую ваши итоги, просто рассчитайте свой итог и сохраните его в let вот так.

 let totalEvents = toscalar(customEvents
| where timestamp > "someDate"
    and name == "someEvent"
| summarize count());
  

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

 | extend total = totalEvents
  

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

 | extend percentages = todouble(count_)*100/todouble(total)
  

где count_ — это столбец, созданный с помощью функции summary count(), которую вы предположительно выполняете перед добавлением процентов.

Надеюсь, это также кому-то поможет.

Ответ №3:

Я думаю, что следующее более интуитивно понятно. Просто расширьте набор с помощью фиктивного свойства и выполните для него объединение…

 requests
| summarize count()
| extend a="b" 
| join (
    requests
    | summarize count() by name
    | extend a="b"    
) on a 
| project name, percentage = (todouble(count_1) * 100 / todouble(count_)) 
  

Ответ №4:

Это тоже может сработать:

 someTable
| summarize count() by item
| as T 
| extend percent = 100.0*count_/toscalar(T | summarize sum(count_)) 
| sort by percent desc 
| extend row_cumsum(percent)