0

我在计费数据方面遇到数据“扇出”问题。具体是这样的。假设您是客户并支付发票。但是,一次付款可以适用于多张发票,所以如果我为发票 X、Y 和 Z 支付 100 美元,当我将这些合计起来时,它将变成 300 美元。

这是因为一张发票可以有多个与之关联的付款。因此,当我想查看与发票相比的付款总和时,它会为发票金额创建一个扇出。

解决这个问题的策略是什么?

+-----------+
|  INVOICE  |
+-----------+
| ID        |
| AMOUNT    |
| BALANCE   |
| PAYMENTID |
+-----------+

+---------+
| PAYMENT |
+---------+
| ID      |
| AMOUNT  |
+---------+

如果这里的目标是获得付款和发票金额的总和

4

1 回答 1

0

我猜你有这样的东西(BigQuery 语法):

view: invoice {
  derived_table: {
    sql: SELECT *
      FROM UNNEST(ARRAY<STRUCT<ID STRING, COST FLOAT64, PAYMENTID STRING>>[
('X', 10, '1'),
('Y', 30, '1'),
('Z', 60, '1')])
;;
  }
  dimension: id {
    type: string
    primary_key: yes
  }
  dimension: cost {
    type: number
  }
  dimension: paymentid {
    type: string
  }
  measure: total_cost {
    type: sum
    sql: ${cost} ;;
  }
  measure: total_amount {
    type: sum
    sql: ${payment.amount} ;;
  }
}

view: payment {
  derived_table: {
    sql: SELECT *
      FROM UNNEST(ARRAY<STRUCT<PAYMENTID STRING, AMOUNT FLOAT64>>[
('1', 100), 
('2', 200)])
;;
  }
  dimension: paymentid {
    primary_key: yes
    type: string
  }
  dimension: amount {
    type: number
  }
}

explore: invoice {
  join: payment {
    sql_on: ${invoice.paymentid} = ${payment.paymentid} ;;
  }
}

这确实将总发票显示为发票的总和,因为您通过首先加入来对表格进行非规范化。

X、Y、Z 的三行发票数据,每行显示总计 100,表格总计 300

如果您在它所属的视图中创建总度量,Looker 的对称聚合将使用主键处理扇形。

view: invoice {
  derived_table: {
    sql: SELECT *
      FROM UNNEST(ARRAY<STRUCT<ID STRING, COST FLOAT64, PAYMENTID STRING>>[
('X', 10, '1'),
('Y', 30, '1'),
('Z', 60, '1')])
;;
  }
  dimension: id {
    type: string
    primary_key: yes
  }
  dimension: cost {
    type: number
  }
  dimension: paymentid {
    type: string
  }
  measure: total_cost {
    type: sum
    sql: ${cost} ;;
  }
}

view: payment {
  derived_table: {
    sql: SELECT *
      FROM UNNEST(ARRAY<STRUCT<PAYMENTID STRING, AMOUNT FLOAT64>>[
('1', 100), 
('2', 200)])
;;
  }
  dimension: paymentid {
    primary_key: yes
    type: string
  }
  dimension: amount {
    type: number
  }
  measure: total_amount {
    type: sum
    sql: ${amount} ;;
  }
}

explore: invoice {
  join: payment {
    sql_on: ${invoice.paymentid} = ${payment.paymentid} ;;
  }
}

那么总数将是正确的。

X、Y、Z 三行发票数据,每行显示总计 100,表格总计 100

总成本等于总金额。

付款 1 的一行发票数据,显示费用总计 100,付款金额总计 100

于 2021-01-06T17:48:22.047 回答