5 Replies Latest reply: Apr 20, 2015 6:08 AM by Anna Klimkova RSS

    Подсчитать кол-во выданных карт до даты

    Aleksandr Melnikov

      Добрый день.

      Такая ситуация. Есть таблица карточек лояльных клиентов, в ней есть поле ДатаВыдачи. Нужно сделать график на котором отображается кол-во выданных карточек до определенной даты. В качестве измерения выбрана группа из полей таблицы Календарь.

      Эти две таблицы связаны через таблицу чеков.

      схема.png

       

      Теперь о выражении.

      Я составил следующее выражение:

      = COUNT({1< ДатаВыдачи# = {" <=$(=MAX(Дата#))"}>}DISTINCT КартыАЙДИ)

      Если его прописать в обычном текстовом объекте, то делая выборку полей таблицы календарь все нормально - оно как и положено подсчитывает количество выданных карт до выбранной даты/месяца/года и т.п.

      Но вот когда я его вставляю в график, то получаю совсем не то что нужно. Может это выражение не подходит для графика?

       

      Буду очень благодарен за любую помощь.

       

        • Re: Подсчитать кол-во выданных карт до даты
          Sergey Polekhin

          А что именно "не то что нужно": по какому измерению строите график и что не устраивает?

           

          Помимо ответа на вопрос выше, рекомендую убрать лишние пробелы (не могу проверить их наличие в реальной формуле, но если формулу в вопрос выше вы вставляли как copy/paste, то они там явно есть) в строке поиска в модификаторе, заключенной в двойные кавычки.

            • Re: Подсчитать кол-во выданных карт до даты
              Aleksandr Melnikov

              1) Пробела в выражении нет, это я в сообщении добавил почему-то.

              2) График строю по группе в которую входит 3 полей "Дата, МесяцГод, Год". График находится в отдельном состоянии (если я правильно применил термин), т.е. никакие выборки на него не влияют

              3) Если я правильно понял, то график выводит кол-во карт по которым совершались покупки в выбранном периоде. Выражение =COUNT(DISTINCT КартыАЙДИ) выводит такие же результаты.

                • Re: Подсчитать кол-во выданных карт до даты
                  Sergey Polekhin

                  По 1) и 2) - ок.

                  По 3) - диаграмма (график или таблица) всегда рассчитывает заданное выражение по отношению к КАЖДОМУ элементу измерения.

                   

                  Поэтому описывая выражения в объектах нужно всегда задумываться о контексте вычислений. Например:

                  • Текстовый объект сам по себе не создает дополнительного контекста - в нем измерения отсутствуют, поэтому расчет всегда ведется по всему множеству данных. И при необходимости изменения множества данных по которым ведется расчет, вы просто определяете его модификатором множества.
                  • Любая диаграмма (таблица или график), как правило, содержит некоторые измерения. Поэтому вычисления выражений всегда проводятся в контексте заданных измерений. Т.е. на первом этапе в заданном выражении, на основе указанных в нем модификаторов множества, строится множество значений, для которых будет рассчитываться выражение. На втором этапе это выражение рассчитывается в контексте каждого набора измерений, заданного в диаграмме. На третьем этапе полученная таблица значений - визуализируется.

                   

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

                  • Re: Подсчитать кол-во выданных карт до даты
                    Anna Klimkova

                     

                     

                    Поле КартыАЙДИ у вас является ключом и присутствует в нескольких таблицах.

                     

                    QlikView не должно догадываться из какой таблицы вы хотите подсчитать количество карт.

                    Поэтому хорошим тоном считается не использовать ключи в формулах (они нужны для связи таблиц), а создавать в скрипте отдельные поля для расчетов,

                     

                    например: в таблице Дисконтные карты добавьте строку

                     

                    КартыАЙДИ as КартыАЙДИВыдача,

                     

                    Для диаграммы по количеству выданных карт по месяцам будет достаточно формулы

                     

                    Count(КартыАЙДИВыдача).

                     

                    Ограничить по дате можно не только в выражении, но и сделав вычиcляемое измерение с условием if().

                     

                     

                    Если бы у нас была только таблица Чеки и надо было найти количество новых клиентов (карт) за каждый месяц, то тогда лучше использовать фунцию aggr():

                     

                    sum(aggr(if(monthstart(min(Total  <КартыАЙДИ> Дата))=МесГод,1,0), КартыАЙДИ,МесГод))