通过使用MDX比较维度成员和度量值来创建存储桶
我有一个具有层次结构的产品维度-产品id、初始价格、产品名称和度量值-销售单位、每单位成本、每单位收入。对于每个产品标识,我需要将初始价格与每个单元的收入进行比较,然后根据比较结果将其分配给桶。通过使用MDX比较维度成员和度量值来创建存储桶,mdx,Mdx,我有一个具有层次结构的产品维度-产品id、初始价格、产品名称和度量值-销售单位、每单位成本、每单位收入。对于每个产品标识,我需要将初始价格与每个单元的收入进行比较,然后根据比较结果将其分配给桶。 考虑下面的例子: 输入: 产品标识初始价格每单位收入 11012 22018 330 输出: 产品标识桶名称 1利润 2损失 3相同的 如何使用MDX实现这一点?将成员[Measures].[Bucket]作为 WITH Member [Measures].[Bucket] AS
考虑下面的例子:
输入:
产品标识初始价格每单位收入
11012
22018
330
输出:
产品标识桶名称
1利润
2损失
3相同的
如何使用MDX实现这一点?
将成员[Measures].[Bucket]作为
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]
案例
当[措施].[初始价格]<[措施].[每单位收入]时
“利润”
当[措施].[初始价格]>[措施].[每单位收入]时
“损失”
其他的
“相同”
终止
选择{[Measures].[Bucket]}
在专栏上,
[产品][产品名称].成员
成排
从[你的立方体]
你应该提供你想要的。请注意,计算的度量值不需要返回数字,它们还可以在MDX中返回字符串(它们甚至可以为某些单元格返回字符串,为其他单元格返回数字)
如果你没有e的价格。G聚合产品级别上的平均价格,并且要在产品级别上进行bucketing,最好的解决方案是在MDX中根本不这样做,而是在多维数据集设计中:只需在关系端计算bucket,并将其作为属性添加到产品维度中
你没有说任何关于其他维度的事情,尤其是时间。如果某些其他维度对确定存储桶也很重要,则可能需要为存储桶添加单独的维度。第四个产品(也是利润)应该如何显示?你想要一个包含“4利润”的新行吗?你真的想用MDX而不是产品名称来显示产品ID吗?你能不能用MDX来显示你显示为“输入”的数据?这可以在不使用维度名称等的情况下简化回答,从而使您更容易使用答案。是的,如果有第四个产品有利润,那么它应该显示为一个新行,值为-4和利润。显示product_id或product_name对我来说都可以,因为它们在同一维度中是不同的层次结构,所以逻辑应该是相同的。我应该共享包含维度、层次结构和级别的架构XML吗?不,只有MDX语句生成您到目前为止拥有的数据会有所帮助。现在,我在回答中只是虚构了一些名称。初始价格只是我的产品维度中的一个层次结构,而不是一个衡量标准,因为每个产品的初始价格是相同的,不依赖于业务流程。产品维度有以下层次结构:1。名字2。产品编号3。初始价格是
初始价格
产品Id或名称的属性?即。这些属性与初始价格属性之间是否存在关系?初始价格目前是一个层次结构。但即使我们假设初始价格是一个衡量标准,那么当我们在分类级别进行汇总时,我们希望每个产品首先分配到一个桶中,然后进行汇总。使用您编写的上述查询,它将首先计算该类别中所有产品的所有初始价格和每单位收入的总和,然后进行汇总,这将导致不正确的扣合。@ChiragNahar我在回答中添加了一些建议。