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