跨 salesforce 帐户层次结构汇总值

Totalling up values across salesforce account hierarchies

我正在努力寻找解决以下问题的方法,任何人都可以建议一个高级方法。

使用 talend,我有一组帐户的输入值集(来自 CSV):

AccountId, ValueXYZ__c

我想针对 SFDC 帐户存储 ValueXYZ,这没问题,但我想将具有相同父级的所有帐户的 ValueXYZ 相加 Account.Parent.TotalValueXYZ

然后我想 "roll" 一直到帐户层次结构:

想象一下帐户层次结构:

A
-B
--C
--D
-E
--F
--G

我想要 A 上的 3 个值:

ValueXYZ = account A's ValueXYZ
TotalValueXYZ = total of ValueXYZ values for all accounts under A in the hierarchy 
TOTAL = formula field to add together the previous 2 values

我想要帐户 B 上的 3 个值

ValueXYZ = account B's ValueXYZ
TotalValueXYZ = total of ValueXYZ values for accounts C & D
TOTAL = formula field to add together the previous 2 values

我想要帐户 C 上的 3 个值

ValueXYZ = account C's ValueXYZ
TotalValueXYZ = 0
TOTAL = formula field to add together the previous 2 values

我尝试了多种方法,但无法使任何一种起作用!

层级信息存储在哪里?如果您可以以键值对格式展平层次结构信息,那么就很简单了。只需读取您的输入文件并对层次结构文件执行 lookup/join。您将不得不循环直到到达基本记录

我的问题的症结在于不知道每个帐户在层次结构中的位置。一旦我有了它,我就可以从最低级别循环到最高级别,将这些值加起来达到它们的 parents.

这是我写的 T-SQL 用来标记每个帐户的层次结构位置 (HILEVEL)

TRUNCATE TABLE [TALEND_WORKSPACE].[dbo].[SFDCAccount]

INSERT INTO [TALEND_WORKSPACE].[dbo].[SFDCAccount] (Id, ParentId, QCIYTDOneTime, QCIYTDRecurring, HILEVEL)
SELECT Id, ParentId, ValueXYZ, '0' 
FROM     [TALEND_WORKSPACE].[dbo].[SFDCAccountRawData]
WHERE ParentId = ' ';

USE TALEND_WORKSPACE
IF OBJECT_ID('dbo.sfdcaccounthierarchy', 'P') IS NOT NULL
  DROP PROCEDURE [dbo].[sfdcaccounthierarchy];
GO

CREATE PROCEDURE [dbo].[sfdcaccounthierarchy]
AS
           DECLARE @v_counter int;
           DECLARE @v_lastccounter int;
           DECLARE @v_max int;

           SET @v_counter = 0;
           SET @v_lastccounter = 0;
           SET @v_max = 10;

           WHILE (@v_counter < @v_max)
           BEGIN
                          SET @v_lastccounter = @v_counter;
                          SET @v_counter = @v_counter+1;

                          PRINT @v_counter;

                          INSERT INTO [dbo].[SFDCAccount] (Id, ParentId, QCIYTDOneTime, QCIYTDRecurring, HILEVEL)
                          SELECT Id, ParentId, ValueXYZ, @v_counter
                          FROM [TALEND_WORKSPACE].[dbo].[SFDCAccountRawData]
                          WHERE ParentId IN (SELECT Id FROM [TALEND_WORKSPACE].[dbo].[SFDCAccount]
                                              WHERE HILEVEL = @v_lastccounter);


                          if @@ROWCOUNT != 0
                                         BREAK;
           END

GO
EXEC [TALEND_WORKSPACE].[dbo].[sfdcaccounthierarchy];