缺少月份的QlikView月度表

时间:2014-05-29 10:56:03

标签: qlikview

有没有办法进行数据透视表样式分析,在这个例子中使用几个月,但是显示零缺少月而不是抑制字段? 我尝试将我的数据汇总到每月总计中,但不是每个类别都有每个月的值,所以当应用过滤器时,它会跳过几个月,这会给人留下错误的印象。

例如,我每天都会多次官员参加各种事件类型事件。 我想按类型总结每个月到达的事件总数。 这是一个相当容易制作的图表,我使用的是日历。 但是,如果II使用一名官员作为过滤器并且该官员没有参加该月的任何事件,而不是显示0,那么它只是没有显示该月,这是有道理的,但它是'不是我想看到的。

1 个答案:

答案 0 :(得分:3)

这种行为是在QlikView中设计的,正如您所发现的那样,如果数据在物理上缺失,则无法将QlikView哄骗在数据透视表中显示它。

除了通过加载脚本将值添加到文档的数据中之外,我从未真正找到对此问题的任何快速修复(即通过复选框或其他设置)。这样做的缺点是它会为文档数据添加大量冗余值,并且根据卷的不同,可能会导致文档出现性能问题。

我拿了你的例子并制作了一个小脚本,它将添加"缺失"数据的值。这意味着当您单击以选择人员时,所有月份都应存在于数据透视表图表中。它没有被抛光,可能不是最好的或最好的方式,但它有效(我在其他项目中使用过类似的东西),而且我不确定你是如何设置日历的。

无论如何,它可能会让你思考正确的方向!

Incidents:
LOAD
    Officer,
    IncidentType,
    date#(AttendanceDate,'dd/MM/yyyy') as AttendanceDate,
    AttendanceCount;
LOAD * INLINE [
    Officer, IncidentType, AttendanceDate, AttendanceCount
    A, A, 01/01/2014, 1
    B, C, 01/01/2014, 1
    C, C, 01/02/2014, 1
    D, C, 01/01/2014, 1
    E, D, 01/01/2014, 1
];

AllCombinations:
NOCONCATENATE 
LOAD DISTINCT
    Officer,
    IncidentType
RESIDENT Incidents;

LEFT JOIN
LOAD DISTINCT
    AttendanceDate,
    0 as AttendanceCount
RESIDENT Incidents;

CONCATENATE (Incidents)
LOAD
    *
RESIDENT AllCombinations;

DROP TABLE AllCombinations;

Calendar:
LOAD DISTINCT
    month(AttendanceDate) as AttendanceMonth,
    AttendanceDate;
LOAD DISTINCT
    AttendanceDate as AttendanceDate
RESIDENT Incidents;

它的工作方式是在初始加载(Incidents)之后,我们加载尺寸的唯一组合,但日期字段除外:

AllCombinations:
NOCONCATENATE 
LOAD DISTINCT
    Officer,
    IncidentType
RESIDENT Incidents;

然后我们确定我们希望添加到上表的每个条目的所有日期值,然后使用LEFT JOIN(这是一个QlikView连接而不是SQL)来复制每个唯一值的条目AttendanceDate

LEFT JOIN
LOAD DISTINCT
    AttendanceDate,
    0 as AttendanceCount
RESIDENT Incidents;

然后我们将其粘贴到原始Incidents表中,然后删除表。

CONCATENATE (Incidents)
LOAD
    *
RESIDENT AllCombinations;

DROP TABLE AllCombinations;

脚本的最后一部分只是创建一个日历表。