在QlikView中以平面格式加载具有多个级别的交叉表

时间:2016-03-14 14:27:25

标签: qlikview

是否可以在QlikView中加载交叉表,它在列和行中有多个图层。这是Excel中的一个表的示例,我想在QlikView中加载为平面表:

enter image description here

2 个答案:

答案 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
    ];

根据澄清,您可以尝试这样的事情:

Excel Sample

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中工作。

Output table in QS

如果您需要拆分单个字段(根据明确的要求),只需用脚本替换脚本的最后一部分:

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;

数据应如下所示:

Table Browser with Fields Separated