我想从两个不同的Excel文件加载数据,并在QlikView的同一个表中使用它们。
我有两个文件(DIVISION.xls和REGION.xls),我正在使用以下代码:
let tt = 'DIVISION$' and 'REGION$';
FOR Each db_schema in 'DIVISION.xls','REGION.xls'
FOR Each v_db in $(tt)
div_reg_table:
LOAD *
FROM $(db_schema)
(biff, embedded labels, table is $(v_db));
NEXT
NEXT
此代码工作正常,并且没有显示任何错误,但我没有获得任何数据,也没有看到我的新表(div_reg_table
)。
你能帮助我吗?
答案 0 :(得分:3)
您的代码未加载任何数据的主要原因是public class QSort {
public static List<Integer> qsort(List<Integer> list) {
if (list.isEmpty()) {
return list;
} else {
return merge(
qsort(lesser
(head(list), tail(list))),
head(list),
qsort(greater(
head(list), tail(list)))
);
}
}
private static Integer head(List<Integer> list) {
return list.get(0);
}
private static List<Integer> tail(List<Integer> list) {
return list.subList(1, list.size());
}
private static List<Integer> lesser(Integer p, List<Integer> list) {
return list.stream().filter(i -> i < p).collect(toList());
}
private static List<Integer> greater(Integer p, List<Integer> list) {
return list.stream().filter(i -> i >= p).collect(toList());
}
private static List<Integer> merge(List<Integer> lesser, Integer p, List<Integer> greater) {
ArrayList list = new ArrayList(lesser);
list.add(p);
list.addAll(greater);
return list;
}
public static void main(String[] args) {
System.out.println(qsort(asList(7, 1, 2, 3, -1, 8, 4, 5, 6)));
}
}
变量的形式。
当你的内循环执行时,它会评估tt
(由tt
表示),然后评估:
$(tt)
结果为null,因为这些只是两个字符串。
如果您稍微更改语句,从'DIVISION$' AND 'REGION$'
更改为LET
并删除SET
,则内部循环将起作用。例如:
AND
但是,现在这也意味着将为{em>两个工作簿的SET tt = 'DIVISION$', 'REGION$';
中的每个值执行内部循环。这意味着除非您的tt
工作簿中有REGION
表,否则加载将失败。
为避免这种情况,您可能希望稍微重构脚本,以便拥有一个控制表,详细说明要加载的文件和表。我准备的一个例子如下所示:
DIVISION
如果您只有两个文件FileList:
LOAD * INLINE [
FileName, TableName
REGION.XLS, REGION$
DIVISION.XLS, DIVISION$
];
FOR i = 0 TO NoOfRows('FileList') - 1
LET FileName = peek('FileName', i, 'FileList');
LET TableName = peek('TableName', i, 'FileList');
div_reg_table:
LOAD
*
FROM '$(FileName)'
(biff, embedded labels, table is '$(TableName)');
NEXT
和DIVISION.XLS
,则可能值得一个接一个地使用两个单独的加载,并完全删除for循环。例如:
REGION.XLS
答案 1 :(得分:0)
不要让noofrows(&#39; Filelist&#39;)测试比答案少1。
我是这样做的:
文件清单: LOAD * INLINE [ FileName,TableName REGION.XLS,REGION DIVISION.XLS,DIVISION ];
让vNo = NoOfRows(&#39; FileList&#39;) - 1;
FOR i = 0 TO $(vNo)
LET FileName = peek('FileName', i, 'FileList');
LET TableName = peek('TableName', i, 'FileList');
div_reg_table:
LOAD
*,
$(i) as I,
FileBaseName() as SOURCE
FROM '$(FileName)'
(biff, embedded labels, table is '$(TableName)');
NEXT