Size: a a a

2020 December 25

DS

Daniil Semenov in Qlik BI chat
Vyacheslav Panov
Сравнить производительность, нужно сгруппировать таблицу с десятком измерений, из которых не все ключевые. Например, в таблице есть Месяц и Год. Что быстрее будет работать: если добавить Год в group by или применить функцию агрегирования Only(Год)?
Чет я за результат такой манипуляции не был бы уверен.
судя по вот этому, only(Год) не все данные оставит, а только те, где год будет в  единственном экземпляре у перечисленных в group by полях
источник

ЕС

Евгений Стучалкин... in Qlik BI chat
и что значит "сгруппировать таблицу"?
источник

VP

Vyacheslav Panov in Qlik BI chat
Сагрегировать/сжать, просуммировав меры в ней по определенным полям
источник

ЕС

Евгений Стучалкин... in Qlik BI chat
Vyacheslav Panov
Сагрегировать/сжать, просуммировав меры в ней по определенным полям
ну так суммируйте поля мер, зачем вам год трогать?)
источник

VP

Vyacheslav Panov in Qlik BI chat
Ок, более полный пример: таблица Год/Месяц/День/Продажи.

Первый вариант:
load
Год, месяц, sum(продажи)
Group by год, месяц

Второй:
Load
Only(год), месяц, sum(продажи)
Group by месяц

Результат одинаковый, вопрос в производительности. В моем случае таких полей как Год (неключевых) в таблице больше, и сама таблица больше 100 млн записей
источник

VP

Vyacheslav Panov in Qlik BI chat
Идея с Only() взята отсюда, в самом конце статьи упоминается
источник

VP

Vyacheslav Panov in Qlik BI chat
источник

DS

Daniil Semenov in Qlik BI chat
Я же говорю, попробуйте - результат будет разным
источник

DS

Daniil Semenov in Qlik BI chat
tmp:
Load * inline [
Год, Месяц, Продажи
2012, Январь, 1
2012, Февраль,3
2013, Январь, 2
2013, Февраль,4
2013, Март, 5
];


Only.table:
Load
Only(Год) as Only.Год, Месяц as Only.Месяц, sum(Продажи) as Only.Сумма
Resident tmp
Group by Месяц;

Group.Table:
Load
Год as Group.Год,
Месяц as Group.Месяц,
sum(Продажи) as Group.Сумма
Resident tmp
Group by Год,Месяц;
источник

VP

Vyacheslav Panov in Qlik BI chat
Месяц у меня в формате 202012, т.е. ГодМнсяц по факту
источник

VP

Vyacheslav Panov in Qlik BI chat
В этом случае результат будет одинаковым, если я не ошибаюсь
источник

DS

Daniil Semenov in Qlik BI chat
ну если добавятся другие поля по которым надо группировать - он оставит только значения, которые присутствуют в единственном экземпляре
источник

DS

Daniil Semenov in Qlik BI chat
сами же сказали, что у вас там полей много.
источник

DS

Daniil Semenov in Qlik BI chat
а так лучший способ понять - проверить на массиве данных
источник

VP

Vyacheslav Panov in Qlik BI chat
По ощущениям с only() работает дольше, я просто не дождался, пока выполнится скрипт. Поэтому и решил уточнить здесь, смутила статья, ссылку на которую выше привел
источник

DS

Daniil Semenov in Qlik BI chat
Ну вот я сейчас тоже читаю и не очень понял зачем там вообще в Only оборачивали.
Функция only в группировке не участвует. Она оставляет по-сути только те значения, которые являются уникальными для критериев группировки.
То есть ее использование конкретно для целей группировки выглядит туманным
источник

DS

Daniil Semenov in Qlik BI chat
тем более еще и акцент сделали зачем-то. При это объяснение немного за гранью.
"Кроме того, поработаем с годом и месяцем, чтобы по ним можно было делать отдельные выборки в приложении – завернем их в функцию only()."
источник

DS

Daniil Semenov in Qlik BI chat
может быть коллеги из АТК и прояснят, что конкретно автор имел ввиду)
источник

ИШ

Иван Шамаев... in Qlik BI chat
отбой)
источник
2020 December 26

GE

Galina E in Qlik BI chat
Daniil Semenov
Чет я за результат такой манипуляции не был бы уверен.
судя по вот этому, only(Год) не все данные оставит, а только те, где год будет в  единственном экземпляре у перечисленных в group by полях
Ну тут же очевидно, какие поля с Only работают. Когда они однозначно взаимосвязаны. CustomerID и Customer. Вот они и обернули одно из них в only. С таким же успехом могли бы Max  или min поставить, но похоже, что и правда only быстрее будет работать.
Емли в примере Месяц имеет формат 202005 , то Год можно в Only обернуть, все будет корректно, так как месяца уникальны в данном случае и уже содержат информацию Год.
источник