每个类别的动态每周平均值

Dynamic weekly average per category

我有一个数据集如下:

DATE       | AMOUNT | CATEGORY
20.12.2015 | 100.00 | Drinks
22.12.2015 | 50.00  | Food
20.12.2015 | 70.00  | Transport
07.12.2015 | 50.00  | Transport
...

有几条记录每周和每天花费的金额。

我想要一个条形图,左侧是类别,条形长度表示每周平均值,即。在过滤后的时间范围内平均每周花费多少

如果我使用正常 AVG([AMOUNT]),它会计算每日平均值,而不是每周平均值。

我发现了这个问题: Tableau - weekly average from daily data

然而,其中一个答案不是动态的,另一个列出了连续几周的平均值,而不是每个类别的平均值,我想不出一种方法来对我的问题应用相同的技术。

  1. 添加一个新的维度,这是针对周的
  2. 然后您可以创建一个变量来计算特定一周的平均金额,如下所示: {FIXED [日期(周数)],[类别]:平均([金额])}
  3. 那么当你想平均的时候你可以对上面的公式进行平均 AVG({FIXED [日期(周数)], [类别]: avg([金额]) })

首先确保名为 DATE 的字段的数据类型是日期类型而不是字符串类型。如果不是,请从鼠标右键菜单更改数据类型,或者在最坏的情况下使用计算字段中的日期解析功能。

其次,将 DATE 字段放到架子上后,将日期粒度级别设置为“周”。再次 ],使用鼠标右键上下文菜单。从第二批选项中选择将日期截断到周级别。该菜单上的第一批选项是日期部分,而不是日期。然后,您可能希望根据您的预期视图将字段更改为离散。

根据 Mark Andersen 的解决方案,我发现了以下内容:

  1. 创建计算字段WeekNumber

    DATETRUNC('week', [Date])

  2. 创建计算字段WeekTotal

    {FIXED [WeekNumber], [Main Category]: SUM([Amount Person]) }

  3. 创建计算字段WeekDiff:

    DATEDIFF('week',#2015-08-01#,TODAY())

  4. 创建计算字段WeekAvg:

    [WeekTotal] / [WeekDiff] 使用 WeekAvg 作为条形的度量,就完成了。

对此有几点说明: 马克的解决方案朝着正确的方向发展。我不得不将 avg([Amount]) 替换为 sum([Amount]),因为我想获得每周的总数并在之后取平均值。 但是,它并没有准确计算出我想要的结果,因为 Tableau 仅根据有支出的周数计算平均值。 如果我有

40$ in week 1  
20$ in week 2 
30$ in week 4

然后它计算 (40+20+30)/3 = 30 而我想要 (40+20+30)/4 = 20.25 在我的用例中,我的解决方案是有效的,因为我有一个固定的时间范围,直到 TODAY(),但是如果我在两个任意日期之间使用过滤器,那么如果能自动计算它会很方便。