• 循环上下文和.CurrentMember函数


          出了当前单元的上下文,还有但前迭代或循环的上下文。Generate()函数用来提供迭代。聚合函数(如Sum(),Max()等等)同样提供循环上下文,每迭代一次就对表达式求值一次。

    例1.
           考虑一下的查询,选出一组作品集,这个集计算其[Unit Sales]对其同类最大[Unit Sales]的比例。

    with
    member
    [Measures].[Pct of Max Siblings] as
    '[Measures].[Unit Sales]/
    Max(
    [Product].[Category].CurrentMember.Siblings,
    [Measures].[Unit Sales]
    )
    ' 

    select 
    {
    [Measures].[Unit Sales], [Measures].[Pct of Max Siblings]}
    on axis(0),
    {
    [Product].[Doing].Children} on axis (1)
    from Sales
    where [Time].[2005] 

    image

    1)Max()对[Product].[Category]的子成员启动循环,CurrentMember是每循环一次[Category]的一个成员引用,Siblings返回指定成员的同级,包括该成员本身
    2)Max()每次循环的单元值为41,808。

    例2.

          上下文也有嵌套关系。通常情况下,一系列不同的公式同时执行时,会以嵌套上下文来结束。例如有这样的分析需求:选出所包含的月份中各时期增长率至少为13%的季度。

    select
    filter(
    [Time].[Quarter].members,   
       
    Max(
           
    [Time].[YQMD].CurrentMember.Children,   
            (
    [Time].[YQMD].CurrentMember
           
    /[Time].[YQMD].CurrentMember.PrevMember)
        )
    >=1.13
    )
    on axis(0)
    from Sales
    where ([Measures].[Unit Sales], [Product].[Tools])

    image

    过程分解如下:

    1)Filter对所有季度启动循环
    2)Max()的第一个参数CurrentMember在这些季度上循环
    3)附加的.Children在每个月上启动循环。
    4)Max()第二部分的比值表达式和Time.CurrentMember轮流设置每个月。
    5)只有当Max()返回的值>=1.13时,则Max() >= 1.13为真。

  • 相关阅读:
    pikachu漏洞练习之sql注入
    redis未授权访问漏洞复现
    Springboot导出Excel并下载
    Springboot使用javaMail进行邮件发送
    springboot实现上传并解析Excel
    微信提示“在浏览器打开”效果实现
    docker入门(二):镜像和容器
    centos安装mysql
    centos安装tomcat
    centos7安装jdk
  • 原文地址:https://www.cnblogs.com/timy/p/1608979.html
Copyright © 2020-2023  润新知