У меня есть рабочий MDX
запрос в наборе данных SSRS, не сделанный мной, в котором есть следующие строки:
ON COLUMNS FROM ( SELECT ( STRTOSET(@pYear, CONSTRAINED) )
ON COLUMNS FROM ( SELECT ( STRTOSET(@pMonth, CONSTRAINED) )
...
Все работает нормально.Тем не менее, Мне нужно продублировать этот набор данных, чтобы иметь другой набор данных с теми же данными, но из предыдущего года (вычесть один).
Я попытался изменить его, получил ошибку изатем узнал о MDX
, которого я не знал до сих пор.Однако я не смог понять, как именно это работает и как я мог получить в прошлом году.Я читал много документов, но примеры мне не совсем понятны.
Я пробовал использовать функцию Sum , но не смог заставить ее работатьпотому что все примеры, которые я нашел, начинаются с предложения with
, которое не может работать в середине запроса, плюс эти примеры, похоже, используют members
, но мой запрос использует sets
(если я ненеправильно понимаю).
Я пытался использовать в начале:
MEMBER [Measures].[Ano Prev] AS SUM(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>