Aqui está o resultado desejado: quando uma venda é criada, ela é considerada um 'Lead', e temos um LeadStage diferente. Uma vez que um Lead é garantido, ele será convertido em uma Opportunity com um nome de estágio alternativo. Então o que eu construí, é que quando um novo registro é inserido, ele obterá o nome de estágio da linha anterior:
SELECT [DWKey]
, [ObjectChangeId]
, [OriginalSalesLeadId]
, [OpportunityStage]
, [LeadStage]
, CASE WHEN CRMLeadOpportunity IS NOT NULL
THEN LAG(COALESCE(OpportunityStage, LeadStage), 1, COALESCE(OpportunityStage, LeadStage))
OVER (PARTITION BY originalSalesLeadId ORDER BY DWkey)
ELSE NULL END AS PreviousStage
FROM [BoyumDataWarehouse].[dbo].[DimSalesLeadAttributes]
WHERE OriginalSalesLeadId = 20240220
Aqui está a saída:
Chave DW | OriginalSalesLeadId | Estágio de liderança | Estágio de oportunidade | Estágio anterior |
---|---|---|---|---|
107309 | 20240220 | SAL | NULO | SAL |
109442 | 20240220 | NULO | Avaliando | SAL |
111224 | 20240220 | NULO | Avaliando | Avaliando |
111458 | 20240220 | NULO | Avaliando | Avaliando |
111730 | 20240220 | NULO | Perdido | Avaliando |
111983 | 20240220 | NULO | Perdido | Perdido |
113011 | 20240220 | NULO | Perdido | Perdido |
No entanto, eu gostaria de manter o antigo Stage na coluna PreviousStage em vez do stage da Previous Row. Então, minha saída desejada seria:
Chave DW | OriginalSalesLeadId | Estágio de liderança | Estágio de oportunidade | Estágio anterior |
---|---|---|---|---|
107309 | 20240220 | SAL | NULO | NULO |
109442 | 20240220 | NULO | Avaliando | SAL |
111224 | 20240220 | NULO | Avaliando | SAL |
111458 | 20240220 | NULO | Avaliando | SAL |
111730 | 20240220 | NULO | Perdido | Avaliando |
111983 | 20240220 | NULO | Perdido | Avaliando |
113011 | 20240220 | NULO | Perdido | Avaliando |
Tenho tentado encontrar uma solução alternativa, mas infelizmente não tive sorte. Portanto, preciso da sua ajuda para consegui-la.
Aqui está o DDL:
CREATE TABLE [dbo].[DimSalesLeadAttributes](
[DWKey] [int] NOT NULL,
[OriginalSalesLeadId] [int] NOT NULL,
[LeadStage] [nvarchar](100) NULL,
[OpportunityStage] [nvarchar](100) NULL,
[PreviousStages] [nvarchar](50) NULL) ON [PRIMARY]
& DML:
INSERT INTO [dbo].[DimSalesLeadAttributes] ([DWKey],[OriginalSalesLeadId],[OpportunityStage],[LeadStage],[PreviousStages])
VALUES(107309,20240220,NULL,'SAL',NULL),
(109442,20240220,'Evaluating',NULL,NULL),
(111224,20240220,'Evaluating',NULL,NULL),
(111458,20240220,'Evaluating',NULL,NULL),
(111730,20240220,'Lost',NULL,NULL),
(111983,20240220,'Lost',NULL,NULL),
(113011,20240220,'Lost',NULL,NULL)