2014-08-25 3 views
1

Я пытаюсь получить мой скрипт для перезагрузки в QlikView без успеха. Я добавил новое поле (с именем Litres) в мои последние созданные QVD-файлы. Тем не менее, у моих старых QVD-файлов нет этого поля Litres, поэтому он вызывает ошибку при ошибке «Поле не найден».QlikView «поле не найдено» обходное решение для добавления нового поля

Я пытаюсь сделать следующее:

  • Поиск по всем полям в QVD
  • Если Litres поле существует, а затем загрузить данные в QlikView.
  • Если нет, создайте поле со значением нуля и продолжите.

Вышеупомянутый не должен приводить к ошибке.

Мой текущий сценарий ниже:

/* get all sales csvs */ 
sales: 
load 2014 as Year 
AutoGenerate 0; 

set FilePath = ..\..\SourceData\qv-sales*.csv; 

for each File in filelist('$(FilePath)') 

/* load qvd file if it is newer than csv file */ 


    temptable1: 
    first 1 LOAD   
    * 
    FROM $(File) 
    (txt, codepage is 1252, embedded labels, delimiter is ',', msq); 

    IF FieldNumber('Litres' , 'temptable1') <> null then 

    SET "Litres"; 
    SET "Litres LY" ; 
    SET dyncode2 = P-Value; 
    SET dyncode3 = O-P-Value; 
    SET dyncode4 = P-Value LY; 
    SET dyncode5 = O-P-Value LY; 
    SET dyncode6 = P-Qty; 
    SET dyncode7 = P-O-Qty; 
    SET dyncode8 = P-Qty LY; 
    SET dyncode9 = P-O-Qty LY; 




ENDIF; 



DROP TABLE temptable1; 


    let qvdFile = replace('$(File)','csv','qvd'); 

    if (QvdCreateTime('$(qvdFile)') >= FileTime('$(File)')) then 

     /* load qvd file if it is newer than csv file */ 
     sales: 
     Concatenate (sales) load 

     "GP", 
     "O-GP", 
     "Litres", 
     "Litres LY", 
     "GP LY", 
     "O-GP LY", 
     $(dyncode2) as "P-Value", 
     $(dyncode3) as "O-P-Value", 
     $(dyncode4) as "P-Value LY", 
     $(dyncode5) as "O-P-Value LY", 
     $(dyncode6) as "P-Qty", 
     $(dyncode7) as "P-O-Qty", 
     $(dyncode8) as "P-Qty LY", 
     $(dyncode9) as "P-O-Qty LY" from $(qvdFile) (qvd); 


    else 

     /* create temp store key1 & key2 are manually handled synthetic keys */ 
     /* Dummy field is to prevent autoconcatenation problems.    */ 
     temptable: 
     noconcatenate Load 

     "GP", 
     "O-GP", 
     "Litres" , 
     "Litres LY", 
     "GP LY", 
     "O-GP LY", 
     $(dyncode2) as "P-Value", 
     $(dyncode3) as "O-P-Value", 
     $(dyncode4) as "P-Value LY", 
     $(dyncode5) as "O-P-Value LY", 
     $(dyncode6) as "P-Qty", 
     $(dyncode7) as "P-O-Qty", 
     $(dyncode8) as "P-Qty LY", 
     $(dyncode9) as "P-O-Qty LY", 

     autonumber(1) as dummy1 
     FROM $(File) (ansi, txt, delimiter is ',', embedded labels); 

     /* create qvd file from temp table */ 
     if (ScriptErrorCount = 0) then 
      Store temptable into $(qvdFile); 
     endif 

     sales: 
     concatenate("sales") load 

     "Litres", 
     "Litres LY", 
     "GP LY", 
     "O-GP LY" 
     "P-Value", 
     "O-P-Value", 
     "P-Value LY", 
     "O-P-Value LY", 
     "P-Qty", 
     "P-O-Qty", 
     "P-Qty LY", 
     "P-O-Qty LY" 
     resident temptable; 

     /* drop temp table */ 

      DROP TABLE temptable; 

    endif 

next File 

Заранее спасибо!

ответ

1

Вы можете использовать функцию FieldNumber, чтобы определить, существует ли поле в таблице. Например, FieldNumber('MyField', 'MyTable') возвращает позицию MyField в пределах MyTable. Если MyField не существует в MyTable, функция возвращает ноль.

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

Я адаптировал сценарий и вставил, если для этой цели:

/* get all sales csvs */ 
sales: 
load 2014 as Year 
AutoGenerate 0; 

set FilePath = ..\..\SourceData\qv-sales*.csv; 

for each File in filelist('$(FilePath)') 

    /* load qvd file if it is newer than csv file */ 
    temptable1: 
    first 1 LOAD   
     * 
    FROM $(File) 
    (txt, codepage is 1252, embedded labels, delimiter is ',', msq); 

    IF FieldNumber('Litres' , 'temptable1') <> null then 
     SET "Litres"; 
     SET "Litres LY" ; 
     SET dyncode2 = P-Value; 
     SET dyncode3 = O-P-Value; 
     SET dyncode4 = P-Value LY; 
     SET dyncode5 = O-P-Value LY; 
     SET dyncode6 = P-Qty; 
     SET dyncode7 = P-O-Qty; 
     SET dyncode8 = P-Qty LY; 
     SET dyncode9 = P-O-Qty LY; 
    ENDIF 

DROP TABLE temptable1; 

let qvdFile = replace('$(File)','csv','qvd'); 

if (QvdCreateTime('$(qvdFile)') >= FileTime('$(File)')) then 

    /* load qvd file if it is newer than csv file */ 
    fieldcheck: 
    FIRST 1 
    NOCONCATENATE 
    LOAD 
     * 
    FROM $(qvdFile) (qvd); 

    if FieldNumber('Litres','fieldcheck') = 0 then 

     drop table fieldcheck; 

     sales: 
     Concatenate (sales) load 
     "GP", 
     "O-GP", 
     0 as "Litres", 
     0 as "Litres LY", 
     "GP LY", 
     "O-GP LY", 
     $(dyncode2) as "P-Value", 
     $(dyncode3) as "O-P-Value", 
     $(dyncode4) as "P-Value LY", 
     $(dyncode5) as "O-P-Value LY", 
     $(dyncode6) as "P-Qty", 
     $(dyncode7) as "P-O-Qty", 
     $(dyncode8) as "P-Qty LY", 
     $(dyncode9) as "P-O-Qty LY" from $(qvdFile) (qvd); 

    else 

     drop table fieldcheck; 

     sales: 
     Concatenate (sales) load 
     "GP", 
     "O-GP", 
     "Litres", 
     "Litres LY", 
     "GP LY", 
     "O-GP LY", 
     $(dyncode2) as "P-Value", 
     $(dyncode3) as "O-P-Value", 
     $(dyncode4) as "P-Value LY", 
     $(dyncode5) as "O-P-Value LY", 
     $(dyncode6) as "P-Qty", 
     $(dyncode7) as "P-O-Qty", 
     $(dyncode8) as "P-Qty LY", 
     $(dyncode9) as "P-O-Qty LY" from $(qvdFile) (qvd); 

    endif 

else 
     /* create temp store key1 & key2 are manually handled synthetic keys */ 
     /* Dummy field is to prevent autoconcatenation problems.    */ 
     temptable: 
     noconcatenate Load 

     "GP", 
     "O-GP", 
     "Litres" , 
     "Litres LY", 
     "GP LY", 
     "O-GP LY", 
     $(dyncode2) as "P-Value", 
     $(dyncode3) as "O-P-Value", 
     $(dyncode4) as "P-Value LY", 
     $(dyncode5) as "O-P-Value LY", 
     $(dyncode6) as "P-Qty", 
     $(dyncode7) as "P-O-Qty", 
     $(dyncode8) as "P-Qty LY", 
     $(dyncode9) as "P-O-Qty LY", 

     autonumber(1) as dummy1 
     FROM $(File) (ansi, txt, delimiter is ',', embedded labels); 

     /* create qvd file from temp table */ 
     if (ScriptErrorCount = 0) then 
      Store temptable into $(qvdFile); 
     endif 

     sales: 
     concatenate("sales") load 

     "Litres", 
     "Litres LY", 
     "GP LY", 
     "O-GP LY" 
     "P-Value", 
     "O-P-Value", 
     "P-Value LY", 
     "O-P-Value LY", 
     "P-Qty", 
     "P-O-Qty", 
     "P-Qty LY", 
     "P-O-Qty LY" 
     resident temptable; 

     /* drop temp table */ 

      DROP TABLE temptable; 

    endif 

next File 

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

  • Нет связанных вопросов^_^