我希望将来将基于合同类型(按月或长期)与日期条件的收入和产品放置数量相加。例如,我想知道我们的MRR中有多少来自MTM合同以及2019年1月1日的长期合同等等。
我们有两种合同类型:月对月(MTM)和长期合同。我们的客户合同在到期时会转换为MTM(MTM到期月份),因此我们试图准确地可视化将来将转换为MTM的金额。 MRR是每月经常性收入,因此本质上是收入。
我要计算的内容
如果MRR退出月份(例如2019-04-01)>月(例如2019-01-01)THEN SUM MRR。这是每月的经常性收入。
IF MRR退出月份(例如2019-01-01) 这是我的数据表: 我使用以下方法计算了MRR_Exiting_Month: 我使用 我正在考虑如果MRR_Exiting_Month大于将来的给定月份,则将MRR和展示位置编号相加。理想情况下,结果表是这样的: 在BigQuery中这样做的最佳方法是什么?感谢您的帮助!Companies | Placement | MRR | Start_Date | term_length | MRR_Exiting_Month
ANTON | 2 | 300 | 2018-01-01 | 13 | 2019-02-01
ANKER | 1 | 600 | 2018-07-01 | 6 | 2019-01-01
ANTON | 2 | 300 | 2018-08-15 | 7 | 2019-02-01
ANTON | 2 | 500 | 2018-10-01 | 5 | 2019-03-01
ANTON | 2 | 300 | 2018-08-01 | 8 | 2019-04-01
date_add(parse_date('%F',start_date), INTERVAL term_length MONTH) as contract_end_month
generate_date_array
在另一个表中填充接下来的月份,但是不确定在不加入两个表的情况下如何使用案例。我期望这样的结果:Month | MTM MRR | Long Term MRR |
2018-10-01 | 0 | 2000 |
2018-11-01 | 0 | 2000 |
2018-12-01 | 0 | 2000 |
2019-01-01 | 600 | 1400 |
2019-02-01 | 1200 | 800 |
2019-03-01 | 1700 | 300 |
2019-04-01 | 2000 | 0 |
2019-05-01 | 2000 | 0 |
答案 0 :(得分:1)
以下BigQuery标准SQL示例
#standardSQL
WITH months AS (
SELECT month
FROM UNNEST(GENERATE_DATE_ARRAY('2018-10-01', '2019-05-01', INTERVAL 1 MONTH)) month
)
SELECT
month,
SUM(IF(MRR_Exiting_Month <= month, MRR, 0)) MTM_MRR,
SUM(IF(MRR_Exiting_Month > month, MRR, 0)) Long_Term_MRR
FROM months
CROSS JOIN `project.dataset.table` t
GROUP BY month
您可以使用下面的问题中的虚拟数据进行测试,操作
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'ANTON' Companies, 2 Placement, 300 MRR, DATE '2018-01-01' Start_Date, DATE '2019-02-01' MRR_Exiting_Month UNION ALL
SELECT 'ANKER', 1, 600, '2018-07-01', '2019-01-01' UNION ALL
SELECT 'ANTON', 2, 300, '2018-08-15', '2019-02-01' UNION ALL
SELECT 'ANTON', 2, 500, '2018-10-01', '2019-03-01' UNION ALL
SELECT 'ANTON', 2, 300, '2018-08-01', '2019-04-01'
), months AS (
SELECT month
FROM UNNEST(GENERATE_DATE_ARRAY('2018-10-01', '2019-05-01', INTERVAL 1 MONTH)) month
)
SELECT
month,
SUM(IF(MRR_Exiting_Month <= month, MRR, 0)) MTM_MRR,
SUM(IF(MRR_Exiting_Month > month, MRR, 0)) Long_Term_MRR
FROM months
CROSS JOIN `project.dataset.table` t
GROUP BY month
-- ORDER BY month
有结果
Row month MTM_MRR Long_Term_MRR
1 2018-10-01 0 2000
2 2018-11-01 0 2000
3 2018-12-01 0 2000
4 2019-01-01 600 1400
5 2019-02-01 1200 800
6 2019-03-01 1700 300
7 2019-04-01 2000 0
8 2019-05-01 2000 0