首页 > 解决方案 > Tableau 中带条件的窗口总和

问题描述

使用 Tableau 10.5,我正在尝试创建表格/图表,以显示滚动 52 周窗口内的新(“Standing Start”)销售总额。下图显示了从 ISO 周 201733 到 201832 的 52 周窗口内新(常驻)客户的每周销售额总和;这条线显示了销售额的总和。

新销售总额

下图显示了图表最近几周的数据。

基础图表数据

“新销售”定义为开始周在报告/ISO 周的 52 周内的客户(在 201832 为报告周的示例中,包括开始周在 201733 和 201832 之间的客户)。采用同一周之间的累计销售额,感兴趣的值是最后一周的累计值(示例中为 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 周前)。

标签: tableau-apicumulative-sum

解决方案


我在您的示例文件中将 iso 日期转换为常规日期。这使得更容易进行 DATEDIFF 计算。我在 Tableau 的论坛上找到了这个转换公式。

DATEADD('week',INT(MID(STR([Start Week]), 5,2))-1,DATE("01/01/"+(MID(STR([Start Week]), 1,4))))

我对客户 iso 周重复了同样的操作。

然后做了一个 [cust start] LOD 以确保我正确计算 datediff。

{fixed [Cust No] : min([start_week_date])}

然后做了一个 [Sales within 52] 计算字段

if datediff('week',[cust start], [iso_week_date])<52 then [Sales] end

最后,[window_sum_sales] 在里面使用了[Sales within 52]。

window_sum(sum([Sales within 52]),-51,0)

希望这就是您正在寻找的。

工作簿链接https://www.dropbox.com/s/wxw5e2783la4fl4/20180906_stackoverflow_question.twbx?dl=0


推荐阅读