【问题标题】:Multi where conditions in an mdx query (LINQ to mdx) by Percolator analysis servicesPercolator 分析服务在 mdx 查询(LINQ to mdx)中的多个 where 条件
【发布时间】:2018-07-04 10:53:08
【问题描述】:

我正在尝试对以下 linq 查询应用多个 where 条件:

            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]))} 

Percolator analysis services github

【问题讨论】:

    标签: c# sql linq mdx cube


    【解决方案1】:

    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];
    

    它返回这个:

    但是如果我们将 2 年的成员移到 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]});
    

    结果

    【讨论】:

    • 但这是自动生成的(由工具 percolator 生成)我只能控制 linq 到 mdx 代码
    • 看起来像工具中的一个错误。我将针对 Adv Wrks 进行测试并编辑我的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多