9 Replies Latest reply: Aug 22, 2017 4:01 AM by Vladimir Kozlov RSS

    Схема "Звезда"

    Vladimir Kozlov

      Коллеги, привет

      Подскажите с очередной задачкой, кто сталкивался:

      Пусть имеем простую модель:

      Где 1 - Таблица фактов. 2 - справочник

      Содержание:

      1:

      2:

      Требуется посчитать табличку, с выражениями

      1. сумма продаж

      2. количество менеджеров, которые сработали

      3. общее количество менеджеров в базе

       

      с 1 и 2 - все понятно

       

      Вопрос по поводу 3. Как запихать сюда общее количество менеджеров в базе (Результат для Москвы = 2, для Омска = 1), которые присутствуют в справочнике, но не связаны с таблицей фактов, т.к. по ним нет документов продаж?

       

      Спасибо

        • Re: Схема "Звезда"
          Stanislav Chernov

          Тут, кажется всё просто:

          count (TOTAL Manager)

          или через Анализ множеств :

          count ( {<Sales= >} Manager) или count ( {<Sales= , Region=>} Manager)

          • Re: Схема "Звезда"
            Stanislav Chernov

            По вашему п.2 - а почему не написать просто: count (Manager) ? Вместо IF в COUNT'e ?

             

            И вообще структура у вас странная....

             

            Если у вас таблица 1 содержит продажи, а таблица 2 содержит все связи с Менеджеров и Регионов то сделайте синтетический ключ:

             

            1:

            Load

                 Sales

                 , Manager & '-' & ManagerRegion as %Key1

            From ....;

             

            2:

            Load

                 Manager

                 , Region

                 , Manager & '-' & Region as %Key1

            from .... ;

             

            таким образом у вас менеджеры и регионы - будут в одной таблице, а в другой у вас будут только продажи и связаны они будут по ключу : %Key1

             

            И ваши формулы будут такие:

            1. sum(Sales)

            2. count (Manager) ... если нужно различные то  count (distinct Manager)

            3. count (TOTAL Manager) или count (TOTAL {<%Key1 = >} Manager )

             

            Вроде всё..

              • Re: Схема "Звезда"
                Vladimir Kozlov

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

                • Re: Схема "Звезда"
                  Vladimir Kozlov

                  Через IF пошел, для того, чтобы связать справочник с фактами по региону, чтобы не было такого

                    • Re: Схема "Звезда"
                      Stanislav Chernov

                      Можно ведь скрыть Null() записи : img-2017-08-18-23-31-57.png / Облако Mail.Ru

                       

                      А покажите всю структуру ?

                        • Re: Схема "Звезда"
                          Vladimir Kozlov

                          Боевую выкладывать не буду. Она очень емкая. Усложню текущую схему, добавив дополнительный справочник

                          Во вложении qvw

                          Схема:

                          В центре таблица с транзакциями и ссылками на справочники

                          Хотелось бы в этой модели одним отчетом посчитать продажи и отобразить общее количество менеджеров и клиентов базы (к примеру, чтобы посчитать среднюю выручку на клиента/менеджера в регионе = Общая выручка/Количество клиентов/менеджеров в базе; при этом некоторые клиенты могут не отработать за указанный период, однако должны быть учтены)

                            • Re: Схема "Звезда"
                              Stanislav Chernov

                              Объедините всё в одну таблицу, получится то что нужно ?

                              А еще, на всякий случай, для подсчёта Null  можно использовать функцию: NullCount - chart function ‒ QlikView

                              Clipboard02.jpg

                                • Re: Схема "Звезда"
                                  Vladimir Kozlov

                                  Станислав, спасибо!

                                  Натолкнул на отличную идею с каунтом:

                                  Посчитать на уровне скрипта константу для каждого справочника

                                  Например для клиентов добавляем в скрипт:

                                  C:

                                  LOAD Count(Client) as TotalRegionClient,

                                       ClientRegion

                                  Resident Clients Group by ClientRegion;

                                   

                                  На выходе получаем таблицу с константой

                                   

                                  Вариант с объединением тоже хорош и будет работать