1

我有一个查询,它返回匹配两个浮点数计算的条目的结果。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)个大小为(max - min)/n 的桶。

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

4

0 回答 0