通过使用MDX将Dimension成员与Measure进行比较来创建存储桶

时间:2014-01-09 15:30:48

标签: mdx

我有一个带有层次结构的Product维度 - product_id,initial_price,product_name和Measures - units_sold,cost_per_unit,revenue_per_unit。对于每个product_id,我需要将initial_price与revenue_per_unit进行比较,然后根据比较将其分配给存储桶。

请考虑以下示例:
输入:
product_id initial_price revenue_per_unit
1 10 12
2 20 18
3 30 30

输出:
product_id bucket_name
1利润
2损失
3相同的
如何使用MDX实现这一目标?

1 个答案:

答案 0 :(得分:0)

WITH Member [Measures].[Bucket] AS
            CASE
                WHEN [Measures].[initial_price] < [Measures].[revenue_per_unit] THEN
                     "Profit"
                WHEN [Measures].[initial_price] > [Measures].[revenue_per_unit] THEN
                     "Loss"
                ELSE
                     "Same"
            END
SELECT {[Measures].[Bucket]}
       ON COLUMNS,
       [Product].[Product Name].Members
       ON ROWS
  FROM [yourcube]

应该提供你想要的东西。请注意,计算出的度量不需要返回数字,它们也可以在MDX中返回字符串(它们甚至可以为某些单元格返回字符串,为其他单元格返回一个数字)。

如果您没有e的价格。 G。聚合产品级别的平均价格,并希望在产品级别上进行分级,最好的解决方案根本不是在MDX中做到这一点,而是在多维数据集设计中:只需计算关系方面的桶,然后添加它作为产品维度的属性。

你没有说明其他方面,特别是时间。如果某些其他维度对于确定存储桶也很重要,则可能需要为存储桶添加单独的维度。