对不起这个奇怪的问题标题,我很难说出我想要完成的事情。
我有一个OrderLine Fact表。每行都有一个产品(Category / SubCategory / Product)。我需要一个度量来返回在ProductCategory中有一个或多个Orderlines的Orders(而不是OrderLines)的数量。由于Order Fact Table未链接到Product,我必须从OrderLine Fact Table获取此数据。
我对MDX的了解相当有限,根据我的想法,我发现的只是为每个OrderLine设置“订单数量”(1或-1)度量,并且在OrderLumber中具有退化维度OrderLine表。有了这个,我想我可以在OrderLine Fact Table中获得OrderNumber的“订单数量”的MIN。它有效:
WITH MEMBER [Measures].[Test] AS
SUM([Order Number].[Order Hierarchy].CURRENTMEMBER, MIN([Order Number].[Order Hierarchy].CURRENTMEMBER.CHILDREN, [Measures].[Number of Orders]))
SELECT
{[Measures].[Number of Orders],[Measures].[Test]} ON 0,
{[Order Number].[Order Number].&[110100000030-BLA-01745892],[Order Number].[Order Number].&[110100000031-BLA-0]} ON 1
FROM SalesCube
对于包含3行的订单,[Measures].[Number of Orders]
将返回3,[Measures].[Test]
则返回1。
我现在的问题是,如果我想按产品类别执行此查询:
WITH MEMBER [Measures].[Test] AS
SUM([Order Number].[Order Hierarchy].CURRENTMEMBER, MIN([Order Number].[Order Hierarchy].CURRENTMEMBER.CHILDREN, [Measures].[Number of Orders]))
SELECT
{[Measures].[Number of Orders],[Measures].[Test]} ON 0,
{[Products].[Category Hierarchy].MEMBERS} ON 1
FROM SalesCube
它给了我所有OrderLines的MIN,它是(-1)并将它加到-1。我需要的是查询返回包含产品类别的每个“订单号”的最小“订单数量”的总和,而不必使用行轴上的“订单号”。
这有意义吗?
答案 0 :(得分:1)
据我所知,对此进行建模的最佳方法是在订单行事实表中添加“订单ID”,并在其上定义一个不同的计数作为度量[Measures].[Order Count]
。那时应该不需要复杂的MDX。
如果您需要用-1减去订单,也许您可以将-1
和1
转换为具有用户可读值的属性,例如“已放置”和“已撤消”。然后“订单计数”度量将变得不可见,并且向用户显示计算的度量,其将实现如下:
([Measures].[Order Count], [Order].[Order Status].[placed]) -
([Measures].[Order Count], [Order].[Order Status].[reversed])