Как я могу использовать подзапрос или (WITH) статистику в MDX Query?

У меня есть CustomerToFactor как мера и клиент как измерение. Теперь я хочу создать код MDX, как этот код SQL, но не могу. потому что (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.

2 ответа

Я думаю, что вы должны создать ссылку на измерение даты 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]  

Я не очень понимаю смысл расчета:) Но в любом случае, в 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 строку для каждого клиента. Сумма ([Показатели]. [Ctf_price]) также отличается, так как она суммируется по всем клиентам

Другие вопросы по тегам