Расчет процента в друид - PullRequest
       7

Расчет процента в друид

0 голосов
/ 06 сентября 2018

У меня есть данные в следующем формате. Мне трудно вычислять процент прибыли определенного товара или бренда по всем продуктам в определенный день.

Date    Item    Brand   Profit
15-08-2019  A   Nike    5
15-08-2019  B   Nike    10
15-08-2019  C   Nike    12
15-08-2019  D   Nike    6
15-08-2019  E   Nike    9
15-08-2019  F   Adidas  4
15-08-2019  G   Adidas  3
15-08-2019  H   Adidas  7
16-08-2019  A   Nike    8
16-08-2019  B   Nike    4
16-08-2019  C   Nike    6
16-08-2019  D   Nike    7
16-08-2019  E   Nike    9
16-08-2019  F   Adidas  5
16-08-2019  G   Adidas  4
16-08-2019  H   Adidas  9
  • процентная прибыль продукта A 15 августа = прибыль A / сумма прибыли 15 августа (5/56).
  • процентная прибыль Nike 16 августа = 34/52.

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

1 Ответ

0 голосов
/ 26 сентября 2018

Расчет процента прибыли конкретного товара или бренда в вашем случае может быть выполнен с использованием отфильтрованной агрегации .

Для бренда 'Nike' будут работать следующие json:

{
  "queryType": "timeseries",
  "dataSource": <your_datasource>,
  "granularity": "day",
  "aggregations": [
    {
      "type" : "filtered",
      "filter" : {
        "type" : "selector",
        "dimension" : "Brand",
        "value" : "Nike"
      },
      "aggregator" :  {
        "type" : "longSum",
        "name" : "brand_sum",
        "fieldName" : "Profit"
      }
    },
    { "type": "longSum", "name": "total_sum", "fieldName": "Profit" }
  ],
  "postAggregations": [
    { "type": "arithmetic",
      "name": "average_profit",
      "fn": "/",
      "fields": [
        { "type": "fieldAccess", "name": "brand_sum", "fieldName": "brand_sum" },
        { "type": "fieldAccess", "name": "total_sum", "fieldName": "total_sum" }
      ]
    }
  ],
  "intervals": [ "15-08-2019/16-08-2019" ]
}

Это даст среднюю прибыль для конкретного бренда (здесь «Nike») за все дни (здесь 15 и 16).

...