Загрузка с excel

Автор Allorn, 18 ноября 2019, 01:01:37

« назад - далее »

Allorn

Всем привет!
Такая ситуация - есть файлы Excel ( каждый месяцы новый файл) с которых идет загрузка данных. Есть необходимость добавить в новом месяце в новый Excel файл вкладку с другими данными.
Соответственно после добавления и изменения в скрипте загрузки возникает ошибка, что такого поля нет в предыдущих файлах. Добавлять в оставшиеся файлы эту вкладку не вариант.

Какие есть пути решения данной проблемы?

Uunit

Если есть возможность, опишите более детально задачу.

Из того что имеется описали.

Load
    *
FROM
[D:\Excel.xlsx]
(ooxml, embedded labels, table is TDSheet);

Таким образом клик не будет требовать какие то конкретные столбцы, а грузить всё что есть.

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

Allorn

В скрипте у меня есть периоды с и по какие даты выгружаются данные:

let vStartPeriod=Peek('StartDate',0,'ПериодыПланов');
let vFinishPeriod=Peek('FinishDate',0,'ПериодыПланов');

Потом идет , к примеру, скрипт такого формата:

let DateInc=vStartPeriod;

do
   let PeriodName = Year(DateInc)&num(Month(DateInc),'00');
ПланНоменклатура:
CrossTable(ДатаТ,ПланНоменклатура,1)
LOAD *
FROM
C:\Users\FF\Desktop\СКЮ\$(PeriodName).xlsx
(ooxml, embedded labels, table is Лист1);

*это 1 вкладка Excel файла. Следом идут еще примерно 5 вкладок*
*Я их совмещаю и формирую QVD файл*

store ПланНоменклатура1 into C:\QlikView\Base\SKU\SKU$(PeriodName).qvd (qvd);
drop Table ПланНоменклатура1;

let  DateInc=AddMonths(DateInc,1);
   
loop while DateInc<=vFinishPeriod;

Тоесть идет резка по месяцам. Допустим 20 Excel файлов и , соответственно, 20 qvd файлов по 1 на каждый месяц.
Допустим в новом месяце в новом Excel файле мне надо добавить поле...нуу...пусть будет "прибыль".
Я добавляю его в этот скрипт загрузки и возникает ошибка, что в файлах за предыдущие месяцы такого поля нету.



Uunit

Если в QVD нет лишних данных, попробуйте загрузить
Load
    *
FROM
[C:\QlikView\Base\SKU\*.qvd]
(qvd);
Ругаться на недостающие данные точно не будет.

Allorn

Я сейчас именно про Excel. Вот полный скрипт. Если сюда добавить поле, которого нету в предыдущих Excel Файлах скрипт не сработает. Вопрос - каким образом сделать так, что бы он сработал и не нужно было добавлять это поле или вкладку в предыдущие Excel файлы.

let DateInc=vStartPeriod;

do
   let PeriodName = Year(DateInc)&num(Month(DateInc),'00');
   
   ПланТрафикаМагазины:
   CrossTable(ДатаТрафика, ПланТрафика, 2)
   LOAD *
   FROM $(vPathPlansXLS)\$(vType)\$(PeriodName).xlsx
   (ooxml, embedded labels, table is ТрафикМагазины);
   drop Field Магазин;

   ПланВыручкиМагазины:
   CrossTable(ДатаТ, ПланВыручки, 2)
   LOAD *
   FROM $(vPathPlansXLS)\$(vType)\$(PeriodName).xlsx
   (ooxml, embedded labels, table is ВыручкаМагазины);
   
   ПланТранзакцийМагазины:
   CrossTable(ДатаТр, ПланТранзакций, 2)
   LOAD *
   FROM $(vPathPlansXLS)\$(vType)\$(PeriodName).xlsx
   (ooxml, embedded labels, table is ПланТранзакций);
   
   drop Field Магазин;

   ПланКатегории:
   CrossTable(ДатаТ, ПланКатегории, 2)
   LOAD *
   FROM $(vPathPlansXLS)\$(vType)\$(PeriodName).xlsx
   (ooxml, embedded labels, table is ВыручкаКатегории);
   
   drop Field Категория;
   
   left join (ПланКатегории)
   load
   ДатаТ,
   sum(ПланКатегории) as ПланКатегорииИтого
   Resident ПланКатегории
   group by ДатаТ;
   
   ПланДоходности:
   CrossTable(ДатаТ, Доходность, 1)
   LOAD *
   FROM $(vPathPlansXLS)\$(vType)\$(PeriodName).xlsx
   (ooxml, embedded labels, table is ПлановаяМаржинальность);
   

   
   left Join(ПланКатегории)
   load
   ДатаТ,
   Подкатегория,
   sum(Доходность) as Доходность
   Resident ПланДоходности
   Group by ДатаТ,Подкатегория;
   drop Table ПланДоходности;
   
   left join (ПланВыручкиМагазины)
   load
      ДатаТ,
      Подкатегория,
      Доходность,
      ПланКатегории,
      ПланКатегорииИтого
   Resident ПланКатегории;
   
   drop table ПланКатегории;
   
   NoConcatenate
   План:
   load   
      text(КодМагазина) as КодМагазина,
      Подкатегория,
      Date(num#(ДатаТ)) as Дата,
      ПланВыручки*ПланКатегории/ПланКатегорииИтого as ПланВыручки,
      ПланВыручки*ПланКатегории/ПланКатегорииИтого*Доходность as ПланДохода
   Resident ПланВыручкиМагазины;
   
   drop table ПланВыручкиМагазины;

   Concatenate (План)
   load   
      text(КодМагазина) as КодМагазина,
      Date(num#(ДатаТр)) as Дата,
      ПланТранзакций
   Resident ПланТранзакцийМагазины;
   drop table ПланТранзакцийМагазины;
   
   
   Concatenate (План)
   load   
      text(КодМагазина) as КодМагазина,
      Date(num#(ДатаТрафика)) as Дата,
      ПланТрафика
   Resident ПланТрафикаМагазины;
   
   drop table ПланТрафикаМагазины;
      
   store План into $(vPathQVD_Plans)\$(vType)\Plan$(PeriodName).qvd (qvd);
   
   drop table План;
            
   let  DateInc=AddMonths(DateInc,1);
   
loop while DateInc<=vFinishPeriod;

Hugo

Думаю можно поставить ветвление на анализ значения DateInc

Яндекс.Метрика