23 Replies Latest reply: May 24, 2017 5:03 AM by Andrey Khoronenko RSS

    Сет аналитикс мать его

    Anton sineok

      Здравствуйте!

      (я дилетант-одиночка - сразу говорю)

       

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

      есть рабочая формула:

       

      =(Count (DISTINCT{<EXTCODE= {'=sum({<DISH_RU= {$(vнаборблюд)}>} QUANTITY )>0'}>}  GLOBALIDENT))

       

      где $(vнаборблюд) - переменная в которой перечислен набор нужных блюд.

      GLOBALIDENT - уникальный номер чека

      EXTCODE - уникальный номер точки продаж

      DISH_RU - понятно, блюдо


      Эта формула корректно работает когда выделяю период - один месяц. (У нас разбивка по месяцам)

      Но если выделяю два и более месяцев - количество чеков считает не корректно, оно увеличивается сильно, т.е. видимо EXTCODE берется не в пределах месяца а за весь выделенный период! И в итоге критерий фильтрации нужных блюд не работает.

      ничего не смог придумать..




        • Re: Сет аналитикс мать его
          Stanislav Chernov

          добавьте переменные:

          varMinDate = Min(Дата)

          varMaxDate = Max(Дата)

          И в сет анализе используйте доп. фильтрацию по датам, разбил по строкам для удобства чтения:


          =(Count

          (DISTINCT

          {<

          EXTCODE= {'=sum({<DISH_RU= {$(vнаборблюд)}>} QUANTITY )>0'}

          , Дата = {'>=$(varMinDate)<=$(varMaxDate)'}

          >} 

          GLOBALIDENT))

            • Re: Сет аналитикс мать его
              Anton sineok

              Спасибо за ответ!

              Но не прокатило..

              даже если подставить упрощенное выражение в котором явно указать какой месяц надо выбрать, все равно показывает абсолютную неадекватную цифру:

               

              =(Count (DISTINCT{<EXTCODE= {'=sum({<DISH_RU= {$(vнаборблюд)}>} QUANTITY )>0'}, PAYBINDINGS_Month= {'Jan'}>}  GLOBALIDENT))

            • Re: Сет аналитикс мать его
              Vladimir Kozlov

              Привет, если идёт разбивка по месяцам, может стоит поиграться с функцией Aggr? Пример 

              Aggr(Count (Distinct {Set} dimension), month)

              • Re: Сет аналитикс мать его
                Stanislav Chernov

                Мне кажется у вас проблема со структурой данных.

                У вас QV или QS ? Выложите скрином структуру.

                 

                Попробуйте такую формулу, что получится :

                =(Count (DISTINCT{< QUANTITY = {'>0'} }>}  GLOBALIDENT))

                  • Re: Сет аналитикс мать его
                    Anton sineok

                    У нас QV..

                    структура - да, туда лучше не смотреть))

                    а формула (Count (DISTINCT{< QUANTITY = {'>0'} >}  GLOBALIDENT) - работает корректно!

                    Снимок.JPG

                      • Re: Сет аналитикс мать его
                        Stanislav Chernov

                        Собственно я так и думал, у вас синтетические ключи созданы QlikView автоматически - они вам всю картину портят.

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

                         

                        И раз это QlikView - вы можете добавить альтернативное состояние, в котором будете выбирать нужный вам товар (который будет использоваться для фильтрации и расчетов) - но при этом у вас картинка в основном состоянии не изменится.

                         

                        Резюмирую:

                        Избавляйтесь от $syn ключей, и у вас должна сработать формула, ваша.

                        Clipboard01.jpg

                          • Re: Сет аналитикс мать его
                            Vladimir Kozlov

                            $syn - Огонь!))))

                            • Re: Сет аналитикс мать его
                              Anton sineok

                              Альтернативные состояния так же не работают..

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

                              "Вам необходимо от них избавится и сделать уникальные связи между таблицами, иначе вам не видать счастья в этом приложении."

                              Или иначе говоря - как делать уникальные связи между таблицами? У меня проблемы с терминологией..

                                • Re: Сет аналитикс мать его
                                  Stanislav Chernov

                                  Смотрите, есть две таблицы А и Б, которые имею такие поля:

                                  А:

                                  Дата

                                  Количество

                                  Товар

                                  Магазин

                                   

                                  Б:

                                  Дата

                                  Остаток

                                  Товар

                                  Магазин

                                   

                                  Если вы их загрузите то получите $Syn по полям: Дата, Товар и Магазин.

                                  Чтобы этого избежать, нужно сделать из этих полей единые "ключи", например так:

                                   

                                  А:

                                  Дата & '-' & Товар & '-' & Магазин as %Ключ1

                                  Количество

                                   

                                  Б:

                                  Дата & '-' & Товар & '-' & Магазин as %Ключ1

                                  Остаток

                                   

                                  Всё, от синтетики избавились.

                                    • Re: Сет аналитикс мать его
                                      Anton sineok

                                      Спасибо за человеческое разъяснение! Буду экспериментировать.

                                      • Re: Сет аналитикс мать его
                                        Anton sineok

                                        А можно еще вопросик??

                                        По такому принципу удалось ликвидировать один синтетический ключ. Но на этом примере получилось что у меня пропали поля Дата, Товар и Магазин, т.к. они слились в одно новое поле (системное)

                                        Что тогда делать если мне нужны данные например Дата? А их нет, получилось типа Дата-Товар-магазин.

                                        Получается невозможно избавиться от этих syn ключей?

                                          • Re: Сет аналитикс мать его
                                            Stanislav Chernov

                                            В продолжении примера выше,

                                            создает таблицу с ключами из одной таблицы, загружаем значения в другую таблицу из второй таблицы, объединяем - чтобы не было дублей.

                                            Таким образом, мы создаем таблицу, в которой есть ключи и все значения этих ключей. И у нас таблицы А и Б связаны через эту таблицу.

                                             

                                            NoConcatenate

                                            table_key:

                                            load

                                                 Дата

                                                 Товар

                                                 Магазин

                                                 , Дата & '-' & Товар & '-' & Магазин as %Ключ1

                                            resident А

                                             

                                            NoConcatenate

                                            tableC:

                                            load

                                                 Дата

                                                 Товар

                                                 Магазин

                                                 , Дата & '-' & Товар & '-' & Магазин as %Ключ1

                                            resident Б



                                            Concatenate(table_key)

                                            load *

                                            resident tableC

                                            where not exists (%Ключ1);


                                            drop table tableC;




                                            • Re: Сет аналитикс мать его
                                              Andrey Khoronenko

                                              Добрый день, Антон!

                                               

                                              Как вариант, может попробовать организовать выгрузку только необходимых для Вашей задачи данных в новую чистую базу QV, чем городить огород с "перелопачиванием" существующей структуры данных? Представляется, что для решения данной задачи понадобится выгрузка и связывание нескольких таблиц из хранилища данных. По идее и время сэкономите, и нервы.

                                               

                                              С уважением,

                                              Андрей

                                                • Re: Сет аналитикс мать его
                                                  Anton sineok

                                                  Спасибо за идею!!! Может быть так и произойдет хотя сначала все таки помучаюсь, хотелось попробовать исправить часть  syn ключей в основном документе. Все таки им пользуются люди и он тормозит (по понятным причинам), и опыт по такому хитрому присоединению таблиц, не создавая вредных syn ключей - очень полезен.

                                                    • Re: Сет аналитикс мать его
                                                      Andrey Khoronenko

                                                      Я тоже предпочитаю применять составные ключи, созданные не автоматически QlikView Qlik Sence, а вручную. В идеале связь между таблицами должна идти по одному полю. В противном случае надо реализовывать составной ключ. Как это делается, хорошо описано в книге "QlikView 11 for Developers"(стр 101). Там же целый раздел посвящен описанию лучших практик по построение структуры связанных таблиц. Книга на английском, но если бегло не читаете, то Google-переводчик в помощь и в общем-то все вполне приемлемо :-) Если будет желание почитать  и проблемы с книгой, пишите в личку.