在QlikView图表中设置ascendnig X轴

时间:2014-09-02 11:04:07

标签: qlikview

我有一个qlikview图表,其中维度是日期的一周。 所以我得到了数周的分组总和。

它很好但是当它从年中开始时它将开始上升,例如:

y->2    5  2
x->22  23 24 etc

但我想:

y->2 5 2
x->1 2 3

但是我试图以某种方式改变维度,但是所有faild,我在sort选项卡上尝试了一些表达式或布局,但我只是无法找到替换x轴值。

所以现在维度(x)是日期的Calender_Week。但它在一年中的一周返回0-52。 但我不想显示这个0-52我想要一个静态数字。

If week 26-32 then 1-2-3-4-5-6-7
If week 12-13 then 1-2
If week 51-52-01-02 then 1-2-3-4

1 个答案:

答案 0 :(得分:2)

您无法正确排序值的原因是因为周数只是1到53之间的值。您无法指定排序顺序,因为无法确定周数属于哪一年。

但是,有一种方法可以解决这个问题。在下面的示例中,假设我的数据表MyData定义如下:

MyData:
LOAD 
    * 
INLINE [
    CalendarDate, Result
    15/12/2014, 5
    16/12/2014, 6
    22/12/2014, 10
    29/12/2014, 20
    30/12/2014, 30
    05/01/2015, 20
];

我有另一个表从MyData加载并导出周数:

MyChartData:
NOCONCATENATE
LOAD
    WeekNumber,
    Sum(Result) as Result
GROUP BY WeekNumber;
LOAD
    Week(date#(CalendarDate,'DD/MM/YYYY')) as WeekNumber,
    Result
RESIDENT MyData;

DROP TABLE MyData;

如果我对这些数据进行绘制,我就会遇到排序问题(乍一看似乎没问题,但在这种情况下,第1周应该在第52周之后>)

QlikView Chart with axis sorting problem

现在,为了解决这个问题,我们需要另一种方法来对数据进行排序,但仍然将其分组为每周一级。由于我有原始的日历日期,我可以创建一个新的字段来做到这一点:周数和年份的连接(即YYYYWW):

NOCONCATENATE
LOAD
    WeekNumber,
    YearWeek,
    Sum(Result) as Result
GROUP BY WeekNumber, YearWeek;
LOAD
    WeekNumber,
    (WeekYear * 100 + WeekNumber) as YearWeek,
    Result;   
LOAD
    Week(date#(CalendarDate,'DD/MM/YYYY')) as WeekNumber,
    WeekYear(date#(CalendarDate,'DD/MM/YYYY')) as WeekYear,
    Result
RESIDENT MyData;

如果我然后从我的图表中换出WeekNumber并将其替换为WeekYear,那么事情看起来会更好:

A better looking chart with correct axis sorting

编辑 - 现在重新标记尺寸值

要重新标记YearWeek值以便它们只显示为相对索引(或“列”数字),我们可以使用计算的维度并使用aggr函数,如下所示:

=aggr(RowNo(), YearWeek)

然后产生如下图表:

A QlikView chart with relative column indexing

此方法的优点是无论您在QlikView文档中选择哪个选项,即使基础数据可能不连续,相对索引也将保持连续。此外,这并不会将索引硬编码到数据模型中。