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 ,返回结果为 ,表示这是本周的第五天    

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

Saiku部分函数解析(八)的更多相关文章

  1. Hive部分函数解析

    Hive部分函数解析 Hive里的exists ,in ,not exists ,not in 相关函数 表数据准备: 1.选择指定数据库 eg:  use bg_database1; 2. 创建表 ...

  2. ReactiveSwift源码解析(八) SignalProducer的代码的基本实现

    在前面几篇博客中我们详细的聊了ReactiveSwift中的Bag.Event.Observer以及Signal的使用方式和代码实现.那么在接下来的这几篇博客中,我们就依附于之前博客的基础上来聊一聊S ...

  3. Celery 源码解析八:State 和 Result

    在前面几篇解析中,我们已经看过了 Worker 是如何运行的,Task 是如何创建的,以及怎么被路由到 Worker 中,除了这些之外,我们还对流量限制,Worker 控制和 Task/Worker ...

  4. C++解析八-多态

    多态多态按字面的意思就是多种形态.当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态.C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数.下面的实例中,基类 Sh ...

  5. jQuery 源码解析(八) 异步队列模块 Callbacks 回调函数详解

    异步队列用于实现异步任务和回调函数的解耦,为ajax模块.队列模块.ready事件提供基础功能,包含三个部分:Query.Callbacks(flags).jQuery.Deferred(funct) ...

  6. 《MySQL数据分析实战》八句箴言前四句解析

    大家好,我是jacky朱元禄,很高兴继续跟大家学习<MySQL数据分析实战>,从本节课程开始,jacky将从SQL语句入手,给大家解析八句箴言: 不管三七二十一,先把数据show来看: 数 ...

  7. QT源码解析(一) QT创建窗口程序、消息循环和WinMain函数

    QT源码解析(一) QT创建窗口程序.消息循环和WinMain函数 分类: QT2009-10-28 13:33 17695人阅读 评论(13) 收藏 举报 qtapplicationwindowse ...

  8. Celery 源码解析三: Task 对象的实现

    Task 的实现在 Celery 中你会发现有两处,一处位于 celery/app/task.py,这是第一个:第二个位于 celery/task/base.py 中,这是第二个.他们之间是有关系的, ...

  9. Celery 源码解析五: 远程控制管理

    今天要聊的话题可能被大家关注得不过,但是对于 Celery 来说确实很有用的功能,曾经我在工作中遇到这类情况,就是我们将所有的任务都放在同一个队列里面,然后有一天突然某个同学的代码写得不对,导致大量的 ...

随机推荐

  1. Java 8里面lambda的最佳实践

    Java 8已经推出一段时间了,越来越多开发人员选择升级JDK,这条热门动弹里面看出,JDK7最多,其次是6和8,这是好事! 在8 里面Lambda是最火的主题,不仅仅是因为语法的改变,更重要的是带来 ...

  2. Python __init__.py 文件使用

    __init__.py的主要作用是: 1. Python中package的标识,不能删除 2. 定义__all__用来模糊导入 3. 编写Python代码(不建议在__init__中写python模块 ...

  3. Asp.net core 学习笔记 (Excel 读写)

    EPPlus 已经支持 .net core 了 https://www.nuget.org/packages/EPPlus https://github.com/JanKallman/EPPlus 写 ...

  4. HeadFirst Ruby 第十五章总结 Saving and loading data

    前言 在上一章讲述了如何进行基础的操作,比如 处理 GET 请求的 get route, 再比如下载 gem 等等方面的知识.在这一章节,作者告诉我们如何储存.处理数据.整个过程分三步走: 首先,当 ...

  5. English trip V1 - 23. Big and Bigger Teacher:Corrine Key: adjective comparisons 形容词 比较级

    In this lesson you will learn to make comparisons. 课上内容(Lesson) compare   n. 比较  vt. 比拟,喻为:[语]构成  vi ...

  6. @Builder与@NoArgsConstructor | Lombok

    一.@Builder与@NoArgsConstructor一起使用存在的问题   @Data @Builder @NoArgsConstructor public class User { priva ...

  7. codeforces 848B Rooter's Song 思维题

    http://codeforces.com/problemset/problem/848/B 给定一个二维坐标系,点从横轴或纵轴垂直于发射的坐标轴射入(0,0)-(w,h)的矩形空间.给出点发射的坐标 ...

  8. POJ-3107 Godfather 求每个节点连接的联通块数量

    dp[n][2],维护儿子的联通块数量和父亲的联通块数量. 第一遍dfs求儿子,第二遍dfs求爸爸. #include<iostream> #include<cstring> ...

  9. Being a Good Boy in Spring Festival HDU - 1850

    桌子上有M堆扑克牌:每堆牌的数量分别为Ni(i=1…M):两人轮流进行:每走一步可以任意选择一堆并取走其中的任意张牌:桌子上的扑克全部取光,则游戏结束:最后一次取牌的人为胜者. 现在我们不想研究到底先 ...

  10. 第一阶段——站立会议总结DAY08

    补发:因为第八次也就是第八天,那天有一个更重要的东西,看懂一个电商的系统.所以,未有进展.