2017-02-18 4 views
0

Disons que je crée un index dans ElasticSearch et importer des donnéesComment créer un mois par rapport au mois sociétés nouvelles graphique à barres

PUT test 
{ 
    "mappings": { 
    "orders": { 
     "properties": { 
     "devices": { 
      "type": "integer" 
     }, 
     "location": { 
      "type":"geo_point" 
     }, 
     "time" : { 
      "type":"date", 
      "format": "epoch_second" 
     }, 
     "company" : { 
     "type":"keyword"  
     } 
     } 
    } 
    } 
} 

Quelle est assez simple à faire dans Kibana devient de comptage unique d'entreprises par mois, C'est bien, mais pas assez bon pour obtenir un certain nombre d'entreprises qui ont eu la première commande ce mois-là. Est-ce possible en kibana ou timelion? Si aucune idée de comment je devrais enregistrer des données à élastique afin que je puisse obtenir ce numéro? J'utilise Kibana 5.1.2

Répondre

0

J'ai ajouté un type de propriété dans l'index appelé sequence, qui est le numéro de l'ordre séquentiel, donc s'il s'agit d'un premier ordre, je lui ai donné 1, si second 2 et ainsi de suite. .. Mapping ressemble à ce

PUT test 
{ 
    "mappings": { 
    "orders": { 
     "properties": { 
     "devices": { 
      "type": "integer" 
     }, 
     "email": { 
      "type":"keyword" 
     }, 
     "company": { 
      "type":"keyword" 
     }, 
     "location": { 
      "type":"geo_point" 
     }, 
     "sequence":{ 
      "type":"integer" 
     }, 
     "time": { 
      "type":"date", 
      "format": "strict_date_optional_time||epoch_second" 

     } 
     } 
    } 
    } 
} 

donc, pour cette opération je choisis Timelion ce qui est cool et vous permet de calculer les valeurs. La formule pour MoM% des nouveaux utilisateurs est ...

(new users this month/cumulative users till previous month) 

Ce regard dans l'expression de timelion comme celui-ci

.es(q=sequence:1,index=index,timefield=time,metric=cardinality:company) 
.divide(.es(index=index,timefield=time,metric=cardinality:company,offset=-1M) 
.cusum()).bars() 

Notez que cette requête est une seule requête, je coupe seulement en 3 morceaux pour faciliter lisibilité Et j'ai ajouté des barres() juste pour m'amuser.