Как запросить меру как единое вычисленное значение (в среднем за 10 дней), а не разделить на гранулярность (суточная мера)? - PullRequest
1 голос
/ 06 февраля 2020

У меня есть сомнения. В настоящее время у меня есть куб с preAggregation , определенным с дневной детализацией и некоторыми мерами A, B, C. preAggregation прекрасно работает, когда я запрашиваю, используя timeDimension с фиксированными dateRange и granularity (он извлекает временные ряды, которые я могу построить на диаграмме, так что с этим все в порядке).

Моя проблема в том, что я также хочу показать эти меры (A, B, C), усредненные как одно значение, но если я удаляю granularity из timeDimension, куб перестанет использовать preAggregation , и вместо этого он выполняет полный запрос.

Суммируя:
Мне нужно получить measure (например, продажи $$$) для каждого дня фиксированного временного диапазона ( разделены как ряд), и мне также нужно среднемесячное значение (как одно число). Как построить второй запрос (одно значение measure)? Для первого я просто добавляю следующее timeDimension:

{
   "granularity": "day",
   "dimension": "timestamp",
   "dateRange": [
      "2020-01-26T00:00:00Z",
      "2020-02-06T00:00:00Z"
   ]
}

Но когда я хочу, чтобы показатель был агрегирован для одного и того же dateRange как одно значение, я не знаю, как построить запрос.

1 Ответ

1 голос
/ 07 февраля 2020

Все avg меры считаются Не аддитивные , и поэтому большинство сверток, которые работают для Аддитивные , не выбираются для запросов, содержащих avg меры: https://cube.dev/docs/pre-aggregations#rollup -rollup-selection-rules .

Однако для средних показателей есть хитрость, позволяющая реклассифицировать Неаддитивные меры до Leaf Measure Additive . Например, вы можете переписать

cube(`Cube`, {
  // ...

  measures: {
    averageA: {
      // ...
      type: `avg`
    },

    averageB: {
      // ...
      type: `avg`
    },

    // ...

  },

  // ...

  preAggregations: {
    averagesRollup: {
      type: `rollup`
      measureReferences: [averageA, averageB, averageC],
      timeDimensionReference: timestamp,
      granularity: `day`
    }
  }
})

в:

cube(`Cube`, {
  // ...

  measures: {
    A: {
      // ...
    },

    B: {
      // ...
    },

    // ...

    count: {
      type: `count`
    },

    averageA: {
      sql: `${A} / ${count}`,
      type: `number`
    },

    averageB: {
      sql: `${B} / ${count}`,
      type: `number`
    },
    // ...
  },

  // ...

  preAggregations: {
    averagesRollup: {
      type: `rollup`
      measureReferences: [A, B, C, count],
      timeDimensionReference: timestamp,
      granularity: `day`
    }
  }
})

В этом случае Cube. js знает, что меры averageA, averageB и averageC составлены из A, B, C и count и будет использовать averagesRollup, как в запросе Leaf Measure Additive и возвращать результаты, даже если гранулярность измерений времени не установлена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...