Мульти где условия в запросе MDX (LINQ to MDX) сервисами анализа Percolator - PullRequest
0 голосов
/ 04 июля 2018

я пытаюсь применить несколько условий в следующем запросе linq:

            using (var _DB = new MyDB())
        {
                   var QryYear = from model in _DB.DL
                          where model.BusinessDate.BusinessDate.Years["2016"]
                          where model.BusinessDate.BusinessDate.Years["2017"]
                          where model.NumL.Num[FirstNumber].Function("Lag(2)") | model.NumL.Num[SecoundNumber]
                          select new MdxQuery
                          { OnColumns = model.Amount };
            result = QryYear.Percolate<AmountModel>().ToList();

но я получаю это исключение ({"Query (13, 1) Иерархия BusinessDate используется более одного раза в функции Crossjoin."}) Вот как выглядит запрос в MDX:

SELECT{Measures.[Amount]} ON 0
 //----------             From / SubCube               ----------
 FROM [DL]
//----------                 Slicers                  ----------
WHERE
([BusinessDate].[BusinessDate].[Years].[2016],  [BusinessDate].[BusinessDate]. 
[Years].[2017]
,   ([DL].[Num].[55].Lag(2) : [DL].[Num].[2305]))} 

Услуги по анализу перколяторов github

1 Ответ

0 голосов
/ 07 июля 2018

Скобки () в MDX означают либо кортеж, либо перекрестное соединение, вы используете скобки в предложении WHERE. Попробуйте объединить два указанных года в набор фигурных скобок:

SELECT{Measures.[Amount]} ON 0
 //----------             From / SubCube               ----------
 FROM [DL]
//----------                 Slicers                  ----------
WHERE
(
{[BusinessDate].[BusinessDate].[Years].[2016],  
[BusinessDate].[BusinessDate]. [Years].[2017]
}
,   ([DL].[Num].[55].Lag(2) : [DL].[Num].[2305]))

примечание

Просто чтобы подтвердить. Следующее MDX действительно:

SELECT 
    NON EMPTY [Measures].[Internet Sales Amount] ON 0,
    NON EMPTY [Date].[Calendar Year].MEMBERS ON 1
FROM [Adventure Works];

Возвращает это:

enter image description here

Но если мы переместим двухлетних участников в предложение WHERE, как, например, ваш сценарий, то это недопустимый MDX:

SELECT 
    NON EMPTY [Measures].[Internet Sales Amount] ON 0
FROM [Adventure Works]
WHERE ([Date].[Calendar Year].&[2005], [Date].[Calendar Year].&[2006]);

Сообщение об исключении:

Выполнение запроса ... Запрос (4, 1) Иерархия календарного года используется более одного раза в функции Crossjoin. Выполнить завершено

Но если вы последуете моему предложению и добавите фигурные скобки, то оно действительно:

SELECT 
    NON EMPTY [Measures].[Internet Sales Amount] ON 0
FROM [Adventure Works]
WHERE ( {[Date].[Calendar Year].&[2005], [Date].[Calendar Year].&[2006]});

Результаты в

enter image description here

...