# Kibanaでの項目集計について

**URL:** <https://discuss.elastic.co/t/kibana/86058>\
**Category:** 日本語による質問・議論はこちら\
**Created:** [May 17, 2017, 7:30am UTC](https://discuss.elastic.co/t/kibana/86058 "2017-05-17T07:30:08Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![111142](https://avatars.discourse-cdn.com/v4/letter/1/a9a28c/32.png) [@111142](https://discuss.elastic.co/u/111142)\
**Post date:** [May 17, 2017, 7:30am UTC](https://discuss.elastic.co/t/kibana/86058/1 "2017-05-17T07:30:08Z")

</div>

ログを集計しています。  
ログには、項目A、項目B、項目Cとあり、内容は同じ様なデータが入っています。  
この項目A,B,Cを足し込んで集計し、Visualizeする事は可能でしょうか？

ログ形式：日付 項目A 項目B 項目C  
20170517 北海道 東京 名古屋  
20170517 北海道 東京 大阪  
20170517 青森 東京 名古屋

Visualizeのterm等で一つにしたい。  
北海道 2  
青森 1  
東京 3  
名古屋 1  
大阪 1

---

<div class="post-metadata">

**Author:** ![st1t](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/st1t/32/9188_2.png) [@st1t](https://discuss.elastic.co/u/st1t)\
**Post date:** [May 19, 2017, 2:03am UTC](https://discuss.elastic.co/t/kibana/86058/2 "2017-05-19T02:03:55Z")

</div>

うーん、既存の機能でさくっと実現するのは難しいかもしれないですね。。。

無理やり＆Data TableじゃなくてLineによるVisualizeになっちゃいますが、  
やろうと思えばTimelionのVisualizeで以下クエリで近いものは出来るかもです。  
※実際にデータ投入して動作確認しているわけではないので、クエリの書き方はドキュメントを確認しながら見てもらえればと。

- Timelion Query

```auto
.sum(.es(index=INDEX名,metric=count,q=項目A:東京),.es(index=INDEX名,metric=count,q=項目B:東京),.es(index=INDEX名,metric=count,q=項目C:東京))

```

---

<div class="post-metadata">

**Author:** ![111142](https://avatars.discourse-cdn.com/v4/letter/1/a9a28c/32.png) [@111142](https://discuss.elastic.co/u/111142)\
**Post date:** [May 19, 2017, 2:19am UTC](https://discuss.elastic.co/t/kibana/86058/3 "2017-05-19T02:19:47Z")

</div>

なるほど。難しいようですね。  
AかつBの様データの集計するには事前に何かしら細工した方が良さそうですね。  
ありがとうございました。

---

<div class="post-metadata">

**Author:** ![tsgkdt](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/tsgkdt/32/39151_2.png) [@tsgkdt](https://discuss.elastic.co/u/tsgkdt)\
**Post date:** [May 19, 2017, 4:45am UTC](https://discuss.elastic.co/t/kibana/86058/4 "2017-05-19T04:45:18Z")

</div>

例えば、kibanaのManagementからIndex Pattensから見られる scripted Fieldではどうでしょう。

test1, test2, test3というフィールドに値が入っているとし、scipted fieldで指定するtest\_arrayというフィールドに集めておいて、  
このフィールドに対してVisualizeを設定するイメージです。

- テストデータ

期待する結果は、tokyo=2. osaka=1, kyoto=1となるような、test1, test2, test3に値を入れました。

```auto
POST forum/test/1
{
  "test1": "kyoto",
  "test2": "osaka",
  "test3": "tokyo",
  "@timestamp": "2017/05/18 12:00:00"
}

POST forum/test/2
{
  "test1": "tokyo",
  "@timestamp": "2017/05/19 12:00:00"
}

```

- scripted field

 ![](https://us1.discourse-cdn.com/elastic/original/3X/1/b/1b8bf64e0839d37049b9c875faf68bf1b57ade4a.png)

stringフィールド、painlessを指定し、scriptにこのように書きました。  
内容としては、nullでなければ配列に足すというものです。

```auto
def t = []; 
if (doc['test1.keyword'].value != null) {
 t.add(doc['test1.keyword'].value);
}
if (doc['test2.keyword'].value != null) { 
 t.add(doc['test2.keyword'].value);
}
if (doc['test3.keyword'].value != null) {
 t.add(doc['test3.keyword'].value);
}
return t;

```

このtest\_arrayフィールドで可視化を作ると、下のように見ることができました。

 ![](https://us1.discourse-cdn.com/elastic/original/3X/c/3/c3a28352be6179f38ad4ccbd210835b9574361c4.png)

事前に集計用のフィールドに集めておくなどしておいた方がパフォーマンスは良いと思いますが、  
方法の１つとして。

---

<div class="post-metadata">

**Author:** ![111142](https://avatars.discourse-cdn.com/v4/letter/1/a9a28c/32.png) [@111142](https://discuss.elastic.co/u/111142)\
**Post date:** [May 19, 2017, 9:01am UTC](https://discuss.elastic.co/t/kibana/86058/5 "2017-05-19T09:01:10Z")

</div>

ありがとうございます。  
ばっちり希望通りの集計が出来ました。  
スペック的に余り良くないサーバなので、タイムアウトが出たりしたので  
logstashで取込み時に集計用フィールドに集めることを検討します。

---

<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:** [June 16, 2017, 9:01am UTC](https://discuss.elastic.co/t/kibana/86058/6 "2017-06-16T09:01:15Z")

</div>

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