在MDX(SSAS)中的SQL子选择,分组依据,总和等价

时间:2016-07-19 21:03:56

标签: ssas mdx

我在SSAS中创建计算成员时遇到问题。 事实表:

  Date       Store       Product        Sales_in_USD
    --------------------------------------------------
    2016-07-01 Store1      Product1       50
    2016-07-01 Store1      Product2       100
    2016-07-01 Store2      Product3       70
    2016-07-01 Store2      Product2       85

尺寸: 日期,商店,产品

我希望得到类似的东西: 如果我按某些产品过滤,我希望通过此商店和日期获得所有销售,包括过滤产品+其他产品的销售,例如我希望按产品1过滤:

SQL code:
select sum(Sales_in_USD)
from [Fact table]
where Store in (select Store from [Fact table] where Product="Product1")

执行这个sql代码我得到所有Sales by Store1。

当我想要创建计算成员时,如何使用MDX创建它?

计算成员的输出必须是下一个:

Product   Total_Sales_By_Store
------------------------------
Product1  50+100=150
Product2  50+100+70+85=305
Product3  70+85=155

3 个答案:

答案 0 :(得分:0)

adGuestNum

根据您的要求,您真的不需要计算成员,因为这些措施将为您完成工作

对于特定产品名称Product1,则

SELECT 
  [Measures].[Sales_in_USD] ON 0,
  {[Store].[Store Name].MEMBERS,
   [Product].[Product].MEMBERS} ON 1
 FROM [Cube Name];

答案 1 :(得分:0)

1 - 确定所选产品的有效商店。

NonEmpty(
    [Store].[Store Name].MEMBERS,
    ([Product].[Product].Currentmember,[Measures].[Sales_in_USD])
)

2 - 获得当前产品的商店后,您需要计算可能元组的值的总和(交叉连接)。

with member Measures.[Total Sum of Stores] as
sum(
[Product].[Product].Currentmember *
NonEmpty
   (
    [Store].[Store Name].MEMBERS,
    ([Product].[Product].Currentmember,[Measures].[Sales_in_USD])
   )    
,
[Measures].[Sales_in_USD]
)

select Measures.[Total Sum of Stores] on 0
from [YourCube]
where [Product].[Product].[Product1]

答案 2 :(得分:0)

我认为Sourav几乎已经钉了它,但它可能更普遍吗?

WITH 
MEMBER [Measures].[Total Sum of Stores] AS
SUM(
  NONEMPTY(
    [Store].[Store Name].MEMBERS,
    (
      [Product].[Product].Currentmember
     ,[Measures].[Sales_in_USD]
    )
  )    
  ,[Measures].[Sales_in_USD]
)
SELECT
 [Measures].[Total Sum of Stores] on 0,
 [Product].[Product].[Product].MEMBERS ON 1
FROM [YourCube];