本文按SSAS - 生成模拟测试数据的方法,生成基于发货主题的模拟数据。
- 产品
sql
SELECT * FROM (VALUES (101, '产品1'), (102, '产品2'), (103, '产品3')) AS Products(Id, Name)
| Id | Name |
|---|---|
| 101 | 产品1 |
| 102 | 产品2 |
| 103 | 产品3 |
- 日期
sql
SELECT
T.[Date] AS 日期,
YEAR(T.[Date]) AS 年,
FORMAT(MONTH(T.[Date]), '00') AS 月,
FORMAT(DAY(T.[Date]), '00') AS 日,
CAST(FORMAT(T.[Date], 'yyyyMM') AS INT) AS 年月,
CASE DATEPART(dw, T.[Date])
WHEN 2 THEN N'星期一'
WHEN 3 THEN N'星期二'
WHEN 4 THEN N'星期三'
WHEN 5 THEN N'星期四'
WHEN 6 THEN N'星期五'
WHEN 7 THEN N'星期六'
WHEN 1 THEN N'星期日'
END AS 星期
FROM
(
SELECT
DATEADD(MONTH, number, '2024-01-01') AS [Date]
FROM master.dbo.spt_values
WHERE type = 'P' AND number BETWEEN 0 AND 23
) AS T
| 日期 | 年 | 月 | 日 | 年月 | 星期 |
|---|---|---|---|---|---|
| 2024-01-01 00:00:00.000 | 2024 | 01 | 01 | 202401 | 星期一 |
| 2024-02-01 00:00:00.000 | 2024 | 02 | 01 | 202402 | 星期四 |
| ... | ... | ... | ... | ... | ... |
| 2025-12-01 00:00:00.000 | 2025 | 12 | 01 | 202512 | 星期一 |
- 目标
sql
SELECT
DATEADD(MONTH, sv.number, '2025-01-01') AS Date,
p.ProductId,
100 AS Quantity,
1000 AS Total
FROM master.dbo.spt_values sv
CROSS JOIN (VALUES (101), (102), (103)) AS p(ProductId)
WHERE sv.type = 'P' AND sv.number BETWEEN 0 AND 11
| Date | ProductId | Quantity | Total |
|---|---|---|---|
| 2025-01-01 00:00:00.000 | 101 | 1011 | 4210 |
| 2025-01-01 00:00:00.000 | 102 | 409 | 8650 |
| 2025-01-01 00:00:00.000 | 103 | 684 | 9420 |
| 2025-02-01 00:00:00.000 | 101 | 271 | 4340 |
| 2025-02-01 00:00:00.000 | 102 | 411 | 6420 |
| 2025-02-01 00:00:00.000 | 103 | 296 | 7140 |
| ... | ... | ... | ... |
| 2025-12-01 00:00:00.000 | 101 | 642 | 4680 |
| 2025-12-01 00:00:00.000 | 102 | 1003 | 3790 |
| 2025-12-01 00:00:00.000 | 103 | 159 | 6500 |
- 发货
sql
SELECT
DATEADD(MONTH, sv.number, '2024-01-01') AS Date,
p.ProductId,
/* 2024年为50,2025年为100 */
CASE WHEN sv.number BETWEEN 0 AND 11 THEN 50 ELSE 100 END AS Quantity,
CASE WHEN sv.number BETWEEN 0 AND 11 THEN 50 ELSE 100 END * 10 AS Total
FROM
master.dbo.spt_values sv
CROSS JOIN
(VALUES (101), (102), (103)) AS p(ProductId)
WHERE
sv.type = 'P'
AND sv.number BETWEEN 0 AND 23;
| Date | ProductId | Quantity | Total |
|---|---|---|---|
| 2024-01-01 00:00:00.000 | 101 | 50 | 500 |
| 2024-01-01 00:00:00.000 | 102 | 50 | 500 |
| 2024-01-01 00:00:00.000 | 103 | 50 | 500 |
| 2024-02-01 00:00:00.000 | 101 | 50 | 500 |
| 2024-02-01 00:00:00.000 | 102 | 50 | 500 |
| 2024-02-01 00:00:00.000 | 103 | 50 | 500 |
| ... | ... | ... | ... |
| 2025-12-01 00:00:00.000 | 101 | 100 | 1000 |
| 2025-12-01 00:00:00.000 | 102 | 100 | 1000 |
| 2025-12-01 00:00:00.000 | 103 | 100 | 1000 |
- 将
目标和发货里的产品和日期字段分别与产品表和日期表进行关联,结果如下图。
