【问题标题】:Window Sum with Condition in TableauTableau 中带条件的窗口总和
【发布时间】:2018-09-06 10:39:31
【问题描述】:

使用 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-api cumulative-sum


    【解决方案1】:

    我在您的示例文件中将 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

    【讨论】:

    • 不完全。例如:第 62 周的值应该是仅在第 11 周和第 62 周之间开设的账户在第 11 周和第 62 周之间的销售额总和。我认为在计算第 15 周的销售额时,您的计算包括第 10 周开设的账户的销售额,因为那时它们还不到 52 周。这不是我所追求的。这有意义吗?
    • 你能提供一些示例数据吗?
    • 当然:dropbox.com/s/3x6yjw44qf7oinl/… 这个文件包含一些样本/虚拟数据
    • 编辑了我的答案。
    • 您的答案仍然不太正确:第 201832 周的总数应该是 5,046,546。我编辑了我的问题,希望能更好地描述我的需求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 2017-07-12
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多