Ssas 如何使用MDX表达式获取前一年

Ssas 如何使用MDX表达式获取前一年,ssas,mdx,Ssas,Mdx,我在SSRS数据集中有一个正在工作的MDX查询,它不是由我完成的,里面有以下几行: ON COLUMNS FROM ( SELECT ( STRTOSET(@pYear, CONSTRAINED) ) ON COLUMNS FROM ( SELECT ( STRTOSET(@pMonth, CONSTRAINED) ) ... 一切正常。但是,我需要复制此数据集,以获得另一个数据集,该数据集具有相同的数据,但来自前一年的数据(减去一) 我试图修改它,但出现了一个错误,然后是关于MDX,直到

我在SSRS数据集中有一个正在工作的
MDX
查询,它不是由我完成的,里面有以下几行:

ON COLUMNS FROM ( SELECT ( STRTOSET(@pYear, CONSTRAINED) ) 
ON COLUMNS FROM ( SELECT ( STRTOSET(@pMonth, CONSTRAINED) ) 
...
一切正常。但是,我需要复制此数据集,以获得另一个数据集,该数据集具有相同的数据,但来自前一年的数据(减去一)

我试图修改它,但出现了一个错误,然后是关于
MDX
,直到现在我才知道。然而,我还不能确切地理解它是如何工作的,以及我如何获得上一年的成绩。我已经阅读了很多文档,但示例对我来说不是很清楚

我已经尝试过这个函数,但是我不能使它有效,因为我发现的所有例子都是从<<代码>用子句开始的,它不能在查询的中间工作,加上这些例子似乎使用<代码>成员< /代码>,但是我的查询使用的是<代码> SET(如果我不误解它)。 我一开始就尝试使用:

MEMBER[度量].[Ano Prev]作为总和(STRTOMEMBER(@pYear),-1)

但是在那之后,我就不能像以前那样在台词中使用它了

我怎样才能做到呢?(非常感谢您的见解和“如何”解释!)

更新 请注意,问题中的
@pYear
在查询中被翻译为
@pEjercicio

完成原始查询:

WITH MEMBER [Measures].[Comision] AS [Measures].[Comision Once]*[Measures].[Importe] 

SELECT NON EMPTY { [Measures].[Importe], [Measures].[Unidades], [Measures].[N Tiendas], [Measures].[Comision Once] } ON COLUMNS, 


NON EMPTY { ([Tiempo].[Periodos].[Ano]*[Tiempo].[Meses].[Mes].ALLMEMBERS * [Productos].[Once Modalidad].[Once Modalidad].ALLMEMBERS ) } 


ON ROWS FROM ( SELECT (-{[Productos].[Cod-Producto].[Cod Producto].&[139972]} ) 


ON COLUMNS FROM ( SELECT ( STRTOSET(@pEjercicio, CONSTRAINED) ) 
ON COLUMNS FROM ( SELECT ( STRTOSET(@pMes, CONSTRAINED) ) 
ON COLUMNS FROM ( SELECT ( STRTOSET(@pSemana, CONSTRAINED) ) 
ON COLUMNS FROM ( SELECT ( -{ [Productos].[Once Modalidad].&[-] } ) 
ON COLUMNS FROM ( SELECT ( STRTOSET(@pOrganizacion, CONSTRAINED) ) 
ON COLUMNS FROM ( SELECT ( STRTOSET(@pDirectorRegional, CONSTRAINED) ) 
ON COLUMNS FROM ( SELECT ( STRTOSET(@pTecnicoComercial, CONSTRAINED) ) 
ON COLUMNS FROM ( SELECT ( STRTOSET(@pCoordinadorComercial, CONSTRAINED) ) 
ON COLUMNS FROM ( SELECT ( STRTOSET(@pTecnicoFranquicia, CONSTRAINED) ) 
ON COLUMNS FROM [Transacciones]))))))))))
根据答案修改查询:

WITH MEMBER [Measures].[Comision] AS [Measures].[Comision Once]*[Measures].[Importe] 
MEMBER [Measures].[Ano Prev] AS SUM((STRTOMEMBER(@pEjercicio).PrevMember) , -1)

SELECT NON EMPTY { [Measures].[Importe], [Measures].[Unidades], [Measures].[N Tiendas], [Measures].[Comision Once] } ON COLUMNS, 


NON EMPTY { ([Tiempo].[Periodos].[Ano]*[Tiempo].[Meses].[Mes].ALLMEMBERS * [Productos].[Once Modalidad].[Once Modalidad].ALLMEMBERS ) } 


ON ROWS FROM ( SELECT (-{[Productos].[Cod-Producto].[Cod Producto].&[139972]} ) 

ON COLUMNS FROM ( select ( 
STRTOSET(@pEjercicio, CONSTRAINED).item(0).prevmember,
STRTOSET(@pEjercicio, CONSTRAINED).item(1)  ) 
ON COLUMNS FROM ( SELECT ( STRTOSET(@pMes, CONSTRAINED) ) 
ON COLUMNS FROM ( SELECT ( STRTOSET(@pSemana, CONSTRAINED) ) 
ON COLUMNS FROM ( SELECT ( -{ [Productos].[Once Modalidad].&[-] } ) 
ON COLUMNS FROM ( SELECT ( STRTOSET(@pOrganizacion, CONSTRAINED) ) 
ON COLUMNS FROM ( SELECT ( STRTOSET(@pDirectorRegional, CONSTRAINED) ) 
ON COLUMNS FROM ( SELECT ( STRTOSET(@pTecnicoComercial, CONSTRAINED) ) 
ON COLUMNS FROM ( SELECT ( STRTOSET(@pCoordinadorComercial, CONSTRAINED) ) 
ON COLUMNS FROM ( SELECT ( STRTOSET(@pTecnicoFranquicia, CONSTRAINED) ) 
ON COLUMNS FROM [Transacciones]))))))))))
一些探查器数据:

<Parameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:schemas-microsoft-com:xml-analysis">
        <Parameter>
          <Name>pEjercicio</Name>
          <Value xsi:type="xsd:string">-1</Value>
        </Parameter>
        <Parameter>
          <Name>pMes</Name>
          <Value xsi:type="xsd:string">[Tiempo].[Periodos].[Mes].&amp;[1]&amp;[2019]&amp;[TR-1]</Value>
        </Parameter>

佩杰尔西西奥
-1
pMes
[Tiempo].[Periodos].[Mes].&;[1] &;[2019]&;[TR-1]

您可以使用prevmember解决此问题

MEMBER [Measures].[Ano Prev] AS SUM((STRTOMEMBER(@pYear).PrevMember) , -1)

ON COLUMNS FROM ( SELECT ( STRTOSET(@pYear, CONSTRAINED) ) 
ON COLUMNS FROM ( SELECT ( STRTOSET(@pMonth, CONSTRAINED) ) 
在上面的代码中,写入选择为

select 
( 
STRTOSET(@pYear, CONSTRAINED).item(0).prevmember,
STRTOSET(@pYear, CONSTRAINED).item(1)
)
如果上述方法无效,请编辑问题以显示表达式的文本值

SELECT ( STRTOSET(@pYear, CONSTRAINED)
基于以上编辑 成员[措施].[委员会]作为[措施].[委员会一次]*[措施].[进口]

SELECT NON EMPTY { [Measures].[Importe], [Measures].[Unidades], [Measures].[N Tiendas], [Measures].[Comision Once] } ON COLUMNS, 


NON EMPTY { ([Tiempo].[Periodos].[Ano]*[Tiempo].[Meses].[Mes].ALLMEMBERS * [Productos].[Once Modalidad].[Once Modalidad].ALLMEMBERS ) } 


ON ROWS FROM ( SELECT (-{[Productos].[Cod-Producto].[Cod Producto].&[139972]} ) 


ON COLUMNS FROM ( SELECT ( STRTOSET(@pEjercicio, CONSTRAINED).item(0).prevmember ) 
ON COLUMNS FROM ( SELECT ( STRTOSET(@pMes, CONSTRAINED) ) 
ON COLUMNS FROM ( SELECT ( STRTOSET(@pSemana, CONSTRAINED) ) 
ON COLUMNS FROM ( SELECT ( -{ [Productos].[Once Modalidad].&[-] } ) 
ON COLUMNS FROM ( SELECT ( STRTOSET(@pOrganizacion, CONSTRAINED) ) 
ON COLUMNS FROM ( SELECT ( STRTOSET(@pDirectorRegional, CONSTRAINED) ) 
ON COLUMNS FROM ( SELECT ( STRTOSET(@pTecnicoComercial, CONSTRAINED) ) 
ON COLUMNS FROM ( SELECT ( STRTOSET(@pCoordinadorComercial, CONSTRAINED) ) 
ON COLUMNS FROM ( SELECT ( STRTOSET(@pTecnicoFranquicia, CONSTRAINED) ) 
ON COLUMNS FROM [Transacciones]))))))))))

这是我通过一些变通方法(在同事的指导下)解决问题的方法,因为我最初的目标是获得上一年的完整数据集。但是,此解决方案只针对所需的值,而不是一个完整的新数据集

其思想是将值作为
成员
获取,然后将其添加到

由于我需要获取上一年的数据(这里是问题的标题),因此我必须使用
parallelperiod
来获取今年的数据。此参数为正的
int
,因为它表示滞后

MEMBER[Measures].[Your_参数\u上一年]作为(PARALLELPERIOD([Time].[Years].[Years].[Year],1[Time].[Years].[CurrentMember],[Measures].[Your_参数])

如果需要多个值,则需要准备所需数量的成员

然后,您必须将其包括在
选择中,如:

SELECT NON EMPTY { [ ...
[Measures].[Your_Parameter],
[Measures].[Your_Parameter_Previous_Year],
... }

就这样。现在您的数据集中有上一年的值。

我已经尝试过了,尽管它符合MDX语法,但在运行时我仍然会遇到相同的错误。我将使用完整查询进行更新,依此类推。@BtcSources我需要传递给服务器的实际查询。您可能需要使用探查器来添加有关参数的探查器数据。在其他参数中可能存在我无法共享的数据,因此如果您从日志中了解特定数据,请让我知道@BtcSources我需要包含年份的参数的参数值。我怀疑今年“选择(stroset(@pEjercicio,constrated)”与它显示的探查器数据一样-1。多亏了同事的帮助,我以不同的方式获得了我想要的结果。我将把它作为一个答案发布,因为它使用了不同的方法,没有修改
@pEjercicio
参数。