• Filter函数详析


    select
    Filter(
    [Product].[Category].Members,
    [Measures].[Dollar Sales]>900000 //and [Measures].[Unit Sales]>90000
    )
    on axis(0)
    from Sales
    Where ([Time].[2005], [Measures].[Dollar Sales])

    查询的结果是:
    clip_image0023

    select
    Filter(
    [Product].[Category].Members,
    [Measures].[Dollar Sales]>900000 and [Measures].[Unit Sales]>90000 
    )
    on axis(0)
    from Sales
    Where ([Time].[2005], [Measures].[Dollar Sales])

    查询的结果是:

    clip_image004

    为什么Filter函数的加了and [Measures].[Unit Sales]>90000条件后,返回的列只有All呢,难道Filter函数只能用一个条件吗

     

    select
    Filter(
       
    [Product].[Category].Members,
       
    [Measures].[Dollar Sales]>1.4*
        (
    [Measures].[Dollar Sales],
           
    [Time].[YQMD].CurrentMember.PrevMember
        )
    )
    on axis(0)
    from Sales
    Where ([Time].[YQMD].[2005], [Measures].[Dollar Sales])

    因为上下文的时间成员是[2005],则前一个时间成员应该是[2005], 即[Time].[YQMD].CurrentMember.PrevMember的成员是[2004]
    image 

     
    因为上下文从每个维度中取出一个成员放入其中,所以在表达式中可以更多地依靠它进行查询。下面的查询与前面的查询结果一样,但却使用了不同的表达式,这是因为filter()函数中的上下文包含并使用了[measures].[Doolar Sales]
    1.4*
        (
    [Measures].[Dollar Sales],
           
    [Time].[YQMD].CurrentMember.PrevMember
        )

    改成了1.4*[Time].[YQMD].CurrentMember.PrevMember

    select
    Filter(
       
    [Product].[Category].Members,
       
    [Measures].[Dollar Sales]>
       
    1.4*[Time].[YQMD].CurrentMember.PrevMember
    )
    on axis(0)
    from Sales
    Where ([Time].[YQMD].[2005], [Measures].[Dollar Sales])

    image

  • 相关阅读:
    oracle分区表总结
    Oracle AMDU用法
    sql_patch用法
    oracle resource_managed限制个人用户使用并行
    oracle 服务的故障转移测试
    RAC修改public ip,vip,priv_ip,sacn_ip
    oracle tfactl使用 TFA
    oracle dbms_metadata.get_ddl使用总结
    Oracle分析函数总结
    继承与接口的区别
  • 原文地址:https://www.cnblogs.com/timy/p/1606811.html
Copyright © 2020-2023  润新知