如何在MDX查询中使用子查询或(WITH)语句?

时间:2018-03-09 13:14:30

标签: sql mdx mdxstudio mdx-query

我将CustomerToFactor作为度量,将客户作为维度。现在我想创建一个像这个SQL代码的MDX代码,但我不能。因为(WITH)语句在MDX中有另一种含义。

    with Total_Customer(    
        select cus_id    
              ,sum(ctf_price) cus_total_price    
        from dbo.Customer    
        join dbo.CustomertoFactor on cus_id = ctf_cus_id    
        group by cus_id    
    )    
    select cus_id    
          ,cus_name    
          ,ctf_date    
          ,ctf_price    
          ,(cus_total_price / 100 * ctf_price) as Price_pro_customer    
    from dbo.Customer    
    join dbo.CustomertoFactor on cus_id = ctf_cus_id    
    join Total_Customer on Total_customer.cus_id = dbo.Customer.cus_id   


SELECT NON EMPTY { [Measures].[ctf_date]     
                  ,[Measures].[ctf_price] 
                  , (?)  Price_pro_customer    
                  } ON COLUMNS    
      ,NON EMPTY {[Customer].[Customer - cus_name].[Customer - cus_name].ALLMEMBERS}    
FROM [CustomerToFactor]  

感谢您的回答。但它不起作用。实际上我希望它按照你命名的每个名字进行分组。例如:对于名称Alex,只需计算Alex(100 + 300 = 400)和Group by的总和。

enter image description here

2 个答案:

答案 0 :(得分:0)

我真的不明白计算点:) 但无论如何,在MDX中,您可以按照以下方式计算自己的度量:

WITH MEMBER [Measures].[Price_pro_customer] AS 
        (SUM([Measures].[ctf_price]) / 100 * [Measures].[ctf_price])

SELECT NON EMPTY { [Measures].[ctf_date]     
                 ,[Measures].[ctf_price] 
                 ,[Measures].[Price_pro_customer] 
                 } ON COLUMNS    
        ,NON EMPTY {[Customer].[Customer - cus_name].[Customer - cus_name].ALLMEMBERS}    
FROM [CustomerToFactor]

我不确定你会得到与SQL查询相同的结果,因为你有[Customer]。[Customer - cus_name]。[Customer - cus_name] .ALLMEMBERS在基本上执行GROUP BY的行上客户名称。

因此,如果在表中您为同一客户提供了多行,则每个客户的MDX查询输出应为1行。 SUM([Measures]。[ctf_price])也是不同的,因为它总结了所有客户

答案 1 :(得分:0)

我认为您应该为ctf_date创建日期维度引用。 那你的mdx应该如下:

WITH MEMBER [Measures].[Price_pro_customer] AS
SUM([DimDate].[ctf_date].[All], [Measures].[ctf_price]) / 100 * [Measures].[ctf_price]

SELECT NON EMPTY { 
                   [Measures].[ctf_price] ,
                   [Measures].[Price_pro_customer]    
                 } ON COLUMNS ,   
       NON EMPTY {[Customer].[Customer - cus_name].[Customer - cus_name].ALLMEMBERS * 
                  [DimDate].[ctf_date].[ctf_date].ALLMEMBERS} ON ROWS    
FROM [CustomerToFactor]