簡體   English   中英

Cube.dev - 如何在滾動 window 中獲得參數“今天的日期”?

[英]Cube.dev - how to have the parameter "today date" in rolling window?

我有一個 PostgreSQL 數據庫,用戶可以在其中訂購從開始日期到結束日期 我想知道每天有多少用戶可以訂購。

讓我們舉個例子,給定:

ID
一種 2023-01-01 2023-01-03
2023-01-02 2023-01-07
C 2023-01-02 2023-01-09
2023-01-10 2023-01-12

對於前兩周(假設 01/01/2023 是星期一),我會有(不需要第三列):

n_of_users_that_can_order
2023-01-01 1個 一種
2023-01-02 3個 甲、乙、C
2023-01-03 3個 甲、乙、C
2023-01-04 2個 乙、C
2023-01-05 2個 乙、C
2023-01-06 2個 乙、C
2023-01-07 2個 乙、C
2023-01-08 1個 C
2023-01-09 1個 C
2023-01-10 1個
2023-01-11 1個
2023-01-12 0
2023-01-13 0
2023-01-14 0

我的最終結果應該是每周匯總的上表:

星期 全部的
2023-01-01 至 2023-01-07 15
2023-01-08 至 2023-01-14 4個

我不知道如何用 cube.dev 做到這一點,這是我現在的想法:

ube(`Users`, {
  sql: `SELECT * FROM public.users`,

  measures: {
    usersPerDayThatCanOrder: {
      type: `count`,
      sql: `id`,
      rollingWindow: {
        trailing: `1 day`,
        offset: `start`
      },
      filters: [
        { sql: `${CUBE}.can_order_from >= ${TODAY} AND ${CUBE}.can_order_to <= ${TODAY}` }, // NOTE: today doesn't exist
      ]
    }
  },

  dimensions: {
    id: {
      sql: `id`,
      type: `number`,
      primaryKey: true
    },

    canOrderFrom: {
      sql: `can_order_from`,
      type: `time`
    },

    canOrderTo: {
      sql: `can_order_to`,
      type: `time`
    },
  },

  dataSource: `default`
});

但它不起作用,因為我不知道如何獲得真正的 ${TODAY} 價值以及如何每周匯總。

這是一個 sql 查詢,假設您的表名為test ,它會提供您的預期結果:

SELECT d.week AS "week start"
     , (d.week + interval '6 days') :: date AS "week end"
     , sum( upper(daterange(d.week, (d.week + interval '1 week') :: date, '[)') * daterange(t."from", t."to", '[]'))
          - lower(daterange(d.week, (d.week + interval '1 week') :: date, '[)') * daterange(t."from", t."to", '[]'))
          )
  FROM
     ( SELECT generate_series(min(date_trunc('week', "from")), max("to"), interval '1 week') :: date AS week
         FROM test
     ) AS d
 INNER JOIN test AS t
    ON daterange(d.week, (d.week + interval '1 week') :: date, '[)') && daterange(t."from", t."to", '[]')
 GROUP BY d.week
 ORDER BY d.week
  • 子查詢計算表test涵蓋的周開始日期
  • INNER JOIN子句將周與用戶日期范圍相交
  • 然后按周連接行,並對所有用戶的天數求和

順便說一句,2023/01/01 似乎不是星期一而是星期日。

結果:

周開始 周末
2022-12-26 2023-01-01 1個
2023-01-02 2023-01-08 15
2023-01-09 2023-01-15 4個

dbfiddle中查看測試結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM