# TSVBとMetricのnull値の取り扱いの差

**URL:** <https://discuss.elastic.co/t/tsvb-metric-null/215248>\
**Category:** 日本語による質問・議論はこちら\
**Created:** [January 16, 2020, 6:33am UTC](https://discuss.elastic.co/t/tsvb-metric-null/215248 "2020-01-16T06:33:06Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![sshota](https://avatars.discourse-cdn.com/v4/letter/s/f9ae1b/32.png) [@sshota](https://discuss.elastic.co/u/sshota)\
**Post date:** [January 16, 2020, 6:33am UTC](https://discuss.elastic.co/t/tsvb-metric-null/215248/1 "2020-01-16T06:33:06Z")

</div>

お世話になります。

TSVBとMetricのnull値の取り扱いの差について教えてください。

たとえば以下のようなデータの場合で、testdate を Time field としてソートした場合に、value の Top Hit ( Size=1 , ORDER BY DESC ) をとると、以下のとおり差があります。

- **TSVB**  
\_id=1のnullが無視され、\_id=2の10が取得(表示)される
- **Metric**  
\_id=1のnullが取得され、値なし(ハイフン)で表示される。

```auto
      {
        "_index": "sample-index",
        "_type": "sample-type",
        "_id": "1",
        "_score": 1,
        "_source": {
          "title": "testdata-1",
          "testdate": "2020-01-03T00:00:00+09:00",
          "value": null
        }
      },
            {
        "_index": "sample-index",
        "_type": "sample-type",
        "_id": "2",
        "_score": 1,
        "_source": {
          "title": "testdata-2",
          "testdate": "2020-01-02T00:00:00+09:00",
          "value": 10
        }
      },
      {
        "_index": "sample-index",
        "_type": "sample-type",
        "_id": "3",
        "_score": 1,
        "_source": {
          "title": "testdata-3",
          "testdate": "2020-01-01T00:00:00+09:00",
          "value": 20
        }
      }

```

## 実現したいこと

TSVBでも、Metricのときと同じ動きをしてほしい(nullを捉えてほしい)です。  
必要な設定などありましたら、ご教示いただけますと幸いです。

## 動作環境

- Elasticsearch 7.3.0
- Kibana 7.3.0

---

<div class="post-metadata">

**Author:** ![Koji\_Kawamura](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/koji_kawamura/32/93938_2.png) [@Koji\_Kawamura](https://discuss.elastic.co/u/Koji_Kawamura)\
**Post date:** [February 6, 2020, 7:34am UTC](https://discuss.elastic.co/t/tsvb-metric-null/215248/2 "2020-02-06T07:34:35Z")

</div>

@sshota さん

TSVBとMetricのnull値の違い、サンプルデータを使ってこちらでも試してみました。確かにおっしゃるとおりTSVBだとソート後にnull値を除外した値が表示されますね。

TSVBのMetric表示結果  
 ![image](https://us1.discourse-cdn.com/elastic/original/3X/b/7/b73c4b678b35e994a708a97dd70467c4e4b81837.png)

同じaggsをMetricビジュアライゼーションで表示  
 ![image](https://us1.discourse-cdn.com/elastic/original/3X/a/0/a099228bd2678033f44214f15d1f8be68efde374.png)

違いが生まれるのはTSVBの描画ロジックだと思われます。そもそもMetricビジュアライゼーションでは `index_name/_search` APIを使っています。一方、TSVBは `/api/metrics/vis/data` というAPIを呼び出しています (searchプラス何かしてる)、その結果はnullが返っているので、TSVBのJavascript部分で`null`を描画時に外すロジックが入っているのかと思われます (ここは推測)。

解決策の一つになるかわかりませんが、`mapping`で`null_value`を明示するのはいかがでしょうか。例えば以下のマッピングを行うと、nullの場合にTSVBのMetricと、Metricでどちらも`0`を表示できます。

```auto
PUT test_index
{
  "mappings": {
    "properties": {
      "testdate": {"type": "date"},
      "title": {"type": "text"},
      "value": {
        "type": "long",
        "null_value": 0
      }}}}

```

TSVBのMetric, null\_value=0  
 ![image](https://us1.discourse-cdn.com/elastic/original/3X/c/0/c0783a3c4378181a2b27ad4dc03742ac2dc72650.png)

Metricビジュアライゼーション, null\_value=0  
 ![image](https://us1.discourse-cdn.com/elastic/original/3X/c/3/c38f6918ef78798b0aad7a7cd4650fce030a282d.png)

テスト時に使ったバルクリクエストも貼っておきます。

```auto
POST test_index/_bulk
{"index":{"_id":"1"}}
{"title":"testdata-1","testdate":"2020-01-03T00:00:00+09:00","value":null}
{"index":{"_id":"2"}}
{"title":"testdata-2","testdate":"2020-01-02T00:00:00+09:00","value":10}
{"index":{"_id":"3"}}
{"title":"testdata-3","testdate":"2020-01-01T00:00:00+09:00","value":20}

```

---

<div class="post-metadata">

**Author:** ![sshota](https://avatars.discourse-cdn.com/v4/letter/s/f9ae1b/32.png) [@sshota](https://discuss.elastic.co/u/sshota)\
**Post date:** [February 7, 2020, 1:48am UTC](https://discuss.elastic.co/t/tsvb-metric-null/215248/3 "2020-02-07T01:48:24Z")

</div>

@Koji_Kawamura さん

丁寧なご回答ありがとうございます。  
ロジックの違いについても大変参考になりました。

ご教示いただいた ” `mapping` で `null_value`を指定 ” ですが  
実現したいことが、nullの場合に0を表示したい、ではなくその逆で、nullの場合にTSVBでもnull（値なし）として表示してほしい、という内容なのです。

Dashboardで、ある時間に取れたデータをMetricで並べて横並びに見ることをしているのですが、TSVBだとnullを無視されてしまうので、値が取れていない項目があると、そのMetricだけほかと時間軸がずれてしまうということが発生しており、それの解消法を探しております。

---

<div class="post-metadata">

**Author:** ![Koji\_Kawamura](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/koji_kawamura/32/93938_2.png) [@Koji\_Kawamura](https://discuss.elastic.co/u/Koji_Kawamura)\
**Post date:** [February 7, 2020, 2:42am UTC](https://discuss.elastic.co/t/tsvb-metric-null/215248/4 "2020-02-07T02:42:06Z")

</div>

@sshota さん

なるほど、そういうことだったのですね。  
Dashboardには複数のMetricを並べて見るということですが、TSVBのMetricと、VisualizationのMetricを併用しなくてはならない理由があるのでしょうか?  
全てのMetricをVisualizationのMetricで統一すれば、解決されるのでは、とも思えます。

おそらくTSVBを使わないといけない理由があるんですよね。  
TSVBのMetricだと一つのVisualizationで2つMetricを表示することができる利点がありますが。

---

<div class="post-metadata">

**Author:** ![sshota](https://avatars.discourse-cdn.com/v4/letter/s/f9ae1b/32.png) [@sshota](https://discuss.elastic.co/u/sshota)\
**Post date:** [February 7, 2020, 4:55am UTC](https://discuss.elastic.co/t/tsvb-metric-null/215248/5 "2020-02-07T04:55:47Z")

</div>

@Koji_Kawamura さん

はい、おっしゃるとおりです。  
諸般の事情により全てのMetricをTSVBで統一したかったのですが、本事象があるため現在は  
ご指摘のとおり、VisualizationのMetricで統一することで対応をしております。

それでも

```auto
nullの場合にTSVBでもnull（値なし）として表示

```

ができるのであれば、今からでもTSVBへ変更したかったのですが、  
ひとまずは現状で対応することにしたいと思います。

いろいろとご教示ありがとうございました。

---

<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:** [March 6, 2020, 4:55am UTC](https://discuss.elastic.co/t/tsvb-metric-null/215248/6 "2020-03-06T04:55:58Z")

</div>

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