如何使用集合分析汇总过去2个值+当前值+下2个值的总和?

时间:2013-10-28 07:18:22

标签: set analysis qlikview

我想计算过去2个值的总和+当前值+接下来的2个值,并设置分析有或没有设置分析,它按预期工作。我的意思是它的工作与预期有或没有集分析("{<Week=>}")。但是当缩放时,图形的值会相应地改变。所以我使用了set分析。即使它不适合我的情况。

但是,当我缩放图表时,我们没有得到实际结果。因为我使用了集合分析。

我需要以下内容,

考虑这是我的数据,

|Week    | Value   |
|------------------|
|01/2011 |  256    |
|02/2011 |  2056   |
|03/2011 |  112    |
|04/2011 |  95     |
|05/2011 |  1069   |
|07/2011 |  125    |
|08/2011 |  73     |
--------------------

我需要为04/2011绘制数据(2056+112+95+1069+125) ,我们需要为每个日期计算

我正在尝试使用以下表达式

一切正常RangeSum(Below(Sum(Value),1,6)) + RangeSum(Above(Sum(Value),1,6)) + Sum(Value)

对于缩放我使用了如下设置分析,

RangeSum(Below(Sum({<Date=>}Value),1,6)) + RangeSum(Above(Sum({<Date=>}Value),1,6)) + Sum({<Date=>}Value)

没有按预期工作。请帮我摆脱这个。

2 个答案:

答案 0 :(得分:2)

这应该可以按你的意愿运作:

后端代码:

Inline:
LOAD * INLINE [
    WeekKey,Value
    01/2011,256    
    02/2011,2056   
    03/2011,112    
    04/2011,95     
    05/2011,1069   
    07/2011,125    
    08/2011,73 
];

dateTemp:
LOAD
WeekKey,
Right(WeekKey,4)&Left(WeekKey,2) as SortOrder,
Left(WeekKey,2) as Week,
Right(WeekKey,4) as Year
Resident Inline;

LOAD
RowNo() as Row,
*
Resident dateTemp
Order By SortOrder ASC;
DROP Table dateTemp;

您的表达:

Sum({<Week=,WeekKey=,Row = {'>=$(=max(Row)-2)<=$(=max(Row)+2) '}>} Value)

答案 1 :(得分:0)

我对评论中的未决问题做了以下假设:

  1. 放大时不应更改特定范围的总和。
  2. 07/2011的前一个值为0(作为06/2011的值)
  3. 因此,必须根据周数对所有值进行计算。 也许可以用set分析完成,但我想这些比较和查找 如果不是不可能的话,将会很困难。

    我更倾向于使用预先计算加载脚本中的值的解决方案:

    BaseData:
    Load 
      oWeek,
      value,
      left(oWeek,2) as nWeek,
      right(oWeek,4) as nYear,
      MakeWeekDate(right(oWeek,4), left(oWeek,2)) as weekstart
    inline
    [
      oWeek, value
      01/2011, 256
      02/2011, 2056
      03/2011, 112
      04/2011, 95
      05/2011, 1069
      07/2011, 125
      08/2011, 73
    ];
    

    首先计算所有需要周的周数:

    TEMP_1:
    Load 
      oWeek, value, nWeek, nYear, weekstart,
      WeekStart(weekstart, -1) as weekstart_p1,
      WeekStart(weekstart, -2) as weekstart_p2,
      WeekStart(weekstart, 1) as weekstart_n1,
      WeekStart(weekstart, 2) as weekstart_n2
    resident BaseData;
    drop Table BaseData;
    

    查看周的值:

    TEMP_2:
    Load 
      oWeek, value, nWeek, nYear, weekstart,
      weekstart_p1, weekstart_p2, weekstart_n1, weekstart_n2,
      lookup('value', 'weekstart', weekstart_p1, 'TEMP_1') as value_p1,
      lookup('value', 'weekstart', weekstart_p2, 'TEMP_1') as value_p2,
      lookup('value', 'weekstart', weekstart_n1, 'TEMP_1') as value_n1,
      lookup('value', 'weekstart', weekstart_n2, 'TEMP_1') as value_n2
    resident TEMP_1;
    drop Table TEMP_1;
    

    字段value_p1 ...可能包含'null',因此它们必须转换为0。

    TEMP_3:
    Load 
      oWeek, value, nWeek, nYear, weekstart,
      weekstart_p1, weekstart_p2, weekstart_n1, weekstart_n2,
      value_p1, value_p2, value_n1, value_n2,
      if (isnull(value_p2), 0, value_p2) as val_p2,
      if (isnull(value_p1), 0, value_p1) as val_p1,
      if (isnull(value_n1), 0, value_n1) as val_n1,
      if (isnull(value_n2), 0, value_n2) as val_n2
    resident TEMP_2;
    drop Table TEMP_2;
    

    字段val_p1现在包含有效的数值。

    Data:
    Load 
      oWeek, value, nWeek, nYear, weekstart,
      weekstart_p1, weekstart_p2, weekstart_n1, weekstart_n2,
      val_p1, val_p2, val_n1, val_n2,
      val_p2 + val_p1 + value + val_n1 + val_n2 as mySum 
    resident TEMP_3;
    drop Table TEMP_3;
    

    在我的信息中心中,我有一个桌面框架:

    tablebox with precalculatesd values

    图表:

    diagram mySum over oWeek

    希望有所帮助。