2016-03-09 4 views
1

Я изо всех сил пытаюсь найти подход к следующей проблеме, может ли кто-нибудь предложить подход на высоком уровне.Совокупные значения в иерархиях счетов Salesforce

Использование Talend, я входной набор значений для набора счетов (из CSV):

AccountId, ValueXYZ__c 

Я хочу, чтобы хранить ValueXYZ против счета SFDC, который не является проблемой, но я хочу в totalise ValueXYZ для всех учетных записей с тем же родителем для Account.Parent.TotalValueXYZ

затем я хочу «ролл» это весь путь вверх по иерархии счетов:

Imagine счет иерархии:

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

Я хочу 3 значения на A:

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 

Я хочу 3 значения на счет B

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

хочет 3 значения на счет C

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

I «Я попробовал несколько подходов, но не могу заставить их работать!

+0

вы можете предоставить фрагменты кода, которые вы пробовали до сих пор, может быть, это поможет решить вопрос быстрее и очертить, что не так? – Farside

+0

Это талантливая работа, поэтому я не уверен, как получить от нее фрагменты (я талант нуб, извините). Я подведу некоторые подходы, которые я пробовал в другом комментарии ... – kingmunkyman

ответ

0

Суть моей проблемы заключалась в том, чтобы не знать каждую позицию учетных записей в иерархии. Как только у меня было это на месте, я мог бы перебираться с самого низкого уровня на самый высокий уровень, общая сумма этих ценностей до их родителей.

Вот 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]; 
0

Где хранится информация о иерархии? Если вы можете сгладить информацию о иерархии в формате пары ключ-значение, это просто. Просто прочитайте свой входной файл и выполните поиск/присоединение к файлу иерархии. Вам нужно будет пройти до тех пор, пока вы не перейдете на базовую запись