28 сентября 2009 г.

Знак “=” в Редакторе Выражений

Коллеги, приветствую Вас.
Предлагаю Вашему вниманию очередной пост, который, на мой взгляд, может помочь в понимании некоторых проблем, возникающих на начальном этапе работы с QlikView.
Поговорим сегодня о редакторе выражений и некоторых нюансах построения этих самых выражений, точнее сказать об одном определенном нюансе, а именно об использовании знака “=” в начале Вашего выражения(аналогично тому, как это реализовано в MS Excel).

Предшествующий основному выражению знак “=” говорит QlikView о Вашем желании предварительно вычислить выражение, которое описано после него и вернуть результат вычисления.
Вообще, использование знака “=” в QlikView может у Вас вызвать некоторую путаницу в понимании того, как он работает и зачем он собственно нужен. Поэтому я сейчас попытаюсь объяснить Вам некоторые нюансы работы при использовании этого знака в редакторе выражений на различных объектах документа QlikView.
Во-первых, при создании выражения в объекте Диаграмма Вам нет необходимости указывать перед каждым выражением знак “=”, т.к. подразумевается тот факт, что если уж Вы создаете выражение в диаграмме, то Вам собственно необходимо чтобы это выражение было вычислено.
Во-вторых, при работе с текстовыми объектами если Вам требуется вычисление какого-либо выражения, то Вы обязаны использовать знак “=” в начале него. В противном случае, Вы просто получите в текстовом объекте свою формулу в том виде, в котором Вы ее ввели в редакторе выражений. Т.е. если в текстовом объекте написать следующее выражение: “Sum(Amount)”, то после закрытия диалога свойств объекта Вы получите текстовый объект, в котором отобразится строка: “Sum(Amount)”. Однако, как только Вы добавите предшествующий выражению знак равенства: “=Sum(Amount)”, QlikView сделает вычисление формулы(с учетом текущий выборки в документе), стоящей после знака “=” и вернет результат этого вычисления в текстовый объект.
В-третьих, ситуация когда Вам необходимо использовать выражение в качестве значения переменной. Этот случай, на мой взгляд, представляет наибольший интерес, поэтому давайте рассмотрим его более подробно.
Представим что у Вас имеется некоторый набор данных по продажам в разрезе года. Допустим Вы создали 2 переменные vSales со значением “sum(Amount)” и vTotal со значение “=sum(Amount)”. Теперь Вам необходимо создать диаграмму, которая бы показала сумму продаж в разрезе года. Для этого создайте новый объект типа Диаграмма, тип Диаграммы выберите, например, Прямая таблица (straight table), в качестве измерения укажите поле год, и на закладке выражений создайте 2 выражения: $(vSales) и второе – $(vTotal). В итоге у Вас получится в первой колонке сумма продаж в разрезе года, а во второй колонке во всех строках таблицы Вы увидите одно единственное число – общую сумму продаж.
Это происходит потому что значение первой переменной vSales представляет из себя по сути обычный текст, который помещается в выражение диаграммы, в результате чего происходит расчет этого выражения в разрезе каждого отдельного года. А во второй переменной vTotal мы использовали знак равенства перед этим же самым текстом, поэтому QlikView, перед тем как вставить значение переменной vTotal в выражение диаграммы, предварительно производит расчет этого выражения на уровне документа и уже результат этого расчета помещает в выражение диаграммы. В итоге Вы и получаете одинаковую цифру во всех строках таблицы.
Ну и последний момент, о котором я хотел бы рассказать сегодня, это случай, когда знак “=” используется внутри конструкции $(). По сути, достичь результата описанного в ситуации с использованием переменной vTotal, можно и без использования этой самой переменной, т.е. непосредственно внутри выражения диаграммы. Для этого достаточно определить выражение следующего вида: $(=sum(Amount)). В этом случае, формула sum(Amount) предварительно рассчитается на уровне документа и уже результат этого вычисления будет возвращен в выражение диаграммы.
Вот и все на сегодня, коллеги. Надеюсь данный пост был Вам интересен и я не зря потратил на него свое время :).

4 комментария:

  1. Добрый день!
    Возник такой вопрос по использованию знака '='
    Есть таблица, в таблице 2 поля:
    PERS, ID

    Иванов, 10
    Петров, 20
    Сидоров, 30.

    Необходимо в текстовый объект вытащить макимальное значение соответствующего поля

    Если использовать выражение
    =MaxString(PERS), в текстовом блоке будет значение - Сидоров
    Если использовать выражение
    =MaxString(ID), в текстовом блоке будет значение - 30

    Если использовать выражение
    =$(=MaxString(PERS)), в текстовом блоке будет значение - (пусто)
    При этом если использовать выражение
    =$(=MaxString(ID))в текстовом блоке будет значение - 30

    Почему так происходит, при использовании $ в одном случае считает, в другом нет???

    Заранее спасибо за ответ.

    ОтветитьУдалить
  2. числовой пример в QV -приложении на эту же тему и блог с картинками можно найти тут - http://www.anton-pribora.ru/articles/mysql/mysql-join

    ОтветитьУдалить
  3. Короче - сделал все как в примере...

    Но .. vTotal не хочет в выражение запихиваться через $ - ругается на мусор... а vSales через $ нормально входит...

    Вывод: в текущей версии кликвью если в переменной формула указана без знака " = ", то в выражениях на всяких диаграммах используем "$(vSales)"..а если со знаком " = " формулу в переменной написали, то в выражении используем "=vTotal" без всяких знаков бакса... Автор - проверь, пожалуйста сейчас данный пример.. может тогда просто в старой версии так работало... но в версии 11 у меня работает не так.
    И напиши пожалуйста результат
    Заранее спасибо..

    ОтветитьУдалить
    Ответы
    1. Владимир, приветствую.
      проверил на 11.20.12904 (QV 11.20 SR 12). Все работает как описано в посте. по ссылке можно найти пример qvw: https://dropmefiles.com/t9HE9
      Если будут вопросы - пишите. попробуем разобраться вместе.

      Удалить