Не строятся графики, хотя таблица строится

Приветствую.

SQL-запрос КУБа:

WITH Q AS( --Базовый запрос
SELECT
    YEAR_NCODE,
    MONTHOFYEAR_NCODE,
    YEAR_NCODE*12+MONTHOFYEAR_NCODE as year_month_ncode, --Номер скользящего месяца
	MEASURE_CCODE,
	BUSINESS_NAME,
	PRODUCT_NAME,
    MACROREGION_NAME,
	SERVICE_NAME,
	CLIENTTYPE_NAME,
    CLIENTSEGMENT_NAME,
    ANLGRP_CLIENTSEGMENT_CCODE,
    CHANNELDETAIL_NAME,
    ANALYTICALDIMENSION_THREE_NAME,
    FACTCOMPARISON_FLAG,
    FACT_1_VALUE,
    FACT_PY_1_VALUE
FROM dmgd.TOPMANAGERMEASURESENR_VW_RPT
WHERE REPORT_DATE >= '2021-01-01'
	AND PERIODTYPE_CCODE='M'
    AND PRODUCT_NAME IS NOT NULL
	AND VALUESTREAM_NAME = 'Письма'
    AND MEASURE_CCODE IN ('PL_STREAM', 'CLIENT_CNT', 'RPO_CNT')
    AND ${filters()}
),
vMaxYearT AS ( --Определяем МАХ год
SELECT
    Max(YEAR_NCODE) as vMaxYear
FROM
    Q
WHERE FACT_1_VALUE != 0
),
vMaxMonthT AS ( --Определяем МАХ месяц в МАХ году
SELECT
    Max(MONTHOFYEAR_NCODE) as vMaxMonth
FROM
    Q, vMaxYearT
WHERE YEAR_NCODE = vMaxYear AND FACT_1_VALUE != 0
)
SELECT
    YEAR_NCODE,
    MONTHOFYEAR_NCODE,
    year_month_ncode,
	MEASURE_CCODE,
	BUSINESS_NAME,
	PRODUCT_NAME,
    MACROREGION_NAME,
	SERVICE_NAME,
	CLIENTTYPE_NAME,
    CLIENTSEGMENT_NAME,
    ANLGRP_CLIENTSEGMENT_CCODE,
    CHANNELDETAIL_NAME,
    ANALYTICALDIMENSION_THREE_NAME,
    FACTCOMPARISON_FLAG,
    FACT_1_VALUE,
    FACT_PY_1_VALUE,
    vMaxYear,
    vMaxMonth
FROM Q, vMaxYearT, vMaxMonthT

JSON дэша:

{
  frame: {
    h: 4,
    w: 10,
    x: 2,
    y: 4,
  },
  dataSource: {
    koob: 'clickhouse.dmgd_TOPMANAGERMEASURESENR_VW_RPT',
    style: {},
    xAxis: 'year_month',
    yAxis: 'measures',
    measures: [
      "sum(if(MEASURE_CCODE='PL_STREAM' and PRODUCT_NAME='Бокс-сервис',fact_year_month)):sum_fact_year_month",
      "sum(if(MEASURE_CCODE='PL_STREAM' and PRODUCT_NAME='Бокс-сервис',fact_year_month_py)):sum_fact_year_month_py",
    ],
    dimensions: [
      'year_month',
    ],
  },
  view_class: 'koob-table-simple',
  title: '',
}

При этом, если это плоска таблица, то всё выводится:

Если же это столбики/линии и т.п., то попадаем на ошибку:

 "details": {
        "detailedMessage": "Code: 47. DB::Exception: Missing columns: 'vMaxMonth' 'vMaxYear' while processing query: 'SELECT YEAR_NCODE, MONTHOFYEAR_NCODE, (YEAR_NCODE * 12) + MONTHOFYEAR_NCODE AS year_month_ncode.......

Добрый день. Проблему воспроизвели, пытаемся определить причину. Спасибо за ваше обращение! Будем держать в курсе.

1 лайк

Проблему локализовали, будет исправлена в следующих версиях компонента luxmsbi-pg

1 лайк

На можно раскрыть суть проблемы? И можно ли её как-то обойти на текущем релизе?

Проблема связана с некорректной обработкой filters() в запросе. Если убрать данную функцию из запроса, то дэш будет отображаться.

1 лайк

Sunkey также не строится. Прошу сориентировать с датой выхода этого компонента с исправленной ошибкой. Благодарю

Приветствую. Когда ориентировочно ожидать выход релиза с испраленным поведением КУБа?

Добрый день. Данную багу починили в версии 9.3.1 компонента luxmsbi-pg. В данном запросе необходимо ${filters()} перенести в конец запроса, т.к. столбцы vMaxYearT и vMaxMonthT создаются после указания ${filters()} в связи с этим, система выдает ошибку об отсутствии данных полей

Перенести ${filters()} в конец запроса не представляется возможным, ибо столбцы vMaxYear и vMaxMonth должны рассчитываться исходя из текущих пользовательских фильтров. Свой SQL-запрос считаю максимально оптимальным. Готов подискутировать онлайн.

Хочу заметить, что пользовательские фильтры на поля vMaxYear и vMaxMonth не накладываются! И эти поля используются, как параметры для построения ДБ.

Есть предположение, что Luxms пытается оптимизировать запрос из КУБа и это работает, если запрос в КУБе простой (типа селет * фром табличка), а если есть в нём нетривиальная логика, то всё ломается.
Как вариант добавить в конфиг параметр, который будет отключать такую оптимизацию, а будет формировать следующий запрос в СУБД:

Select "перечисление полей" from (запрос из КУБА)

В этом случае наша логика будет полностью сохраняться и ничего ломаться не будет!

Для решения вашей проблемы, необходимо столбцы, созданные после функции filters указать в except и все те размерности, которые используют данные поля (речь про vMaxYear и vMaxMonth)

1 лайк