跨salesforce帐户层次结构合计价值

跨salesforce帐户层次结构合计价值,salesforce,hierarchy,talend,account,Salesforce,Hierarchy,Talend,Account,我正在努力找到解决以下问题的方法,有人能建议一种高层次的方法吗 使用talend,我有一组CSV账户的输入值: AccountId, ValueXYZ__c 我想针对SFDC帐户存储ValueXYZ,这是没有问题的,但是我想对具有相同父项的所有帐户的ValueXYZ进行合计 Account.Parent.TotalValueXYZ 然后,我想将其全部上移到帐户层次结构: A -B --C --D -E --F --G 想象一下帐户层次结构: A -B --C --D -E --F --G

我正在努力找到解决以下问题的方法,有人能建议一种高层次的方法吗

使用talend,我有一组CSV账户的输入值:

AccountId, ValueXYZ__c
我想针对SFDC帐户存储ValueXYZ,这是没有问题的,但是我想对具有相同父项的所有帐户的ValueXYZ进行合计 Account.Parent.TotalValueXYZ

然后,我想将其全部上移到帐户层次结构:

A
-B
--C
--D
-E
--F
--G
想象一下帐户层次结构:

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

我试过几种方法,但都没用

层次结构信息存储在哪里?如果可以以键值对格式展平层次结构信息,那么这是很简单的。只需读取输入文件并在层次结构文件上执行查找/连接。您必须循环,直到找到基本记录,层次结构信息存储在哪里?如果可以以键值对格式展平层次结构信息,那么这是很简单的。只需读取输入文件并在层次结构文件上执行查找/连接。您必须循环,直到找到基本记录为止。我的问题的关键在于不知道层次结构中每个帐户的位置。一旦我有了这些,我就可以从最低的层次循环到最高的层次,将这些价值加总到他们的父母

下面是我编写的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];

我的问题的关键在于不知道每个客户在一个层次结构中的位置。一旦我有了这些,我就可以从最低的层次循环到最高的层次,将这些价值加总到他们的父母

下面是我编写的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];

你能提供你到目前为止尝试过的代码片段吗?这可能有助于更快地解决你的问题,并找出问题所在?这是talend的工作,所以我不确定如何从中获得代码片段我是talend noob,抱歉。我将在另一篇评论中总结我尝试过的一些方法……你能提供你迄今为止尝试过的代码片段吗?这可能有助于更快地解决你的问题并概括出问题所在?这是talend的工作,所以我不确定如何从中获得代码片段我是talend noob,对不起。我将在另一篇评论中总结我尝试过的一些方法。。。