答案 0 :(得分:1)
在qlikview的情况下,这不是一件轻而易举的事......但是我很简单地为你保留了一个演示文件,该文件显示了如何完成加载多头表格! 您可以从here下载。
需要时间来理解逻辑,因此请仔细研究。
答案 1 :(得分:0)
使用crosstable函数非常简单。假设您的静态数据列(即“Total_CountriesWithAlloc”,“总国家/地区包括未分配的成本”)是静态且数量不变的,您可以从源中执行加载*以获取显示在其上的“新”月份列时间。
这是一个基本的例子(只需将脚本放入一个新文档并运行它,从概念上看它是如何工作的。)
[Data]:
CrossTable(Months, Amount, 2)
LOAD * INLINE [
StaticDataA,StaticDataB,Jan,Feb,Mar
AAA,XXX,10,20,30
BBB,YYY,41,41,41
CCC,ZZZ,72,82,92
];
根据澄清,您可以尝试这样的事情:
QUALIFY *;
[Headers]:
LOAD
RecNo() as RecordIndex
,*
FROM [lib://qlikid_graeme.smith/Multi Header.xlsx]
(ooxml, no labels, table is Sheet1)
WHERE RecNo() <4
;
[UnpivotedRawData]:
LOAD
*
FROM [lib://qlikid_graeme.smith/Multi Header.xlsx]
(ooxml, no labels, table is Sheet1)
WHERE RecNo() >=4
;
UNQUALIFY *;
[PivotedData]:
CrossTable(ColRef, Amount, 2)
LOAD
*
RESIDENT
[UnpivotedRawData]
;
DROP TABLE UnpivotedRawData;
RenameMapData:
LOAD 'UnpivotedRawData.A' as FromFieldName, CONCAT([Headers.A]) as ToFieldName Resident Headers;
CONCATENATE LOAD 'UnpivotedRawData.B' as FromFieldName, CONCAT([Headers.B]) as ToFieldName Resident Headers;
RenameMapDataMap:
Mapping Load * Resident RenameMapData;
DROP TABLE RenameMapData;
RENAME FIELDS USING RenameMapDataMap;
ConcatenatedHeaders:
LOAD 'UnpivotedRawData.C' as ColRef, CONCAT([Headers.C]) as ConcatenatedFieldName Resident Headers;
CONCATENATE LOAD 'UnpivotedRawData.D' as ColRef, CONCAT([Headers.D]) as ConcatenatedFieldName Resident Headers;
CONCATENATE LOAD 'UnpivotedRawData.E' as ColRef, CONCAT([Headers.E]) as ConcatenatedFieldName Resident Headers;
DROP TABLE Headers;
在这个例子中,我刚刚连接了3个列标题行,但是你有行ID,所以如果你愿意,你可以轻松地将它们分成新的字段。此外,您应该通过动态迭代表中的NoOfFields()来自动创建上面的ConcatenatedHeaders表,而不是像上面那样硬编码,特别是如果您有动态的传入列数。
这是Qliksense的输出(我已经在QlikSense云上做了这个,因为我在家里的Mac上)。脚本也应该在Qlikview中工作。
如果您需要拆分单个字段(根据明确的要求),只需用脚本替换脚本的最后一部分:
ConcatenatedHeaders:
LOAD 'UnpivotedRawData.C' as ColRef, CONCAT([Headers.C],'~') as ConcatenatedFieldName Resident Headers;
CONCATENATE LOAD 'UnpivotedRawData.D' as ColRef, CONCAT([Headers.D],'~') as ConcatenatedFieldName Resident Headers;
CONCATENATE LOAD 'UnpivotedRawData.E' as ColRef, CONCAT([Headers.E],'~') as ConcatenatedFieldName Resident Headers;
DROP TABLE Headers;
JOIN(ConcatenatedHeaders)
LOAD
ColRef
,SubField(ConcatenatedFieldName, '~',1) as Row1Header
,SubField(ConcatenatedFieldName, '~',2) as Row2Header
,SubField(ConcatenatedFieldName, '~',3) as Row3Header
RESIDENT
ConcatenatedHeaders;
数据应如下所示: