Size: a a a

2021 March 19

АЩ

Алексей Щеголев... in Qlik BI chat
для примера что выше.
источник

АЩ

Алексей Щеголев... in Qlik BI chat
В общем, вся задачка одним постом:
Есть таблица:
[ID чека, Имя товара, ... ]
что то типа:
1, Товар 1
1, Товар 2
2, Товар 1
2, Товар 3


Нужно сфоримировть таблицу, в которой будет:
[Товар, товар, который встречается с ним в чеке, количество таких чеков]
Товар 1, товар 2, 1
товар 1, товар 3, 1
товар 2, товар 1, 1
товар 2, товар 3, 0
товар 3 товар 1 , 1
товар 3 , товар 2, 0


это для таблицы выше.  

Чеков миллионы, товаров сотни тысяч наименований.
Таблицы с сотнями тыщщ столбцов создавать не вариант.

Хотяб вектор понять,В котором копать...
источник

АЩ

Алексей Щеголев... in Qlik BI chat
задачу точно много раз уже решали...
источник

AS

Aleksey SV in Qlik BI chat
ну первое что в голову приходит, хз, насколько это сработает
1) грузим изначальную таблицу как есть (пусть будет t1)
2) выгружаем список уникальных товаров, ДЛЯ КОТОРЫХ будем искать соседей (т.е для цикла создается поле с уникальными товарами, пусть будет compare_products_list)
3) запускаем цикл по уникальным товарам :
foreach prod in compare_products_list
—— лоад "все чеки, где присутствует этот prod" (назовем выборку check_list)
—— лоад фром t1 все записи из списка check_list (при помощи exists, называем выгрузку t2)
——лоад чек, товар as "соседний товар", count(товар) as количествоНаЧеке from t2 group by чек, товар. это будет, если я ничего не путаю, выгрузка подсчитанных соседей для первого в цикле продукта.
источник

АЩ

Алексей Щеголев... in Qlik BI chat
ох... ядрено не знакомых операторов... пошел разбираться.
источник

АЩ

Алексей Щеголев... in Qlik BI chat
начнем с Foreach )
источник

АЩ

Алексей Щеголев... in Qlik BI chat
но по идее должно сработать.
источник

GE

Galina E in Qlik BI chat
Алексей Щеголев
начнем с Foreach )
For each - это оператор цикла, как я поняла :)
источник

АЩ

Алексей Щеголев... in Qlik BI chat
Да :)
источник

АЩ

Алексей Щеголев... in Qlik BI chat
это я понял, я не знал, что он может значения из поля таблицы преребирать.
источник

АЩ

Алексей Щеголев... in Qlik BI chat
ща короче раскурим тему.
источник

АЩ

Алексей Щеголев... in Qlik BI chat
@achotakovato   спасибо за пинок хоть в каком то направлении :)
источник

AS

Aleksey SV in Qlik BI chat
Алексей Щеголев
начнем с Foreach )
1 - это просто название поля, где должны лежать уникальные наименования товаров. 2 - это по сути  переменная, которая от товара к товару будет изменять своё значение
источник

АЩ

Алексей Щеголев... in Qlik BI chat
ага, ща попробую .
источник

AS

Aleksey SV in Qlik BI chat
Алексей Щеголев
@achotakovato   спасибо за пинок хоть в каком то направлении :)
я не ручаюсь, что сервак после такого не задымится) лучше поначалу на инлайновой табличке проверить
источник

АЩ

Алексей Щеголев... in Qlik BI chat
это я умею , да :)
источник

LB

Loki 2.0 Beta in Qlik BI chat
Aleksey SV
я не ручаюсь, что сервак после такого не задымится) лучше поначалу на инлайновой табличке проверить
пятница вечер самое лучшее время чтоб сервера ронять! )
источник

АЩ

Алексей Щеголев... in Qlik BI chat
Aleksey SV
1 - это просто название поля, где должны лежать уникальные наименования товаров. 2 - это по сути  переменная, которая от товара к товару будет изменять своё значение
не очень понимаю как в загруженную таблицу догрузить товары по ранее загруженных чекам..
источник

GE

Galina E in Qlik BI chat
Алексей Щеголев
не очень понимаю как в загруженную таблицу догрузить товары по ранее загруженных чекам..
Дозагрузить:  concatinate (ИмяТаблицы)
источник

AS

Aleksey SV in Qlik BI chat
Алексей Щеголев
не очень понимаю как в загруженную таблицу догрузить товары по ранее загруженных чекам..
t1:
LOAD * INLINE
[IDчека, ИмяТовара,
1, товар 1
1, товар 2
2, товар 1,
2, товар 3,
3, товар 3];

t2:
LOAD Distinct [ИмяТовара] as compare_products_list
Resident t1;
for each prod in FieldValueList('compare_products_list')

 tmp1:
   LOAD IDчека as check_list
   Resident t1
   where [ИмяТовара] = '$(prod)';
   
   //left join(tmp1)
   NoConcatenate
   tmp2:
   LOAD * Resident t1
   where Exists(check_list, IDчека);
 t3:
   LOAD
     '$(prod)' as ТоварДляСравнения,
       ИмяТовара as ПодсчитываемыйТовар,
       count(ИмяТовара) as количество
   Resident tmp2
   where ИмяТовара <> '$(prod)'
   Group by ИмяТовара ;
   drop Table tmp1, tmp2;
Next
источник