Цель: создать отчет об текучести кадров с нуля - PullRequest
0 голосов
/ 23 февраля 2012

У меня есть требование создать отчет о текучести кадров, который должен отображать следующую информацию в соответствии с параметризованным периодом:

  1. текущий персонал
  2. стартеры
  3. выпускники
  4. менеджер
  5. сайт по контракту

В настоящее время у меня есть несколько идей, как получить отчет.Либо создайте медленно меняющееся измерение, либо скопируйте снимки таблицы сотрудников для каждого периода или отследите начальный и конечный уровни отдельно для каждой выплаты.Я попытался медленно изменить размер, и он отлично справился с новыми задачами;однако, это не удалось на выпускников.Я не уверен, будет ли работать начальный и конечный трекинг для каждого payruns.

Я создал таблицу ниже как начало решения

Я относительно новичок в MS SQL 2008бизнес.Пожалуйста, посоветуйте.Основная цель - найти менеджеров и контрактные сайты с самой высокой текучестью персонала.

Примечания - В настоящее время я не использую какую-либо конкретную технологию и ищу решение.

-Я собираюсь создать и спроектировать новую базу данных для отчета.Под database я подразумеваю несколько коллекций таблиц, которые находятся в базе данных CRM (SQL 2008). Коллекция таблиц Я имею в виду таблицу «измерения» для менеджеров, таблицу «измерения» по контрактам и таблицу персонала.Поэтому в настоящее время я считаю, что в моем решении должно быть не менее 3 таблиц;однако мои навыки не так хороши, чтобы решить эту загадку.

Я думаю, что наличие таблиц выше позволило бы мне написать запрос SQL, который мог бы сравнивать разные периоды и получать требуемые результаты.

payno depcod Idd Imported

12568 EDE322001 12568EDE322001A 31 декабря 2011

12568 EDE322001 12568EDE322001B 31 декабря 2011

16822 EDE322001 16822EDE322001A 31 декабря1042 * 17694 EDE322001 17694EDE322001A 31 декабря 2011 года

12568 EDE322001 12568EDE322001A 04 января 2012 года

12568 EDE322001 12568EDE322001B 04 января 2012 года

16822 EDE322001 164922 * 201232 *1032* 1032 *1032* 1032 *1032* 10323210 103232132321 103232 1032321 103232 1032321 103232: 103232 103232117694 EDE322001 17694EDE322001A 04 января 2012 года

12568 EDE322001 12568EDE322001A 31 января 2012 года

12568 EDE322001 12568EDE322001B 31 января 2012 года

16822 EDE322001 16822EDE322001 166822EE17694EDE322001A 31 января 2012 года

17661 EDE322001 17661EDE322001A 31 января 2012 года

12568 EDE322001 12568EDE322001A 01 февраля 2012 года

12568 EDE322001 12568EDE322001B 01 февраля 2012 года * 16200 *1200* 166 * 206 * 206 * 206 * 206 * 206 * 206 * 166 161 006 016 006 166 016 011326 166 0113263211632 * 166 161 810 161 161 832 161 226 161 161 226 161 161 221 006 161326166 * 2001февраль2012

17906 EDE322001 17906EDE322001A 01 февраля 2012 г.

17907 EDE322001 17907EDE322001A 01 февраля 2012

12568 EDE322001 12568EDE322001A 29 февраля 2012

12568E 201232 * 12568E3232200200EE32321075 *

17907 EDE322001 17907EDE322001A 29 февраля 2012 г.

В таблице выше приведена таблица снимков.Дата снимка отображается в импортированном столбце.(Аплодисменты для грязной таблицы; я не мог понять, как составить таблицу) Теперь мне нужно найти способ сравнить одну дату с другой (в идеале в цикле), чтобы выяснить разницу между 1-й датой и следующей датой.

Например, 17661 EDE322001 17661EDE322001A 31 января 2012 года - новый персонал, а 16822 EDE322001 16822EDE322001A 01 февраля 2012 года - выпускник.

Большое спасибо

1 Ответ

0 голосов
/ 24 февраля 2012

Возможно, я смотрю на это слишком упрощенно, учитывая все разговоры о медленно меняющихся измерениях и т. Д., Но что не так с простым старым кусочком SQL?Я предполагаю, что у вас есть таблица Employee с полями Manager, ContractedSite, StartDate и EndDate.

Вам необходимо следующее:

  • Текущий персонал.Этот ток в начале периода или в конце периода или активен в какое-то время в течение периода?
  • Стартеры.Люди, у которых StartDate больше или равен началу периода, но меньше или равен концу периода.
  • Leavers.Люди, у которых 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 в вашем отчете, чтобы получить оборот ивсе готово

...