Настройка фильтрации данных

Добрый день!
Имеется витрина с данными, которая хранит данные на неопределенную глубину. На дэш (столбики) необходимо вывести данные только за последние 2 года, т.е. текущий и предыдущий год. Причем на график данные должны попадать за одинаковый период. т.е. если витрине имеются данные на 01-08 текущего года, то и данные за предыдущий год должны быть посчитаны за аналогичный период. Откинуть более ранние данные в кубе тоже нельзя, что бы была возможность анализировать предыдущие периоды ( причем тоже за аналогичный период)
примерно должно получится следующее:

display: {
    headerStyle: {},
    rotateXLabel: '45',
  },
  options: [
    '!DisplaySplitLines',
    '!DisplayTicks',
    'TooltipXAxisTitle',
    'DisplayAllBadges',
  ],
  dataSource: {
    koob: 'Vertica_dwh_luxms_svc_r00.DQMON_finteh_payments_main',
    style: {
      measures: {
        sum_vol: {
          title: 'Сумма коммисий',
          format: '# ### [тыс, млн, млрд, тера]',
        },
      },
      year_ncode: {
        '2021': {},
        '2022': {
          format: '# ### [тыс, млн, млрд, тера]',
          vizelType: 'spline',
          strokeStyle: 'Solid',
        },
        '2023': {
          format: '# ### [тыс, млн, млрд, тера]',
        },
      },
    },
    xAxis: 'mrc_name',
    yAxis: 'measures;year_ncode',
    sortBy: '-sum_vol',
    filters: {
      mrc_name: true,
      year_ncode: [
        '!=',
        '2021',
      ],
      system_name: true,
      payment_date: true,
      post_week_num: true,
      monthofyear_ncode: true,
    },
    measures: [
      '(nvl(sum(abonent_comission),0)+nvl(sum(contractor_comission),0)+nvl(sum(online_comission),0)):sum_vol',
    ],
    hierarchy: [
      'ufps_name',
    ],
    dimensions: [
      'mrc_name',
      'year_ncode',
    ],
  },
  view_class: '1II.column',
  title: 'ДОХОД',

Но в данном случае хардкодом отброшен 2021 год и нет понимания как отфильтровать данные для расчета факта за 2022 по payment_date<=2022-08-01
ранее уже спрашивал в https://community.luxmsbi.com/-1313/lpe и была получена рекомендация создать размерности типа max(year_ncode):max_year
Но когда я их добавляю выходит следующее:

т.е. считает сумму за 2 года а не отдельно по годам

display: {
    headerStyle: {},
    rotateXLabel: '45',
  },
  options: [
    '!DisplaySplitLines',
    '!DisplayTicks',
    'TooltipXAxisTitle',
    'DisplayAllBadges',
  ],
  dataSource: {
    koob: 'Vertica_dwh_luxms_svc_r00.DQMON_finteh_payments_main',
    style: {
      measures: {
        sum_vol: {
          title: 'Сумма коммисий',
          format: '# ### [тыс, млн, млрд, тера]',
        },
      },
      year_ncode: {
        '2021': {},
        '2022': {
          format: '# ### [тыс, млн, млрд, тера]',
          vizelType: 'spline',
          strokeStyle: 'Solid',
        },
        '2023': {
          format: '# ### [тыс, млн, млрд, тера]',
        },
      },
    },
    xAxis: 'mrc_name',
    yAxis: 'measures;past_year;max_year',
    sortBy: '-sum_vol',
    filters: {
      mrc_name: true,
      year_ncode: true,
      system_name: true,
      payment_date: true,
      post_week_num: true,
      monthofyear_ncode: true,
    },
    measures: [
      '(nvl(sum(abonent_comission),0)+nvl(sum(contractor_comission),0)+nvl(sum(online_comission),0)):sum_vol',
    ],
    hierarchy: [
      'ufps_name',
    ],
    dimensions: [
      'mrc_name',
      'max(year_ncode):max_year',
      'max(year_ncode)-1:past_year',
    ],
  },
  view_class: '1II.column',
  title: 'ДОХОД',

Подскажите как победить, что делаю не так и как добавить фильтрацию за одинаковый период для каждого года

Добрый день, Роман!
Есть несколько вариантов решения Вашего вопроса. Показал на примере своих таблиц, но думаю, что принцип будет понятен касаемо Ваших кубов и таблиц.

– 1 способ. Создать куб для аналитики определённых дат и его использовать для аналитического деша. В случае замены даты придётся исправлять select куба. Ниже пример, если хотим видеть даты с июля по декабрь любого года

SELECT *
FROM custom.d_ldate
WHERE date_part('month', dt) >= 6 

– 2 способ. Создать dimension используемый вместо поля dt. То есть вместо условного dt в конфиге дешлета будет использовать dt_analytics, который имеет даты, которые нам нужны с июля по декабрь любого года

SELECT *, 
CASE WHEN date_part('month', dt) >= 6 THEN dt ELSE NULL END AS dt_analytics --Создать такой dimension в кубе
FROM custom.d_ldate

– 3 способ. Создать dimension используемый для фильтрации dt в настройках деша. Здесь мы создадим особенный dimension на основе наших дат, который в конфиге дешлета сможем фильтровать по месяцу. По аналогии можно создать и для фильтрации по дням

SELECT *, 
date_part('month', dt) AS dt_analytics --Создать такой dimension в кубе
FROM custom.d_ldate

–Добавить фильтр в конфиг деша

 filters: {
      dt_analytics: [
        '>',
        '6', -- будут фильтроваться даты с 7 по 12 месяц любых годов
      ],
    },

Надеюсь, что ответил на Ваш вопрос!

Спасибо, ограничить набор данных за один период в разные года получилось, но хотелось бы это дело автоматизировать. т.е. витрина постоянно пополняется, отдельным атрибутом в кубе не сложно посчитать максимально доступную дату, но нет возможности в фильтре сравнивать два атрибута или я не знаю как это сделать, подскажите.
и по поводу ограничения последних 2х лет жду рекомендации

“т.е. витрина постоянно пополняется, отдельным атрибутом в кубе не сложно посчитать максимально доступную дату, но нет возможности в фильтре сравнивать два атрибута или я не знаю как это сделать, подскажите.”

  1. Правильно ли я понимаю, что Вам надо постоянно видеть данные с 1 месяца по текущий месяц
  2. Такой период использовать во всех годах
  3. При этом ограничить данные только за последние два года?

все верно, но если пользователю понадобится посмотреть глубже, например сравнить 22 и 21 год, можно было бы это сделать выбором года в управляющем дешэ.

Тогда напрашивается такой вариант куба

SELECT *, EXTRACT(YEAR FROM dt) AS year_filter
FROM custom.d_ldate
WHERE dt BETWEEN  date_trunc('year', dt)::date AND (date_trunc('year', dt) + (now()::date - date_trunc('year', now()::date)))::date

Здесь благодаря условию where происходит “автоматизация”, то есть всегда будет накладываться условие на все года: возьми данные от первого числа первого месяца до текущей даты по месяцу и числу

А dimension - ом (year_filter) Вы сможете управлять глубиной на управляющем деше, сколько хотите отображать лет, убирая и ставя галочки, по нему также можно группировать расчёты для суммы

спасибо, логика понятна