在同一日期结构中显示具有不同时间轴的两个字段

问题描述

在我目前在公司从事的项目中,我想在 sql/Tableau/BigQuery 上显示与销售相关的 KPI 以及客户评分指标

主键是两个表中的订单 ID。但是,订单日期和我们衡量客户评分的日期可能不同。例如,2020 年 2 月发布的订单的销售信息将在 2020 年 2 月汇总,但是如果在 2020 年 3 月进行客户调查,则客户评分指标必须在 2020 年 3 月汇总。我想要什么在关系数据库中实现的是as follows:

销售:

订单编号 订购日期(m/d/yyyy) 销售额(美元)
1000 1/1/2021 1000
1001 2/1/2021 2000
1002 3/1/2021 1500
1003 4/1/2021 1700
1004 5/1/2021 1800
1005 6/1/2021 900
1006 7/1/2021 1600
1007 8/1/2021 1900

客户评分表:

订单编号 客户调查日期(m/d/yyyy) 客户评分
1000 3/1/2021 8
1001 3/1/2021 7
1002 4/1/2021 3
1003 6/1/2021 6
1004 6/1/2021 5
1005 7/1/2021 3
1006 9/1/2021 1
1007 8/1/2021 7

预期输出

关键绩效指标 1 月 21 日 2 月 21 日 3 月 21 日 4 月 21 日 5 月 21 日 6 月 21 日 7 月 21 日 8 月 21 日 9 月 21 日
销售额($) 1000 2000 1500 1700 1800 900 1600 1900
平均客户得分 7.5 3 5.5 3 7 1

我找不到办法做到这一点,因为订单日期和调查日期可能/可能不同。

对于示例数据和预期输出click here

解决方法

我认为您想要做的是在加入之前先将结果汇总到月份 (KPI),而不是在 ORDER_ID 上加入

例如:

var source = [
    {
        "Value1": [
            "name","surname","age"
        ],"Value2": [
            "name"
        ],"Value3": [
            "name","age"
        ]
    },{
        "Value2": [
            "name","Value3": [
            "surname","name"
        ]
    },{
        "Value1": [
            "hoursWorked"
        ],{
        "Value2": [
            "hoursWorked"
        ]
    },{
        "Value2": [
            "age","hoursWorked"
        ]
    },{
        "Value3": [
            "name","timeSpent"
        ]
    },{
        "Value3": [
            "hoursWorked",{
        "Value1": [
            "name","hoursWorked",{
        "Value1": [
            "surnmae","hoursWorked"
        ]
    }
]

var b = source.reduce((acc,val) => {
  Object.keys(val).forEach(key => {
    acc[key] = acc[key] ? [...new Set(acc[key].concat(val[key]))] :  val[key];
  })

  return acc;
},{})

console.log(b)

在这里,我们根据订单日期汇总每个月的总销售额,然后根据评分提交日期汇总每个月的平均客户评分。现在我们可以在月份值上加入这两个。

结果是这样的表格:

关键绩效指标 销售 avg_customer_score
2021-01-01 1000
2021-02-01 2000
2021-03-01 1500 7.5
2021-04-01 1700 3.0
2021-05-01 1800
2021-06-01 900 5.5
2021-07-01 1600 3.0
2021-08-01 1900 7.0
2021-09-01 1.0

您可以在 Tableau 中透视此表的结果,或利用案例语句将每个月提取到自己的列中 - 如果有帮助,我可以详细说明