# Некорректное отображение данных в kibana

**URL:** <https://discuss.elastic.co/t/kibana/204609>\
**Category:** Вопросы на русском языке\
**Created:** [October 22, 2019, 8:58am UTC](https://discuss.elastic.co/t/kibana/204609 "2019-10-22T08:58:52Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Anne\_Kim](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/anne_kim/32/47196_2.png) [@Anne\_Kim](https://discuss.elastic.co/u/Anne_Kim)\
**Post date:** [October 22, 2019, 8:58am UTC](https://discuss.elastic.co/t/kibana/204609/1 "2019-10-22T08:58:52Z")

</div>

Есть массив, каждый элемент которого выглядит следующим образом:

- 

```
 t _id htqe7m0BSOdvtuXlL_IK

```

- 

```
  t _index currency_data

```

- 

```
  # _score - 

```

- 

```
  t _type data

```

- 

```
  # player_id 457

```

- 

```
  # soft_currency_amount 95,792

```

- 

```
  soft_currency_last_update Oct 21, 2019 @ 16:57:01.000

```

Это информация об игроке, его балансе и дате последнего обновления баланса. Для отдельно взятого игрока может быть несколько таких накопившихся записей.  
Задача - визуализировать данные, для начала в виде таблицы, отобразив баланс игрока на момент самого последнего обновления.

```
{
  "aggs": {
    "4": {
      "terms": {
        "field": "player_id",
        "order": {
          "_key": "asc"
        },
        "size": 400
      },
      "aggs": {
        "2": {
          "terms": {
            "field": "soft_currency_amount",
            "order": {
              "2-orderAgg": "desc"
            },
            "size": 1
          },
          "aggs": {
            "3": {
              "terms": {
                "field": "soft_currency_last_update",
                "order": {
                  "1": "desc"
                },
                "size": 1
              },
              "aggs": {
                "1": {
                  "cardinality": {
                    "field": "player_id"
                  }
                }
              }
            },
            "2-orderAgg": {
              "max": {
                "field": "soft_currency_last_update"
              }
            }
          }
        }
      }
    }
  },
  "size": 0,
  "_source": {
    "excludes": []
  },
  "stored_fields": [
    "*"
  ],
  "script_fields": {},
  "docvalue_fields": [
    {
      "field": "soft_currency_last_update",
      "format": "date_time"
    }
  ],
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "soft_currency_last_update": {
              "format": "strict_date_optional_time",
              "gte": "2019-10-11T21:00:00.000Z",
              "lte": "2019-10-12T20:30:00.000Z"
            }
          }
        }
      ],
      "filter": [
        {
          "match_all": {}
        }
      ],
      "should": [],
      "must_not": []
    }
  }

```

В результате получается таблица со следующими колонками: _player\_id_, _soft\_currency\_amount_, _soft\_currency\_last\_update_ и _Unique count of player\_id_. Последняя метрика по сути бесполезна, используется для того, чтобы посчитать "хоть что-нибудь" для отображения остальных данных.  
Информация в итоговой таблице получается верной за одним исключением: колонка "_soft\_currency\_last\_update_" показывает не фактическую дату последнего обновления, а дату, когда появился соответствующий баланс.  
Например, у игрока было 1200 монет на момент времени 21 октября в 13:00. Затем, в 17:00 баланс изменился, насчитывая 1300 монет. Следующее (и последнее) обновление баланса произошло на другой день, 22 октября в 8:00. На этот момент баланс остался неизменным, 1300 монет.  
В данной ситуации строка таблицы будет содержать корректный id игрока, последнее значение его баланса (1300 монет), **но** графа даты будет указывать на _21 октября 17:00_, а не на _22 октября 8:00_.

Что не так?

И можно ли это всё визуализировать не в виде таблицы, а с виде столбчатой диаграммы (по y - баланс игрока, по x - id игрока)

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [October 22, 2019, 3:48pm UTC](https://discuss.elastic.co/t/kibana/204609/2 "2019-10-22T15:48:46Z")

</div>

> [@Anne\_Kim](#):
>
> Есть массив, каждый элемент которого выглядит следующим образом:

То есть каждый элемент массива - это запись? Если да - то вам под агрегаций по игрокам, надо выбрать поля из последней записи. Это делается с помощью агрегации top\_hits отсортированной по @timestamp с размером в 1. То есть дата последнего обновления будет выглядеть как-то так:

 ![Screenshot%20from%202019-10-22%2011-45-04](https://us1.discourse-cdn.com/elastic/original/3X/c/7/c7ba3de483f129bb71bd3da801260f8cd0121b7c.png)

В кибане можно добавить несколько таких агрегаций по всем интересующим вас полям. Если вы работаете на прямую с elasticsearch, то все top\_hits агрегации можно объединить в одну.

---

<div class="post-metadata">

**Author:** ![Anne\_Kim](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/anne_kim/32/47196_2.png) [@Anne\_Kim](https://discuss.elastic.co/u/Anne_Kim)\
**Post date:** [October 23, 2019, 7:19am UTC](https://discuss.elastic.co/t/kibana/204609/3 "2019-10-23T07:19:16Z")

</div>

Сработало, спасибо!

> [@Igor\_Motov](#):
>
> ...то все top\_hits агрегации можно объединить в одну.

Не очень понятно.

---

<div class="post-metadata">

**Author:** ![Anne\_Kim](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/anne_kim/32/47196_2.png) [@Anne\_Kim](https://discuss.elastic.co/u/Anne_Kim)\
**Post date:** [October 23, 2019, 7:48am UTC](https://discuss.elastic.co/t/kibana/204609/4 "2019-10-23T07:48:48Z")

</div>

Ещё вопрос тогда: если с Top Hits для табличного вида всё понятно, то как эти же данные можно визуализировать в виде столбчатой диаграммы? По Y - значения баланса, по X - id игроков. Выбираются данные лишь на момент последнего обновления

UPD. Вопрос решён, через те же Top Hits. Ещё раз спасибо.

UPD-2. В массиве есть пара игроков с балансом, превосходящим в сотни раз балансы других игроков. За счёт этого неудобно визуализировать данные в виде диаграммы. Можно ли как-то исключить этих игроков из учёта?

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [October 23, 2019, 1:48pm UTC](https://discuss.elastic.co/t/kibana/204609/5 "2019-10-23T13:48:46Z")

</div>

> [@Anne\_Kim](#):
>
> Можно ли как-то исключить этих игроков из учёта?

Для этого нужен bucket\_selector, но кибаной эта агрегация [пока не поддерживается](https://github.com/elastic/kibana/issues/11167).

---

<div class="post-metadata">

**Author:** ![Anne\_Kim](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/anne_kim/32/47196_2.png) [@Anne\_Kim](https://discuss.elastic.co/u/Anne_Kim)\
**Post date:** [October 23, 2019, 2:02pm UTC](https://discuss.elastic.co/t/kibana/204609/6 "2019-10-23T14:02:00Z")

</div>

... или в Metric&Axes можно выбрать масштабирование Y-оси в логарифмическом виде, это нормализует представление выборки

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [November 20, 2019, 2:02pm UTC](https://discuss.elastic.co/t/kibana/204609/7 "2019-11-20T14:02:06Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
