0

私は人事部と一緒にプロジェクトに取り組んでいます。[EEMaster] というテーブルがあり、アクティブ/期間中の従業員の記録を保持しています。緩やかに変化するディメンションを使用して、フラット ファイルから更新されます。

年末には、アクティブな従業員の数と雇用された従業員の数、そして年が必要です。

以下は、毎年返す必要があるデータの例です。

             | 2010 | 2011 | 2012 | 2013 |
HistoricalHC | 447  | 419  | 420  | 418  |
NumbTermEmp  | 57   | 67   |  51  | 42   |

現在、部門ごとのローリング カウントを提供する Excel スプレッドシートにデータを接続しています。[EEMaster] の次の列を使用します。

  • ChangeStatus (SCD からの 1/0)
  • EmpStatusName (現在の従業員の場合は「アクティブ」、任用従業員の場合は「撤退」)
  • HireYear (ピボット テーブルで All に設定)
  • Term Year (ピボット テーブルで 2013 に設定)
  • PONumb (従業員番号、カウントに使用)

データを入力するテーブルを作成しました。現在の開発はローリング ナンバーであるため、前の年 (カウント) をテーブルに手動でロードします。私がやりたいことは、2014 年 1 月 1 日のカウントを取得し、「アクティブな従業員」、「期間従業員」、および終了したばかりの年の数をテーブルに挿入する SSIS パッケージを開発することです。

アップデート:

2 つのクエリを作成しました。アクティブな従業員の数を提供するもの

SELECT COUNT([PersNo]) AS HistoricalHC
FROM [dbo].[EEMaster]
WHERE [ChangeStatus] = 'Current' AND [EmpStatusName] = 'Active'

それは返す

|HistoricHC|
|418       |

もう 1 つはターム年ごとのターム数を提供します。

SELECT COUNT([PersNo]) AS NumbOfTermEE
FROM [dbo].[EEMaster]
WHERE [ChangeStatus] = 'Current' AND [EmpStatusName] = 'Withdrawn' 
AND [TermYear] = '2013'

それは返す

|NumbOfTermEE|
|42          |

[TermYear] を動的にする必要があります。これは毎年1月1日に実行されるためです。前年のターム数を (継続的に) 取得する必要があります。

次に、これらの数値の両方を、データが計算された年とともに新しい行に追加する必要があります。

|Year|HistoricalHC|NumbOfTermEmp|
|2010|447         |57           |
|2011|419         |67           |
|2012|420         |51           |
|2013|418         |42           |
4

3 に答える 3

0

これが私が思いついた解決策です。

次のストアド プロシージャを実行する SSIS パッケージを作成します。

    INSERT INTO [dbo].[TORateFY] (Year,HistoricalHC,NumbTermedEmp)
    SELECT  DISTINCT YEAR(GETDATE()) AS [Year],
        SUM(CASE WHEN EmpStatusName = 'Active' THEN 1 ELSE 0 END) AS HistoricalHC,
        SUM(CASE WHEN EmpStatusName = 'Withdrawn' AND TermYear = YEAR(GETDATE()) THEN 1 ELSE 0 END) AS NumbOfTermEE
    FROM    dbo.EEMaster

これは、毎年 12 月 31 日に実行される予定です。

于 2013-07-31T15:30:56.250 に答える
0

以前の回答への更新:

私は別のフォーラムで男と仕事をしていましたが、彼は、年末まで全体の数を取得するのではなく、月単位でアクティブな従業員と雇用された従業員の両方の正確な数を提供する優れたスクリプトを提供しました. これにより、レポートは、元々手動で行われていたものとより一致します。

MERGE dbo.TORateFY AS tgt
USING (
   SELECT DATENAME(YEAR, GETDATE()) AS [Year],
     SUM(CASE WHEN EmpStatusName = 'Active' THEN 1 ELSE 0 END) AS HistoricalHC,
     SUM(CASE WHEN EmpStatusName = 'Withdrawn' AND TermYear = DATENAME(YEAR,
     GETDATE()) THEN 1 ELSE 0 END) AS NumbOfTermEE
   FROM dbo.EEMaster
   WHERE ChangeStatus = 'Current'
    AND EmpStatusName IN ('Active', 'Withdrawn')
    OR TermYear <= DATENAME(YEAR, GETDATE())
  ) AS src ON src.[Year] = tgt.[Year]
WHEN MATCHED
  THEN UPDATE
    SET tgt.HistoricalHC = src.HistoricalHC,
        tgt.NumbTermedEmp = src.NumbOfTermEE
WHEN NOT MATCHED BY TARGET
THEN INSERT (
             [Year],
             HistoricalHC,
             NumbTermedEmp
             )
VALUES (
         src.[Year],
         src.HistoricalHC,
         src.NumbOfTermEE
             );

他の誰かが同様の状況に遭遇した場合に備えて共有したかった.

皆様のご意見とご指導に感謝いたします。

于 2013-08-01T14:25:12.227 に答える