我的数据集有WeekEndingDate和Sales。我正在显示一个包含所有选定数据的直表,但我需要另一个表显示以下内容:
Sales (other columns...)
First week : 1,000
Last week : 1,350
Difference : 350
Difference %: 35%
我的问题:
a)我可以在一个图表/表中有上述,或者我需要4个不同的图表显示列由集合表达式过滤?
b)我的策略是有2个变量(vMinWeek和vMaxWeek),并在集合表达式中使用它们。这是最好的路线吗?
c)我的集合表达式(下面)不起作用-它们对整个数据集求和。你能告诉我为什么吗?
=max ({$<WeekEndingDate={'$(vMinWeek)'}>} Sales)
谢谢你的帮助!
马拉我认为你的集合不工作的原因是你的WeekEnd日期被格式化为日期,而你的变量被格式化为数字。
集合分析的诀窍在于,总是要考虑在列表框中输入什么才能得到答案。所以即使QlikView将WeekEnd 2014/08/18存储为41869,你也不能在WeekEnd列表框中键入41869并返回该日期。我将变量的形式设为=date(min(WeekEnd))
。
你问题的第二部分;拿到你想要的桌子。我会这样做。我用维度值制作了一个松散的表,这样它就可以在我们将要构建的图表中正确排序。
load dual(D,N) as DIM inline [
D,N
First Week,1
Last Week,2
Difference,3
Dif %,4
];
我也喜欢在脚本中定义变量,所以我会这样做。
set vFirstWeek='=date(min(WeekEnd))';
set vLastWeek='=date(max(WeekEnd))';`
然后,当构建直表时,我们使用DIM作为维度,但由于DIM没有连接到任何东西,我们必须做一些工作才能使它显示适合这些维度值的值。num(,'# ##0')
只是将%的格式与总和的格式不同。为此,图表的"数字"选项卡中的数字格式必须设置为"默认表达式"。
if(DIM='First Week',num(sum({<WeekEnd={'$(vFirstWeek)'}>} Sales),'# ##0'),
if(DIM='Last Week',num(sum({<WeekEnd={'$(vLastWeek)'}>} Sales),'# ##0'),
if(DIM='Difference',num(sum({<WeekEnd={'$(vFirstWeek)'}>} Sales)-sum({<WeekEnd={'$(vLastWeek)'}>} Sales),'# ##0'),
if(DIM='Dif %',num((sum({<WeekEnd={'$(vFirstWeek)'}>} Sales)-sum({<WeekEnd={'$(vLastWeek)'}>} Sales))/sum({<WeekEnd={'$(vLastWeek)'}>} Sales),'0.00%')))))