Как создать столбец подсчета по срокам в Kibana datatable

Я пытаюсь настроить таблицу данных из данных в Elasticsearch.

Предположим, у меня есть поле «Департамент», которое может быть «Департамент A», «Департамент B» или «Департамент C» и т. Д. Но я могу показать только общее количество всех записей вместо получение промежуточного итога с использованием поля отдела.

См. Следующую таблицу:  введите описание изображения здесь

Только колонка «Итого» верна. Моя задача - добиться показателей в разделах «Департамент А» и «Другой департамент».

Есть ли какой-либо фильтр, который можно применить к метрике? Или какими-либо другими способами это сделать?

Сообщите, если вам нужна дополнительная информация.

Обновление ---------------------------------------------- -

После поиска я нахожу обходной путь:

Сначала создайте два скриптовых поля в Kibana, как показано ниже:

Имя поля в скрипте: sf_dept_A

Язык: безболезненный

Сценарий:

if (doc["department"].value.equals("Dept A"))
    return 1;
else
    return 0;

Имя поля в скрипте: sf_other_dept

Язык: безболезненный

Сценарий:

if (doc["department"].value.equals("Dept A") == false)
    return 1;
else
    return 0;

После создания двух указанных выше полей со сценарием перейдите к созданию таблицы данных, просто добавьте оценку суммы полей со сценарием,

Добавить показатели

  • Агрегация: Сумма

  • Поле: sf_dept_A

  • Особый ярлык: Dept A

Добавить показатели

  • Агрегация: Сумма
  • Поле: sf_dept_A
  • Особый ярлык: Dept A

Добавить показатели

  • Агрегация: подсчет
  • Особый ярлык: Всего

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


person bill    schedule 07.02.2017    source источник
comment
Спасибо, что поделились своим подходом, у меня это сработало.   -  person userab    schedule 26.08.2018


Ответы (2)


В последних версиях Kibana вы можете использовать «Ввод JSON», чтобы делать это «на лету», в данной визуализации, без необходимости в полях сценария:

  • В своей визуализации создайте метрику «Сумма» (я думаю, в любом поле - поле фактически игнорируется в конце ...?)
  • Под этой суммой метрикой нажмите ссылку «Дополнительно», чтобы открыть текстовое поле «Ввод JSON».
  • В этом текстовом поле введите что-нибудь вроде: { "script": { "inline": "doc['SomeField'].value == 'SomeValue' ? 1 : 0", "lang": "painless" } }

Вот и все! Теперь у вас есть условная метрика подсчета. Меткой по умолчанию будет «Сумма (какое бы поле вы ни выбрали)», поэтому вам нужно установить более точную настраиваемую метку для метрики, например «Count (SomeValue)».

Это по-прежнему будет медленным / дорогостоящим, но, насколько я понимаю, есть несколько преимуществ по сравнению с решением, которое вы добавили в свой вопрос:

  1. Вам не нужно заранее создавать все эти скриптовые поля, вы можете определить скрипты для той цели, которая вам нужна, когда вам нужно.
  2. Создание полей со сценарием сопряжено с накладными расходами во время выполнения запроса для многих (всех?) Запросов, тогда как этот подход имеет накладные расходы только тогда, когда вы запускаете эту конкретную визуализацию.
person Tao    schedule 10.01.2019

В разделе Разделенные строки вы можете просто применить фильтры.

Скажем, если у вас есть поле с именем Department в каждой отдельной записи, вы можете использовать два фильтра:

Department:"Dept A"

Department:"Dept B"

Это может выглядеть примерно так в Kibana.

ИЛИ

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

В то время как вы можете увидеть count для каждого отдела вместе с выбранной вами меткой времени, которая должна выглядеть примерно так:

Timestamp     Departments         Count
01/01/17        Depa A              1
01/01/17        Depa B              2 
02/01/17        Depa C              1
02/01/17        Depa B              6 

Надеюсь это поможет!

person Kulasangar    schedule 08.02.2017
comment
Понятно. Но я действительно хочу, чтобы количество отделов было разделено по столбцам, а не по строкам. Я заметил, что есть поле ввода JSON для метрики. Могу я поставить туда правила фильтрации, чтобы получить результат? - person bill; 08.02.2017
comment
@bill Но, насколько мне известно, в это еще не добавлено усовершенствование. Я не пробовал использовать ввод JSON, возможно, вы могли бы попробовать. К вашему сведению, вы можете сделать aggregations, используя ввод JSON. Что-то вроде {'script':'(_value)/100'}! Может быть полезным Дайте мне знать, если это поможет? - person Kulasangar; 08.02.2017
comment
@bill удачи в этом? - person Kulasangar; 09.02.2017
comment
Привет, я нашел другой способ по вашей ссылке, предоставленной github.com/elastic/kibana/issues/ 3620. Если предполагаемая метрика - Count, вы можете сделать это с помощью полей сценария: для каждого столбца с данными, который вы хотите, определите поле сценария, выражение которого: ‹выражение фильтра›? 1: 0, затем в редакторе визуализации данных для каждого нужного столбца добавьте суммарную метрику, ссылающуюся на поле сценария. - person bill; 10.02.2017