Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WFs are calculated before filtration which contains other WFs #827

Open
davynchi opened this issue Jan 20, 2025 · 4 comments
Open

WFs are calculated before filtration which contains other WFs #827

davynchi opened this issue Jan 20, 2025 · 4 comments
Labels
bug Something isn't working

Comments

@davynchi
Copy link

Создал столбчатую диаграмму, ось X -- дата [act_date]).
Чтобы отобразить значения только для минимальной и максимальной даты, использую фильтр [only_border_dates]:
MIN([act_date]) = MIN(MIN([act_date]) TOTAL) OR MAX([act_date]) = MAX(MAX([act_date]) TOTAL)
Отображает все корректно (см. фото 1).

Image

Кроме того, есть вычисляемое поле [years_from_now], которое вычисляет округленное вверх в годах время до последней даты в датасете:
CEILING((DATE(MAX(MAX([act_date]) TOTAL)) - [act_date] + 1) / 365)
Создаю селектор по этому вычисляемому полю ("сколько последних лет брать"). Ставлю значение 1. После этого столбик для минимальной даты пропадает (для максимальной остаётся).

Image

При этом если убрать ограничение [only_border_dates], а вместо исходного поля подставить MIN([act_date]) - MIN(MIN([act_date]) TOTAL), то вместо ожидаемых значений 0, 7, 14, 21, ... (так как сначала селектором убрали самые первые значения) получаются значения 1449, 1456, 1463, ... (как будто селктор по вычисляемому полю отработал позже).

Image

Подскажите, пожалуйста, есть ли здесь ошибка в работе Datalens, или здесь все корректно? Версия 1.19.0

@davynchi davynchi changed the title Странное поведение селектора по вычисляемому полю (вычисление после чарта, а не до). Некорректное поведение селектора по вычисляемому полю (вычисление после чарта, а не до). Jan 20, 2025
@kuzmadom
Copy link

kuzmadom commented Jan 21, 2025

Добрый день.
@davynchi на последнем скриншоте не вижу ошибки - данные по оси X корректны, судя по предыдущим скриншотам. Фильтр с дашборда оставил дату только за последний год.

как будто селктор по вычисляемому полю отработал позже

Запрос в истоник за данными можно посмотреть в Инспекторе (выбрать соответсвующий пункт в меню чарта в трех точках).

@davynchi
Copy link
Author

davynchi commented Jan 22, 2025

Запрос в инспекторе (для второго скриншота):


SELECT
q_2.e_18 AS eb_0,
q_3.e_31 AS eb_15
FROM
(
SELECT CAST(t1.act_date AS DATE) AS e_30, CAST(t1.act_date AS DATE) AS e_31
FROM my_table AS t1
GROUP BY e_31
) AS q_3
JOIN
(
SELECT
sum(CASE WHEN (t1.field_1 = 0) THEN NULL ELSE t1.field_1 END) AS e_18,
CAST(t1.act_date AS DATE) AS e_17
FROM my_table AS t1
GROUP BY e_17
) AS q_2
ON q_3.e_31 = q_2.e_17 OR q_3.e_31 IS NULL AND q_2.e_17 IS NULL
LIMIT 1000001

В нем нет операций, связанных с селектором.
В чате поддержки мне сказали, что селектор по вычисляемому полю отрабатывает после создания чарта. Аргументируют это тем, что селектор равносилен запросу WHERE, а чарт -- запросу SELECT. Но ведь WHERE отрабатывает раньше SELECT, то есть селектор должен вычислиться раньше чарта. Так в чем тогда причина того, что селектор отрабатывает позже чарта?

@davynchi
Copy link
Author

Фильтр с дашборда оставил дату только за последний год.

Проблема не в этом, а в том, что функция MIN([act_date]) - MIN(MIN([act_date]) TOTAL) выдает результат не от 0, а от 1449.

@KonstantAnxiety
Copy link
Contributor

Добрый вечер
@davynchi

Действительно, имеет место не совсем ожидаемое поведение сервиса

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

Я переведу этот issue в релевантный репозиторий, а для данного чарта могу порекомендовать, если это возможно, использовать для фильтра поле без оконной функции, например для [years_from_now] использовать формулу:

DATEPART(TODAY(), 'year') - DATEPART([act_date], 'year')

@KonstantAnxiety KonstantAnxiety transferred this issue from datalens-tech/datalens Jan 31, 2025
@KonstantAnxiety KonstantAnxiety added the bug Something isn't working label Jan 31, 2025
@KonstantAnxiety KonstantAnxiety changed the title Некорректное поведение селектора по вычисляемому полю (вычисление после чарта, а не до). WFs are calculated before filtration which contains other WFs Jan 31, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants