使用Tableau 10.5我正在尝试创建表/图表,以显示在52周滚动窗口中新的销售(“开始销售”)的总数。下图显示了在ISO周201733至201832之间的52周内,新客户(新成立的客户)每周的销售总额;该行显示了销售总额。
下图显示了图表数据的最后几周。
“新销售”定义为在报告/ ISO周的52周之内有开始周的客户(在示例中,报告周为201832,包括在201733和201832之间为周的客户)。取同一周之间的Sales的运行总值,利息值是最后一周的运行总值(示例中为5,046,546)。
我需要的是在每个报告周显示对应的52周总和(因此,值每周大约为500万),并且条形相对平坦(允许销售增长等)。我的具体问题是,在执行窗口/移动计算时,我不知道如何定义窗口(即仅限新帐户)。
我希望我的描述足够清楚,可以说明我的目标。
谢谢。
编辑/更新(以进一步阐明问题):
以下示例表显示了在201824年至201827年之间通过同一时期开设的帐户进行的销售。在201824周中,只有在201824年开设的帐户有任何销售(值1)。在201825周中,现在有2周的账户:在201824周中开设的账户和在201825周中开设的账户,分别实现了2和1的销售额。随后的每个星期都有一个额外的一周的帐户总值达到20。
+--------+--------+--------+--------+
| 201824 | 201825 | 201826 | 201827 |
+--------+--------+--------+--------+
| | | | 1 |
| | | 1 | 2 |
| | 1 | 2 | 3 |
| 1 | 2 | 3 | 4 |
+--------+--------+--------+--------+
要继续该示例,下一张表显示了相似的数据,但时间段移动了1周:
+--------+--------+--------+--------+
| 201825 | 201826 | 201827 | 201828 |
+--------+--------+--------+--------+
| | | | 2 |
| | | 2 | 3 |
| | 2 | 3 | 4 |
| 2 | 3 | 4 | 5 |
+--------+--------+--------+--------+
此表中的销售总额为30:在201825周中开设的帐户贡献了14(2 + 3 + 4 + 5),在第二周中开设的账户贡献了9(2 + 3 + 4),依此类推。
这两个表描述了我正在寻找的方法,而我正在寻找的结果将类似于以下内容:
+--------+--------+
| 201827 | 201828 |
+--------+--------+
| 20 | 30 |
+--------+--------+
如果我在SQL中执行类似的操作,则以下内容将给出我需要的结果:
;with d AS
(
select s.ISOWk, a.OSW as StartWeek, sum(s.Sales) as Sales
from accs a
join sales s
on a.ID = s.ID
where s.ISOWk >= 201701
and a.OSW >= 201701
group by s.ISOWk, a.OSW
)
select c.ISOWk, sum(case when d.ISOWk between FYS and c.ISOWk and StartWeek between FYS and c.ISOWk then Vol else 0 end) as Rolling_ss_vol
from d
cross join (select distinct ISOWk, FYS from tblCalendar c where ISOWk between 201801 and 201835) c
group by c.ISOWk
order by ISOWk
FYS(前一年开始)与ISO周关联的位置,并指示当前销售期的开始时间(即之前的52周)。
答案 0 :(得分:0)
我将示例文件中的iso日期转换为常规日期。这样可以更轻松地进行DATEDIFF计算。我在Tableau的论坛上找到了用于此转换的公式。
DATEADD('week',INT(MID(STR([Start Week]), 5,2))-1,DATE("01/01/"+(MID(STR([Start Week]), 1,4))))
我在客户同周重复了同样的操作。
然后进行了[cust start] LOD,以确保我正确计算datediff。
{fixed [Cust No] : min([start_week_date])}
然后在[52内销售]计算字段中
if datediff('week',[cust start], [iso_week_date])<52 then [Sales] end
最后,[window_sum_sales]使用其中的[52个销售范围]。
window_sum(sum([Sales within 52]),-51,0)
希望这是您想要的。
工作簿链接https://www.dropbox.com/s/wxw5e2783la4fl4/20180906_stackoverflow_question.twbx?dl=0