Динамический ApplyMap

Я использую 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!

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий

62 queries in 0,190 seconds
Website nonton bokep jepang