SQL到MDX的转换

时间:2013-06-24 14:25:49

标签: mdx

我在sql语言中有这个where子句:

where (cond1=1 or cond2=1) and cond3=1

如何通过切片(条件进入where)在MDX中获得此结果?

{[cond1].&[1],[cond2].&[1]} /*and*/ {[cond3].&[1]}

由于

2 个答案:

答案 0 :(得分:1)

尝试使用子多维数据集:

    Select
    -- YOUR SELECTED MEASURES AND DIMENSIONS
    From
    (
     Select
       {[cond1].&[1],[cond2].&[1]}  on 0
      ,{[cond3].&[1]} on 1
   -- ,{more slices} on x
     From [CubeName]
    )

希望这有帮助!

答案 1 :(得分:0)

您可以使用如上所述的子多维数据集表达式,但这不是唯一的选项。如果使用子多维数据集,则会大大提高查询性能(假设您不在其中执行交叉连接)。

您还可以在返回cube的最后一个表达式后使用常规WHERE关键字:

select
{ .. } on 0,
{ .. } on 1
from (select { [Dim1].[X].allmembers } on 0)
where ([Dim2].[Y].&[Y1])

或者:

select
{ .. } on 0,
{ .. } on 1
from (select { [Dim1].[X].allmembers } on 0)
where {[DimTime].[Time].[Year].&[2001] : [DimTime].[Time].[Year].&[2015]}

这在执行结束时应用,这意味着性能可能会降低。但是,如果需要对所有轴应用外部过滤器,则可以选择此选项。

过滤成员值的另一种方法是使用元组表达式:

with member LastDateSale as ( (Tail(EXISTING [DimTime].[Time].[Dates].members,1), [Measures].[ActualSales]) )

这将采用您的DimTime轴,应用外部过滤器,从中获取最后一个元素,并在可能的情况下为其计算[ActualSales]。