Power Query:根据日期将现有数据集、各个行转换为列

问题描述 投票:0回答:1

我有一个数据集,其中客户可能在一段时间内进行了多次评估。现在,每个客户对这些评估的行为可能会有所不同,这意味着 C1 可能在第 1 天、第 90 天、第 200 天等进行了评估,然后 C2 可能在第 1 天、第 14 天、第 21 天、第 36 天等进行了评估开。

我的目标是将这些单独的行转换为列。想知道以前是否有人有类似的要求。我正在使用 Excel 或 Power Query 或 SQL 来处理这个问题。

CustomerId Date Score 
C1 1/1/2020 9
C1 1/7/2020 14
C1 1/14/2020 26

C2 1/9/2020 34
C2 3/9/2020 30
C2 6/9/2020 24

输出应该是:

客户/初始分数/平均+3个月/平均+6个月/平均+9个月/平均+12个月等等。

sql excel powerbi dax powerquery
1个回答
0
投票

以下使用 SQL Server 语法。 (https://dbfiddle.uk/8WMfYXO4

WITH initial AS (
    SELECT CustomerId, MIN(Date) AS initial_date
    FROM data
    GROUP BY CustomerId
)
SELECT
    a.CustomerId,
    MAX(CASE WHEN a.Date = i.initial_date THEN a.Score END) AS Initial_Score,
    AVG(CASE WHEN a.Date > i.initial_date AND a.Date <= DATEADD(month, 3, i.initial_date) 
        THEN a.Score END) AS Avg_3m,
    AVG(CASE WHEN a.Date > DATEADD(month, 3, i.initial_date) AND a.Date <= DATEADD(month, 6, i.initial_date) 
        THEN a.Score END) AS Avg_6m,
    AVG(CASE WHEN a.Date > DATEADD(month, 6, i.initial_date) AND a.Date <= DATEADD(month, 9, i.initial_date) 
        THEN a.Score END) AS Avg_9m,
    AVG(CASE WHEN a.Date > DATEADD(month, 9, i.initial_date) AND a.Date <= DATEADD(month, 12, i.initial_date) 
        THEN a.Score END) AS Avg_12m
FROM data a
JOIN initial i ON a.CustomerId = i.CustomerId
GROUP BY a.CustomerId
ORDER BY a.CustomerId;

输出:

客户ID 初始_分数 平均_3米 平均_6米 平均_9米 平均_12米
C1 9 20
C2 34 30 24
© www.soinside.com 2019 - 2024. All rights reserved.