我需要一些关于表达式的帮助。我需要一份报告,显示当前年份以及前一年关于此规则表达式(上一个上一个上一个)/上一个上一个* 100的字段的计算。报告也在年份参数上运行。
以下是结果的示例
例如,我选择了2010年2011年的2012年
year
Data 2010 2011 2012
hp 14 25 30
Dell 17 18 20
和我想要的结果
year
Data 2010 2011 2012 2011/2012
hp 14 25 30 0.002 (Last -Last Previous)/(last Previous*100) =(30-25)/(25*100)
Dell 17 18 20 0.0040
我该怎么做
SELECT
NON EMPTY
{[Measures].[Val]} ON COLUMNS
,NON EMPTY
{
[DimCAT].[lbl].[lbl].ALLMEMBERS * [DimDate].[Year].[Year].ALLMEMBERS
} ON ROWS
FROM [Data];
答案 0 :(得分:0)
通过mdx
,您需要使用WITH
条款
添加的calculated member
称为2011/12
,但实际上是年度层次结构中与上一年相比的最后一个成员 - 所以可能不完全符合您的要求:
WITH
MEMBER [DimDate].[Year].[2011/12] AS
(
Tail([DimDate].[Year].[Year].ALLMEMBERS).Item(0).Item(0)
-
Tail([DimDate].[Year].[Year].ALLMEMBERS).Item(0).Item(0).PrevMember
)
/
Tail([DimDate].[Year].[Year].ALLMEMBERS).Item(0).Item(0).PrevMember
* 100
SELECT
NON EMPTY
{
[DimDate].[Year].[Year].ALLMEMBERS
,[DimDate].[Year].[2011/12]
} ON COLUMNS
,NON EMPTY
{[DimCAT].[lbl].[lbl].ALLMEMBERS} ON ROWS
FROM [Data]
WHERE
[Measures].[Val];
使用strToSet
函数,您可以使用参数
WITH
SET [s] AS
StrToSet('{[DimDate].[Year].[Year].[' + @Yr + ']}')
MEMBER [DimDate].[Year].[LastVsPrev] AS
([s].Item(0).Item(0) - [s].Item(0).Item(0).PrevMember)
/
[s].Item(0).Item(0).PrevMember
* 100
SELECT
NON EMPTY
Union
(
{
[s].Item(0).Item(0).PrevMember.PrevMember : [s].Item(0).Item(0)
}
,{[DimDate].[Year].[LastVsPrev]}
) ON COLUMNS
,NON EMPTY
{[DimCAT].[lbl].[lbl].ALLMEMBERS} ON ROWS
FROM [Data]
WHERE
[Measures].[Val];
答案 1 :(得分:-1)
如果您有机会更改源数据集,我会将年份为UNPIVOTed的数据集和带有Row_Number的数据集按年份降序排列。这样你可以过滤你想要的最后两年。 (这在SSRS 2008中进行了测试,可能会有更简单的方法,特别是在以后的版本中)
select
Data,[year],measure,ROW_NUMBER() over (partition by data order by [year] desc) i
from (values
('hp',2010,14),
('hp',2011,25),
('hp',2012,30),
('Dell',2010,17),
('Dell',2011,18),
('Dell',2012,20)) t (data,year,measure)
Data year measure i
hp 2010 14 3
hp 2011 25 2
hp 2012 30 1
Dell 2010 17 3
Dell 2011 18 2
Dell 2012 20 1
对数据执行年份和行组的列组。 表达式 SUM(Field!Measure.Value)在2组的交叉单元格上。
在列组后添加列,并将表达式添加到标题单元格
=MAX(iif(Fields!i.Value = 2,Fields!year.Value.ToString(),""))+"/"+ MAX(iif(Fields!i.Value = 1,Fields!year.Value.ToString(),""))
和Cell的下一个表达式
=iif(SUM(iif(Fields!i.Value = 2,Fields!measure.Value,0))=0,0,SUM(iif(Fields!i.Value = 1,Fields!measure.Value,0))-SUM(iif(Fields!i.Value = 2,Fields!measure.Value,0)) / (SUM(iif(Fields!i.Value = 2,Fields!measure.Value,0))*100))
我认为公式是可以的,但它返回的值与您预期发布的值不同。