Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
Январь 22, 2019, 12:50:03 am

Автор Тема: Перенос часто используемого выражения в переменную  (Прочитано 354 раз)

Оффлайн Пати

  • Новичок
  • *
  • Сообщений: 6
  • Страна: ru
  • Рейтинг: +2/-0
    • Просмотр профиля
Коллеги, добрый вечер!
Есть выражение, которое используется во многих объектах в QlikView. И при необходимости внесения изменений, приходится это делать во всех объектах.
Прошу подсказать, как можно сделать так, чтоб можно было упростить этот процесс, чтоб можно было внеся в одном объекте изменения и оно применялось ко всем, где используется данное выражение.
Пробовала вынести в переменную, но там он выдаёт фиксированный результат, не позволяет привязываться к другим переменным в расчёте

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1247
  • Страна: ru
  • Рейтинг: +134/-0
    • Просмотр профиля
Привет.
На эту тему в официальном сообществе есть примеры.
Мне больше нравится вариант с формулами в таблице *.xls
Учтите, что при присвоении формулы переменной следует использовать SET !
Использование простое, через =$(vExpression)

Оффлайн Hugo

  • Новичок
  • *
  • Сообщений: 22
  • Страна: lv
  • Рейтинг: +1/-0
    • Просмотр профиля
Пример из cookbook:
/*
"User Defined Functions" may be created in QV in two ways.

The first method is to define the function body in a QV variable. The function body is a single QV expression and may include parameters.
The function is called in the script using the dollar-sign expression syntax. Functions defined this way may be called from both script and chart expressions.
See "Dollar-Sign Expansions" in the QV Ref Guide for more information.

The second method is to define the function in the Macro module. The function defintion and body are VBScript statements and may use
any VBS statements or functions allowed in QV macros. Functions defined this way may only be called from script. This example does not demonstrate the
macro method. For a macro example, see the QV Cookbook example "Regular Expression pattern matching function".
*/

/*
I have a complex expression. For neatness and reusability, I'll define the expression in a QV variable
named "calculateDiscountedPrice". Note that my defintion contains parameter refererences. $1 is the first parm, $2 the second and so on.
The function expects a Price ($1) and a Customer ($2).
Comments may be included in the function definition. They will not be stored in the variable.
*/
SET calculateDiscountedPrice=
if($1 > 100 ,$1 * 0.75 // Anything over 100 get 25% discount   
,if($2 = 'A', $1 * 0.90  // Customer A gets 10% discount
,if($2 = 'B', $1 * 0.95  // Customer B gets 5% discount
, $1                     // Otherwise, no discount
)))
;

/*
I'll use the function in my LOAD statement to calculate the DiscountedPrice field.
Using the $() syntax causes the expression to be evaluated, much as the "=" does in a chart expression.
*/
sales:
LOAD *, $(calculateDiscountedPrice(Price, Customer)) as DiscountedPrice
;
LOAD * INLINE [
Customer, Price
A, 9.50
A, 10.0
B, 11.0
B, 12.0
C, 13.10
D, 120.0
]
;

Неофициальный форум пользователей QlikView & Qlik Sense