• Saiku部分函数解析(八)


    Saiku函数解析

    1.   now()  :  获取当前日期 直接使用即可

    2. IIF(logic_exp, string, string): IIF判断,logic_exp是逻辑表达式,结果为true/false , 为true的时候取第二个参数值,为false的时候取第三个参数值。 

    eg:  IIF(1>2,"1大于2","1不大于2")   ,   结果为 1不大于2

    多个IIF嵌套和我们平时使用IF语句是类似的 (下面多iif嵌套语句1与语句2结果是一样的。)

    eg:  (多iif嵌套语句1)

    IIF(datediff("y",cdate(now()),cdate([SaikuUseDate].[SaikuUseDate].CurrentMember.Name))<=7,
    IIF(datediff("y",cdate(now()),cdate([SaikuUseDate].[SaikuUseDate].CurrentMember.Name))>=0,
    IIF( year(cdate(now())) - year(cdate([SaikuUseDate].[SaikuUseDate].CurrentMember.Name))=0,"yes","no"),"no"),"no")  

    也可以将多个IIF嵌套中的条件使用 AND 去连接,这样就是使用一个IIF就行了

    eg:(多iif嵌套语句2)

    IIF(datediff("y",cdate(now()),cdate([SaikuUseDate].[SaikuUseDate].CurrentMember.Name))<=7 
    AND datediff("y",cdate(now()),cdate([SaikuUseDate].[SaikuUseDate].CurrentMember.Name))>=0 
    AND year(cdate(now())) - year(cdate([SaikuUseDate].[SaikuUseDate].CurrentMember.Name))=0,"yes","no")
    

      

    3. year(Date) : 获取日期的年份信息 

    eg: YEAR(cdate("2019-02-26"))

    4. CDate(String) : 将String类型的数据转换为日期类型   

    eg: CDate("2019-02-26")

    5. STR( numeric):  将数据类型转换为String类型

    eg:  STR(55.6)

    6. DateDiff(String, Date, Date) : 得到日期相减的值,第一个参数表示interval,第二个参数是日期类型,第三个是日期类型, eg:  datediff("y", CDate("2019-02-26"), CDate("2019-02-25"))  结算逻辑为 得出2019-02-26至 2019-02-25中相差的天数,结果为 1

    interval的取值如下:

    7.NonEmptyCrossJoin手写MDX语句进行查询的时候需要注意多个rows时的用法

    WITH
    SET [~ROWS1] AS
        {[a].[a].[a].Members}
    SET [filterdata] AS {FILTER([SaikuUseDate].[SaikuUseDate].[SaikuUseDate].Members,[Measures].[耗时]>2000)}
    
    SELECT
    NON EMPTY {[Measures].[耗时]} ON COLUMNS,
    NON EMPTY NonEmptyCrossJoin([filterdata], [~ROWS1]) ON ROWS
    FROM [rs_nbjc_1_1]
    
    
    ps:如果有多个rows,使用格式为: NonEmptyCrossJoin([a],NonEmptyCrossJoin([b],[c])) 

     8.DateSerial(year,month,day)   指定年月日信息,转换为Date类型

       参数类型:DateSerial(Integer,Integer,Integer)

      eg: DateSerial(2019,02,02)     结果为2019-02-02转换之后的天数

    9. left(str,str_num) : 截取(前面的)字符串信息  

      参数类型 left(string,Integer) 

      str 表示被截取的字符串

      str_num: 从第一位开始,截取多少位

    eg:  left("helloWolrd",5)   结果为 hello

    10. mid(str,start_num,str_num):截取中间的字符串信息

      参数类型  mid(string,Integer,Integer)

      str: 被截取的字符串

      start_num:表示从当前字符串的第几位开始截取

      str_num: 表示截取多少位

    eg: mid("helloJava!",6,4)  结果为Java

    11. cast(string as dataType)  将字符类型转换为数据类型   (  cast("22" as Integer)  )

      参数类型: string :表示String类型

           dataType: 可以为其它数据类型  比如 Integer , Numeric ,boolean 等

    eg:  cast("666" as Integer)  结果就为数据类型Integer 的 666

    8/9/10/11综合实例 (这个综合实例的来源是 从数据库中取出的Date类型数据在saiku展示时 变为String类型了,直接使用cdate函数转换时会抛出参数有误的,所以就自己使用函数组装为Date类型)
    截取字符串:"2019-09-11"
    left("2019-09-11",4) // 截取左边四位 2019
    mid("2019-09-11",6,2) //截取从第6位开始的 两位 09
    mid("2019-09-11",9,2) //截取从第9位开始的 两位 11

    Saiku中将String类型数据转换为Date类型实例:

    DateSerial(cast(left([countdate].[countdate].CurrentMember.name,4) as Integer),   
    	   cast(mid([countdate].[countdate].CurrentMember.name,6,2) as Integer),
    	   cast(mid([countdate].[countdate].CurrentMember.name,9,2) as Integer))   

    其中 [countdate].[countdate].CurrentMember.name 是日期类型字段

    DateSerial(cast(left([countdate].[countdate].CurrentMember.name,4) as Integer), --获取年并转换为数值类型

      cast(mid([countdate].[countdate].CurrentMember.name,6,2) as Integer), -- 获取月并转换为数值类型

      cast(mid([countdate].[countdate].CurrentMember.name,9,2) as Integer))  --获取日并转换为数值类型

    12.Datepart(String,Datetype)  :返回结果为得到当前年份和周相关的数据信息  

    参数类型: String: 表示string类型的数据,但是有固定值,这里讲两个示例 w / ww (w表示当前日期为这周的第几天,ww表示这周是当前年份的第几周)        

         Datetype: 表示时间类型      

     eg:  datepart('w',now()) now()表示获取当前日期,当前日期为 2019-03-07 ,返回结果为 5 ,表示这是本周的第五天    

        datepart('ww',now()) now()表示获取当前日期,当前日期为 2019-03-07 ,返回结果为 10 ,表示今天所属的周为2019的第十周

  • 相关阅读:
    【JVM】程序计数器(四)
    【JVM】运行时数据区概述及线程(三)
    【JVM】类加载子系统(二)
    MyException--org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ###
    计算机常用指令大全
    HTML的设计与应用
    想得太多,又做的太少
    互联网数据库分库分表现状及一点思考
    python中的函数与文件操作
    python中的流程控制语句
  • 原文地址:https://www.cnblogs.com/DFX339/p/10439372.html
Copyright © 2020-2023  润新知