2017-03-23 31 views
0

我倒了好几个网站,包括这个网站,到目前为止都是徒劳的。我需要创建一张描述员工流失率的图表,该图表必须在1年内计算。 (正如我标题说我要么13期或12个月去的选项:都是1年等效)请看看我的数据集的以下“样本版本”:Report Builder 3.0 - MDX - 移动金额

Year | Trimester | Period | Date End of Period | Departures | Avg total Employees 
2015   1   1  yyyy-mm-dd 00:00:00  2   100 
2015   1   2  yyyy-mm-dd 00:00:00  3   99 
2015   1   3  yyyy-mm-dd 00:00:00  4   98 
2015   2   4  yyyy-mm-dd 00:00:00  0   102 
2015   2   5  yyyy-mm-dd 00:00:00  1   100 
2015   2   6  yyyy-mm-dd 00:00:00  0   98 
2015   3   7  yyyy-mm-dd 00:00:00  4   99 
2015   3   8  yyyy-mm-dd 00:00:00  3   96 
2015   3   9  yyyy-mm-dd 00:00:00  4   100 
2015   3   10  yyyy-mm-dd 00:00:00  0   98 
2015   4   11  yyyy-mm-dd 00:00:00  0   97 
2015   4   12  yyyy-mm-dd 00:00:00  2   99 
2015   4   13  yyyy-mm-dd 00:00:00  3   98 
2016   1   1  yyyy-mm-dd 00:00:00  2   100 
2016   1   2  yyyy-mm-dd 00:00:00  4   97 
2016  [...] 

FYI平均员工总数=([员工总数]。[期末] + [员工总数] [期初])/ 2

以下是我目前看到的图表(道歉,标签用法文)

enter image description here

:出发/平均占员工总数 顺便说一句,因为你一定能注意到,橙色是企图通过将添加计算系列计算系列属性选择移动,以获得期望的结果平均值:尝试失败。

所以这里是我的问题:我想要的是1个系列,显示12个月累计值每个期间。也就是说,请根据我的数据集见下例以上:

当前2016年,期间1 = 2/100 = 2%

通缉的结果2016年一年,期间1 =(2 +3 + 2 + 0 + 0 + 4 + 3 + 4 + 0 + 1 + 0 + 4 + 3)/((100 + 100)/ 2)= 26%,即加上最后13个周期的偏差和[2016P01 + 2015P13 + 2015P12 + [+] 2015P03 + 2015P02)

因此,换句话说,我需要获得一个图表,显示每个周期的营业额值将是一个百分比,肯定会在20-30%左右,而不是吨他当前0-4%(根据我的数据集值)。任何想法?

谢谢大家!

EDIT1 我发现,通过使用RunningValue函数: =RunningValue(Fields!Turnover.Value, Sum, Nothing)它给一些接近我想要什么,但不太依然。我基本上需要一个在过去13个时期范围内的“Runningtotal”......如果存在的话=/

p.s. Fields!Turnover.Value = Fields!Departure.Value/Fields!Avg_total_Employees.Value

EDIT2 首先,谢谢艾伦。去FWD,这里就是我的实际DS的屏幕截图样本: enter image description here

:一个我输入了这一个之间的细微差别是,我需要提供营业TX1(包括所有员工)和营业额Tx2(不包括退休)。因此,我创建了下面的计算成员(截图的左下角),并且由于我的TX1从我的DS中的[平均占员工总数]和[离开]移除和Tx2占了两个:

退休人员数:Départs_ret = ([Measures].[Nb Départs],[Départ].[Départ].&[112337])

Turnover1:Tx1 = ([Measures].[Nb Départs])/([Measures].[Nb Matricules Actifs (Moyen)])

Turnover2:Tx2 = (([Measures].[Nb Départs])-([Measures].[Départs_ret]))/([Measures].[Nb Matricules Actifs (Moyen)]))])

以文本的形式我的MDX查询如下:

WITH MEMBER [Measures].[Départs_ret] AS ([Measures].[Nb Départs],[Départ].[Départ].&[112337]) 
MEMBER [Measures].[Tx1] AS ([Measures].[Nb Départs])/([Measures].[Nb Matricules Actifs (Moyen)]) 
MEMBER [Measures].[Tx2] AS (([Measures].[Nb Départs])-([Measures].[Départs_ret]))/([Measures].[Nb Matricules Actifs (Moyen)]) 
SELECT NON EMPTY { [Measures].[Tx1], [Measures].[Tx2] } 
ON COLUMNS, NON EMPTY { ([Période Financière].[PF - Année Financière].[PF - Année Financière].ALLMEMBERS * 
[Période Financière].[PF - Trimestre No].[PF - Trimestre No].ALLMEMBERS * 
[Période Financière].[PF - Période Financière No].[PF - Période Financière No].ALLMEMBERS * 
[Période Financière].[PF - Date Fin Période].[PF - Date Fin Période].ALLMEMBERS) } 
DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS FROM (SELECT (-{ [Période Financière].[PF - Année Financière - Trimestre].[PF - Année Financière].&[2014], [Période Financière].[PF - Année Financière - Trimestre].[PF - Année Financière].&[2013], [Période Financière].[PF - Année Financière - Trimestre].[PF - Année Financière].&[2012] }) 
ON COLUMNS FROM (SELECT (STRTOSET(@[PériodeFinancièrePFAnnéeFinancière], CONSTRAINED)) 
ON COLUMNS FROM [Historique Employés PerFin])) 
CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS 
如果个

我道歉我的代码分裂是不正确的做法,我试图使它在某种程度上是合乎逻辑的SSRS简单地把它作为一个大blurp。

谢谢!

回答

0

浇在MDX的东西后,我找到了解决办法。事实上,它必须在查询设计器的文本模式下完成,并且必须使用Lag()函数。所以,这里是我的DS貌似现在:

WITH 
MEMBER [Measures].[Total_déb] 
AS ([PF - Date Fin Période].CurrentMember.Lag(12), [Measures].[Nb Matricules Actifs (DtDeb)]) 
MEMBER [Measures].[Départ_YTD] 
AS 'SUM(
{[PF - Date Fin Période].CurrentMember.Lag(12):[PF - Date Fin Période].CurrentMember}, [Measures].[Nb Départs])' 
MEMBER [Measures].[Départ_ret_YTD] 
AS 'SUM(
{[PF - Date Fin Période].CurrentMember.Lag(12):[PF - Date Fin Période].CurrentMember}, ([Measures].[Nb Départs],[Départ].[Départ].&[112337]))' 
SELECT NON EMPTY { [Measures].[Total_déb], [Measures].[Départ_YTD], [Measures].[Départ_ret_YTD], [Measures].[Nb Total Employés Actifs (DtFin)] } ON COLUMNS, NON EMPTY 
{ ([Période Financière].[PF - Année Financière].[PF - Année Financière].ALLMEMBERS * [Période Financière].[PF - Trimestre No].[PF - Trimestre No].ALLMEMBERS * [Période Financière].[PF - Période Financière No].[PF - Période Financière No].ALLMEMBERS * [Période Financière].[PF - Date Fin Période].[PF - Date Fin Période].ALLMEMBERS) } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS 
FROM (SELECT (-{ [Période Financière].[PF - Année Financière - Trimestre].[PF - Année Financière].&[2014], [Période Financière].[PF - Année Financière - Trimestre].[PF - Année Financière].&[2013], [Période Financière].[PF - Année Financière - Trimestre].[PF - Année Financière].&[2012] }) ON COLUMNS 
FROM (SELECT (STRTOSET(@[PériodeFinancièrePFAnnéeFinancière], CONSTRAINED)) ON COLUMNS FROM [Historique Employés PerFin])) 
CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS 

这是我的DS的屏幕截图现在: enter image description here

0

报表生成器是不是一个伟大的工具做相对运行聚集体。我对这个解决方案是基于SQL。我不知道你的数据结构,所以我不能给你写一个查询,但我会给出一个高层次的解释。你会做的是以13周期抵消作为条件将表加入自己。然后,您将能够获得从该子查询的每个周期开始的总离开时间。这样你只需要在报告中做相对简单的计算。

0

我@StevenWhite同意,这是一段简单的做这样的事情在你的数据集。我设置的样本中SQL小提琴这里

http://sqlfiddle.com/#!3/9eecb7db59d16c80417c72d1/9722

的代码如下: 2016年期间它给周围26-27%的结果。基本计算方法是前12个'离职'的总和除以'平均员工总数'的平均值。在本例中它也包括当前时间段,但您可以通过在查询结尾附近编辑BETWEEN子句来轻松调整范围。

DECLARE @data TABLE ([Year] int, [Period] int, Departures float, [Avg Total Employees] float) 

INSERT INTO @data 
VALUES 
(2015, 1, 2, 100), 
(2015, 2, 3, 99), 
(2015, 3, 4, 98), 
(2015, 4, 0, 102), 
(2015, 5, 1, 100), 
(2015, 6, 0, 98), 
(2015, 7, 4, 99), 
(2015, 8, 3, 96), 
(2015, 9, 4, 100), 
(2015, 10, 0, 98), 
(2015, 11, 0, 97), 
(2015, 12, 2, 99), 
(2015, 13, 3, 98), 
(2016, 1, 2, 100), 
(2016, 2, 4, 97) 

-- add a CTE with a row number to help with joining ranges of records 
;WITH tmp AS 
(
    SELECT *, ROW_NUMBER() OVER(ORDER BY [Year], [Period]) as rn FROM @data 
) 

SELECT DISTINCT -- DISTINCT because we are not grouping, instead using windowed functions 
     a.[Year], a.[Period] 
     , CAST(SUM(b.Departures) OVER(PARTITION BY a.[Year], a.[Period])/AVG(b.[Avg Total Employees]) OVER(PARTITION BY a.[Year], a.[Period]) as float) AS TurnOverRate 
    FROM tmp a 
     JOIN tmp b on a.rn - b.rn between 0 and 12 -- raneg of periods to be included 
order by a.[Year], a.[Period] 
+0

感谢球员,遗憾的是,虽然我已经用SSRS工具有了很大的进步,这解决方案是我目前的SQL的知识矫枉过正,和所有我得到的是错误的弹出窗口(和花白的头发),因为我想在我的查询设计器来实现这一笑,但我倔强和执着,所以我会摆动在这一个。 –

+0

设计师赢了;处理这样的事情,你必须在文本模式下进行。发布查询和一些示例数据,如果不清楚表中包含什么,我今晚晚些时候会看一看。 –

+0

Srry艾伦的延迟,我无法昨天来上班,但非常感谢您的报价,我希望EDIT2提供了所有你建议的信息。 –