我的数据集包含WeekEndingDate和Sales。我正在显示包含所有选定数据的直表,但我需要另一个表格显示以下内容:
Sales (other columns...)
First week : 1,000
Last week : 1,350
Difference : 350
Difference %: 35%
我的问题:
a)我可以在一个图表/表格中使用上述内容,还是需要4个不同的图表来显示按集合表达式过滤的列?
b)我的策略是有2个变量(vMinWeek和vMaxWeek),并在集合表达式中使用它们。这是最好的路线吗?
c)我的set表达式(如下)不起作用 - 它们对整个数据集求和。你能帮我理解为什么吗?
=max ({$<WeekEndingDate={'$(vMinWeek)'}>} Sales)
感谢您的帮助!
马拉
答案 0 :(得分:0)
我认为您的设置不起作用的原因是您的WeekEnd日期被格式化为日期,而您的变量被格式化为数字。
Set Analysis的技巧总是要考虑你需要在列表框中输入什么来得到你的答案。因此,即使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%')))))