MDX计算和分组

时间:2013-10-24 22:44:24

标签: ssas mdx ssas-2008

我有一个查询返回与两个浮点数的计算匹配的条目的结果。 IE,当两个数字的加权和在一定范围内时:

Select 

    NON EMPTY Measures.AllMembers on 0
from (  
    Select
        Filter(MyDim.[p1].Children * MyDim.[p2].Children, 
               MyDim.[p1].CurrentMember.MemberValue * 0.5 +
           MyDim.[p2].CurrentMember.MemberValue * 0.5 >= 70 
           and
           MyDim.[p1].CurrentMember.MemberValue * 0.5 +
           MyDim.[p2].CurrentMember.MemberValue * 0.5 <= 90)
              on 0 
from MyCube])

此查询由c#代码生成,0.5和70和90更改。

首先,有更好的方法吗?

接下来,如何创建一个将使用度量返回结果范围的查询?像

这样的东西
-----------------------------------------------
< 70       | blah blah blah measures measures
70 - 90    | blah blah blah measures measures 
> 90       | blah blah blah measures measures
-----------------------------------------------

如果它自己完成这一切(即通过魔术创建桶)这很好,但我不介意首先找出可能的范围,然后手工(或代码)写出整个查询。目前,我甚至无法弄清楚如何创建WITH成员或集合或其他任何内容,而不必一个接一个地运行单个查询。

编辑:对于一个参数,如果我说

,这是有效的
WITH
Member MyDim.p1.[<70] as
    Aggregate(Filter(MyDim.p1.members,
        MyDim.p1.CurrentMember.MemberValue < 70))
Member Mydim.p1.[70 - 90] as
    Aggregate(Filter(MyDim.p1.members,
        MyDim.p1.CurrentMember.MemberValue >= 70
        and MyDim.p1.CurrentMember.MemberValue <= 90))
Member MyDim.p1.[>90] as
    Aggregate(Filter(MyDim.p1.members,
        MyDim.p1.CurrentMember.MemberValue> 90))
Select {MyDim.p1.[<70],MyDim.p1.[70 - 90], MyDim.p1.[>90] on 1,
measures.Members on 0
from MyCube

这似乎不适用于2参数查询。

编辑:进一步的信息 “参数”是什么意思?来自不同层次结构的值? 对,就是这样。上面的查询中的p1和p2。

您想如何确定水桶?你没有解释“神奇”背后的基本原理。 理想情况下,它会被分解为具有相同数量观察结果的桶,就像构建立方体时的“离散化”一样 - 这将是“魔术”。我打算只接受最小值和最大值,然后将范围分成n(例如10个)大小(最大 - 最小)/ n的桶。

“不起作用”是什么意思?您尝试了什么以及您收到了哪些错误消息? 我将不得不再次写它并在此处发布查询和结果 - 将在几个小时内完成。我认为我尝试的是第二个查询,但过滤器位中的p1 * p2,过滤条件中的加权和。我试图将它全部放入p1层次结构中。从内存中,它运行,但返回所有结果而不过滤任何东西。我很欣赏这是模糊的,并会在这里更新。我只是认为这是如此严重错误,以至于我没有把这个特定的实验放在原来的问题中。

0 个答案:

没有答案