2015-06-30 7 views
1

мне нужно создать столбец «Отклонение» в QlikView:Дисперсия столбец в QlikView

   2013   2014  Variance 
Measure 1 100   110  10% 
Measure 2 105   100  -4.8% 
... 

Может ли это быть сделано в QlikView с только один столбец «Рассчитанный размер», который говорит что-то вроде:

[Value for Column2]/[Value for Column 1] - 1 

Чтобы он работал для любых новых мер, которые я добавляю в таблицу, и независимо от того, что такое столбец 1 и столбец 2?

РЕДАКТИРОВАТЬ: Образец данных:

Year  Measure1 Measure2 
2012  9750  197 
2013  10000  200 
2014  11000  210 
2015  11500  215 

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

ответ

3

Вы можете сделать это с помощью функции Column().

Число ссылается на столбец «Выражение» - первое выражение - №1 и т. Д. Графические столбцы не учитываются.

Альтернатива, которая нечувствительна к положению столбца, вы можете использовать метки столбцов в выражении. Предположим, что выражения с метками «Sales» & «Margin». Выражение дисперсии может быть записано как:

[Margin]/[Sales] 
+0

Если не поняли, что вы предлагаете .. Это действительно не работает для меня .. Что вы предлагаете будет работать, если у меня есть 2 выражения в виде столбцов, и мне нужен расчет между ними. Таким образом, вы добавляете новое «выражение» в результате вычисления между двумя другими выражениями. Я хочу добавить новое значение измерения, которое является вычислением между двумя другими значениями измерения (независимо от значений измерения) для всех выражений в таблице. – Adnan

+0

Какой механизм вы используете для изменения размеров? Это определит, как вы можете это сделать, но я не вижу никакой пользы в том, чтобы иметь дисперсию как измерение независимо от того, какой метод вы используете для изменения измерений. Дайте нам знать, как и я расскажу вам, как –

0

Я на 99% уверен, что для этого нет встроенной функции.

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

Я определил 2 рассчитанных измерения как переменные Year1 и Year2, которые я изменяю через поле ввода. Тогда простой расчетный размер =[$(Year2)]-[$(Year1)] дает мне новое измерение дисперсий.

Variable Dimensions

Это предполагает Меру является то, что исходит из данных, что-то вроде этого, и теперь вы просто хотите, чтобы отобразить его на различные годы. Я не думал, что делать, если все меры являются выражениями.

Table of Results

+0

Хм .. Так это '= [$ (Year2)] - [$ (Year1)]' новое вычисляемое измерение? В вашем примере, 2013 и 2014 и т. Д. Отдельные размеры? По моим данным, годы являются значениями в одном измерении. поэтому мне нужно новое вычисляемое измерение * значение *, которое работает с двумя другими значениями (в этом случае 2013 и 2014). – Adnan

+0

Да, это новое измерение, и да каждый год это собственное измерение в моем примере. Можете ли вы дать нам примерные данные и ожидаемый результат для работы? Потому что мне кажется, что вы очень сильно пытаетесь воспроизвести в измерениях, которые QlikView делает естественно в выражениях. Но, очевидно, я не знаю, каковы ваши точные требования. –

+0

Я добавил образцы данных как редактирование на мой вопрос. Спасибо за вашу помощь! – Adnan

0

Вот как сделать это с помощью переменных и выражений. Это создаст 2 новых столбца, которые будут выглядеть как новое измерение, но на самом деле будут определяться использованием оператора if().

Первый шаг в скрипте нам необходимо создать измерение, в котором есть Меры. это не должно связываться ни с одним из столбцов, уже содержащихся в данных. (UDR означает User Defined Report). двойное просто позволяет нам определить порядок сортировки, который не является алфавитным.

UDR: 
load dual(UDR,Sort) as Rows inline [ 
UDR, Sort 
Measure1, 1 
Measure2, 2]; 

Результат должен быть примерно таким.

Ctrl+T

Следующий шаг создание 2 переменных для лет.

Я делаю это в скрипте, но вы можете использовать любой способ создания переменной.

set vMaxYear="=max(Year)"; 
set vMinYear="=min(Year)"; 

Теперь мы используем поле Строки как измерение.

И нам нужно создать выражение для максимального выбранного года. Обратите внимание, что первый if() проверяет, в каких строках UDR это выражение включено, и тогда предоставляется определение выражения для этой строки. Второй if() проверяет размер года на переменную vMaxYear, которая будет изменяться по мере выбора. Минимальный год - это то же самое, что и vMaxYear вместо vMinYear.

if(Rows='Measure1',sum(if(Year=vMaxYear,Measure1)), 
if(Rows='Measure2',sum(if(Year=vMaxYear,Measure2)))) 

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

column(1)/column(2) 

Для того, чтобы выражение метки динамического я просто добавить =vMinYear в этикетку.

В результате эта таблица будет соответствовать моим выборам в поле списка года.

2013 против 2014

2013 vs 2014

2014 против 2015

2014 vs 2015

Смежные вопросы