Пример расчета разных агрегатов на разных уровнях группировки

Часто возникает потребность представлять различные агрегаты на разных уровнях группировки. Это позволяет более эффективно и гибко анализировать данные на различных иерархических уровнях в удобном формате.

Рассмотрим конкретный пример: необходимо представить данные по годам и кварталам. В этом случае для каждого года следует вычислить общую сумму показателя, а для каждого квартала – долю квартального показателя от общей суммы за год.

  1. Для того, чтобы определить уровень группировки используем проверку условия

COUNTD([quarter]) > 1

  1. Для верхнего уровня количество уникальных кварталов будет больше единицы, для нижних – равно единицы. Теперь мы готовы написать формулу для нашего агрегата, используя это условие:
CASE 
    WHEN COUNTD([quarter]) > 1
    THEN STR(SUM([indicator]))
    ELSE CONCAT(STR(SUM([indicator]) / SUM(SUM([indicator]) TOTAL) * 100), '%')
END 
  1. Для наглядности отображения процентных значений, можно преобразовать значения в строки и добавить знак ‘%’.

  2. Осталось только добавить этот агрегат в структуру виджета в раздел столбцов. А в группировку поля с годом и номером квартала.

Итоговый результат выглядит следующим образом -

5240474453698273875

В нашей бесплатной версии AW BI можно посмотреть готовый пример.