Я использую ApplyMap в скриптах QlikView. Это один из лучших способов получать данные из таблицы поиска — особенно при помощи устройства, которое устанавливает значение по умолчанию.
Я использую его так часто, что иногда забываю об одной его весьма полезной функции — имя таблицы отображается как текстовое значение. Обычно это означает, что я передаю текстовую строку, но это также может означать, что я могу передать динамически рассчитанную строку – используйте другую карту для других значений.
В приведенном ниже сценарии, у нас есть таблица валют с одним значением в месяц. Часто такую таблицу соединяют с таблицей фактов, а затем заново загружают для расчета базового значения (или даже этого не делают и рассчитывают в конце).
Вы могли бы, конечно, просто объединить несколько полей, чтобы создать ключ для отображения, но я предпочитаю другой и, как мне кажется, более изящный способ.
В этом примере, я загрузил таблицу валют в несколько множественных таблиц отображения и затем динамически выбираю таблицу сопоставления во время загрузке таблицы фактов:
Monthly_Exchange_Rates:
Load
Currency,
Num(Date#(Month, 'YYYY-MM')) As Month,
Rate
Inline [
Currency, Month, Rate
EUR, 2013-05, 1
EUR, 2013-07, 1
EUR, 2013-06, 1
EUR, 2013-09, 1
EUR, 2013-08, 1
GBP, 2013-09, 0.842711
GBP, 2013-05, 0.848677
GBP, 2013-06, 0.851957
GBP, 2013-08, 0.858893
GBP, 2013-07, 0.862144
USD, 2013-05, 1.297799
USD, 2013-07, 1.307939
USD, 2013-06, 1.317866
USD, 2013-09, 1.323692
USD, 2013-08, 1.331518
CNY, 2013-05, 7.972392
CNY, 2013-07, 8.027845
CNY, 2013-06, 8.088211
CNY, 2013-09, 8.100795
CNY, 2013-08, 8.151601
];
Temp_Curr:
Load Distinct Currency as Currency_List
Resident Monthly_Exchange_Rates;
For i=0 to FieldValueCount('Currency_List')-1
Let vCurr=Peek('Currency_List', $(i), 'Temp_Curr');
Exch_Rate_Map_$(vCurr):
Mapping
Load Month, Rate
Resident Monthly_Exchange_Rates
Where Currency = '$(vCurr)';
Next
Drop Tables Temp_Curr, Monthly_Exchange_Rates;
SalesTable:
Load
*,
Sales_Local/ExRate as Sales_Base;
Load
Date,
Country,
Currency,
Sales as Sales_Local,
ApplyMap(
'Exch_Rate_Map_' & Currency,
Floor(MonthStart(Date)),
1) as ExRate
Inline [
Date, Country, Currency, Sales 2013-05-02, Ireland, EUR, 123 2013-05-13, Ireland, EUR, 322 2013-06-11, France, EUR, 343 2013-07-02, USA, USD, 343 2013-08-12, UK, GBP, 233 2013-08-30, China, CNY, 223 2013-09-01, UK, GBP, 543 2013-09-24, USA, USD, 412 ];
Такой сценарий случается достаточно часто, поэтому я надеюсь, что статья покажется Вам полезной.
Найти решение у бизнес-партнера QlikTech (QlikView) в России.
Форум разработчиков QlikView и Qlik Sense. Получите ответы на все вопросы по QlikView и Qlik Sense!
RSS
30 октября 2015
gromych
Опубликовано в рубрике