#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)