这是期望的结果:当创建销售时,它被视为“潜在客户”,并且我们拥有不同的 LeadStage。一旦潜在客户获得保障,它将转换为具有替代阶段名称的机会。所以我构建的是,当插入新记录时,它将从上一行获取阶段名称:
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
输出如下:
数据密钥 | 原始销售线索 ID | LeadStage | 机遇阶段 | 上一阶段 |
---|---|---|---|---|
107309 | 20240220 | 萨尔 | 无效的 | 萨尔 |
109442 | 20240220 | 无效的 | 评估 | 萨尔 |
111224 | 20240220 | 无效的 | 评估 | 评估 |
111458 | 20240220 | 无效的 | 评估 | 评估 |
111730 | 20240220 | 无效的 | 丢失的 | 评估 |
111983 | 20240220 | 无效的 | 丢失的 | 丢失的 |
113011 | 20240220 | 无效的 | 丢失的 | 丢失的 |
但是,我想保留 PreviousStage 列中的旧 Stage,而不是 Previous Row 中的 Stage。因此,我希望的输出是:
数据密钥 | 原始销售线索 ID | LeadStage | 机遇阶段 | 上一阶段 |
---|---|---|---|---|
107309 | 20240220 | 萨尔 | 无效的 | 无效的 |
109442 | 20240220 | 无效的 | 评估 | 萨尔 |
111224 | 20240220 | 无效的 | 评估 | 萨尔 |
111458 | 20240220 | 无效的 | 评估 | 萨尔 |
111730 | 20240220 | 无效的 | 丢失的 | 评估 |
111983 | 20240220 | 无效的 | 丢失的 | 评估 |
113011 | 20240220 | 无效的 | 丢失的 | 评估 |
我一直在尝试寻找解决方法,但不幸的是没有成功。因此,我需要你的帮助来实现它。
以下是 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]
数据挖掘和机器学习:
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)