目标:从头开始创建员工流程报告

时间:2012-02-23 09:36:45

标签: sql database-design reporting-services crystal-reports data-warehouse

我需要创建人员更替报告,该报告应根据参数化期间显示以下信息:

  1. 现任员工
  2. 起动
  3. 毕业生
  4. 管理器
  5. 签约网站
  6. 目前,我有一些想法如何获得报告。为每个期间创建缓慢变化的维度或复制员工表的快照,或者为每个payrun分别跟踪启动者和离开者。我尝试过慢慢改变尺寸,它在新手上做得很好;然而,它离开了失败者。我不确定每个payruns的跟踪启动器和离线是否有效。

    创建下表作为解决方案的开始

    我在MS SQL 2008业务方面相对较新。请提出。主要目标是确定员工流动率最高的管理人员和签约地点。

    备注 - 目前,我没有使用任何特定的技术并寻找解决方案。

    - 我打算为了报告而构建和设计一个全新的数据库。通过数据库我指的是位于CRM数据库(SQL 2008)上的一些表集合。通过表格集合我指的是经理的“维度”表,签约网站的“维度”表和员工表。所以目前,我认为我的解决方案应该至少有3个表;但是,我的技能并不能解决难题。

    我认为上面有表可以让我编写一个SQL查询,可以比较不同的时期并获得所需的结果。

    payno depcod Idd Imported

    12568 EDE322001 12568EDE322001A 2011年12月31日

    12568 EDE322001 12568EDE322001B 2011年12月31日

    16822 EDE322001 16822EDE322001A 2011年12月31日

    17694 EDE322001 17694EDE322001A 2011年12月31日

    12568 EDE322001 12568EDE322001A 2012年1月4日

    12568 EDE322001 12568EDE322001B 2012年1月4日

    16822 EDE322001 16822EDE322001A 2012年1月4日

    17694 EDE322001 17694EDE322001A 2012年1月4日

    12568 EDE322001 12568EDE322001A 2012年1月31日

    12568 EDE322001 12568EDE322001B 2012年1月31日

    16822 EDE322001 16822EDE322001A 2012年1月31日

    17694 EDE322001 17694EDE322001A 2012年1月31日

    17661 EDE322001 17661EDE322001A 2012年1月31日

    12568 EDE322001 12568EDE322001A 2012年2月1日

    12568 EDE322001 12568EDE322001B 2012年2月1日

    16822 EDE322001 16822EDE322001A 2012年2月1日

    17906 EDE322001 17906EDE322001A 2012年2月1日

    17907 EDE322001 17907EDE322001A 2012年2月1日

    12568 EDE322001 12568EDE322001A 2012年2月29日

    12568 EDE322001 12568EDE322001B 2012年2月29日

    17907 EDE322001 17907EDE322001A 2012年2月29日

    上面的表是快照表。快照日期显示在“导入的列”中。 (用于凌乱表格的applogoes;我无法弄清楚如何制作表格)现在我需要找到一个如何比较一个日期与另一个日期(理想情况下在循环中)以找出第一个日期和下一个日期之间的差异。 / p>

    例如,17661 EDE322001 17661EDE322001A 2012年1月31日是新员工,2012年2月1日16822 EDE322001 16822EDE322001A是离职人员。

    非常感谢

1 个答案:

答案 0 :(得分:0)

考虑到所有关于缓慢变化的维度等的讨论,我可能会过于简单地看待这个问题,但是对于一些普通的SQL来说有什么问题?我将假设您有一个包含Manager,ContractedSite,StartDate和EndDate字段的Employee表。

您需要以下内容:

  • 现任员工。这是在期间开始时还是在期末或在期间的某个时间有效?
  • 启动器。 StartDate大于或等于期间开头但小于或等于期末的人。
  • 离开者。 EndDate大于或等于期间开头但小于或等于期末的人。
  • 周转。这让我们回到了“当前员工”的意思。营业额基本上是该期间当前员工与期末当前员工之间的差额,以原始数字或百分比表示。因此,该期间开始时的当前员工是StartDate小于期间开始且没有EndDate或EndDate大于或等于期间开始的人。与期末的现有工作人员相似。

因此,您需要从数据中提取一些特定案例:

SELECT Manager, ContractedSite, 
    SUM(CASE WHEN StartDate < @PeriodStart AND ((EndDate IS NULL) OR (EndDate >= @PeriodStart)) THEN 1 END) AS OpeningStaff,
    SUM(CASE WHEN StartDate >= @PeriodStart AND StartDate <= @PeriodEnd THEN 1 END) AS Starters,
    SUM(CASE WHEN EndDate >= @PeriodStart AND EndDate <= @PeriodEnd) THEN 1 END) AS Leavers,
    SUM(CASE WHEN StartDate <= @PeriodEnd AND ((EndDate IS NULL) OR (EndDate > @PeriodEnd)) THEN 1 END) AS ClosingStaff
FROM Employee
WHERE (StartDate <= @PeriodEnd) AND ((EndDate IS NULL) OR (EndDate >= @PeriodStart))
GROUP BY Manager, ContractedSite
ORDER BY Manager, ContractedSite

现在,您只需要在报告中计算OpeningStaff和ClosingStaff之间的差异,即可获得营业额。