2017-05-15 16 views
0

ペンタホを初めて使っています。基本的に私は、階層構造のデータを必要とします。ここでは、階層のサブセットを選択し、下位レベルのノードでカウント/サムを計算し、レベルごとにレベルを上げる必要があります。 SQLで一時変数に更新を行った後、テーブル変数(ここでの主なポイントは、私がデータテーブルにすべての更新をしないメモリでこれを行う必要があり、ということです。)ペンタホのメモリテーブル変数のSQLアップデートを模倣する方法

DECLARE @ConsolidateMaster TABLE 
(
-- my fields 
) 

INSERT @ConsolidateMaster 
--select some sub set data and inset into table variable 


UPDATE A 
SET A.[DIR_REPORT_CNT] = 0, 
    A.[DIR_REPORT_COST] = 0, 
    A.[TOTAL_REPORT_CNT] = 0, 
    A.[TOTAL_REPORT_COST] = 0 
FROM @ConsolidateMaster A 
LEFT JOIN @ConsolidateMaster B 
ON A.EMP_ID = B.SUPERVISOR_ID 
WHERE B.EMP_ID IS NULL AND A.PROJ_CD = @PROJ_CD 

--GO UP LEVEL BY LEVEL AND START COUNTING THE TOTAL + COST 
DECLARE @MAX_LEVEL INT = (SELECT MAX(SUPERVISOR_LAYER) FROM @ConsolidateMaster WHERE PROJ_CD = @PROJ_CD) 

WHILE (SELECT COUNT(1) FROM @ConsolidateMaster WHERE [DIR_REPORT_CNT] IS NULL) > 0 
BEGIN 
    UPDATE 
     A 
    SET 
     A.DIR_REPORT_CNT = B.DIR_REPORT_CNT, 
     A.DIR_REPORT_COST = B.DIR_REPORT_COST, 
     A.TOTAL_REPORT_CNT = B.TOTAL_REPORT_CNT, 
     A.TOTAL_REPORT_COST = B.TOTAL_REPORT_COST 
    FROM @ConsolidateMaster A 
    INNER JOIN 
    (
    SELECT 
     C.SUPERVISOR_ID, 
     COUNT(1) DIR_REPORT_CNT, 
     SUM(ISNULL(ANNUAL_COST,0)) DIR_REPORT_COST, 
     SUM(C.[TOTAL_REPORT_CNT]) + COUNT(1) TOTAL_REPORT_CNT, 
     SUM(C.TOTAL_REPORT_COST) + SUM(ISNULL(ANNUAL_COST,0)) TOTAL_REPORT_COST 
    FROM @ConsolidateMaster C 
    WHERE 
     C.SUPERVISOR_LAYER = @MAX_LEVEL 
     AND C.PROJ_CD = @PROJ_CD 
    GROUP BY 
     C.SUPERVISOR_ID 
    ) B 
    ON A.EMP_ID = B.SUPERVISOR_ID 
    WHERE A.PROJ_CD = @PROJ_CD 
      AND A.SUPERVISOR_LAYER < @MAX_LEVEL 

    SET @MAX_LEVEL = @MAX_LEVEL - 1 
END 

を使用してSQLを実行するために私はちょうど選択することになります* @ConsolidateMasterから*。 pentahoで同様の機能をどのように実装できますか?

+0

これですべて完了し、SQLで準備ができたら、なぜPDIが必要ですか?あなたが意図した解決策をより詳細に記述すると、「グループを使用する」よりも具体的な答えを人々がより簡単に伝えることができます。 – Cyrus

+0

@Cyrusこれは私の上司に語ったものですが、私たちはJDBCとPentahoを使用しており、現在dbにストアプロシージャがないと言いました。 (基本的にアーキテクチャ別)。具体的な解決策は必要ありません。ペンタホでテーブル変数の機能をどのように複製するかのヒントが必要です。 (行更新操作をメモリ内で行う) –

答えて

1

ケトルでテーブルのデータ型を模倣する方法を尋ねるべきではありません。 T-SQLの問題に対する解決策が見つかりましたが、T-SQLとKettleは同じ抽象レベルでは機能しません。しばらくの間あなたの解決策を忘れて、あなたの問題に集中してください。「データベース(SQL Server)で隣接リストとして保存された階層データを抽出し、データフローツール(ケトル)を使用して特定の列を集計(合計、合計)する方法」。

Closure Generatorという名前のステップがあり、あなたの関係ConsolidateMasterの推移的閉包を計算し、タプル[supervisor_id、emp_id、距離]を出すことができます。 Merge-JoinSort Rows、およびGroup Byは、探している結果が得られるはずです。

関連する問題