关于我们

ABOUT US

关于我们
公司新闻
智达方通多维数据库Intcube Booster V1.0 MDX函数语法手册(3/5)
2022-10-19       浏览次数:

第二章 逻辑函数


And

逻辑运算符And和IIF函数配合使用(不仅仅可用于IIF函数),用多个判断条件的结果来决定最终结果为真还是假。
语法
IIF(search_condition1 And search_condition2, true_part, false_part)
参数
search_condition
是逻辑表达式,
And
是连接两个表达式的逻辑运算符,
true_part
是条件为真时的取值,
false_part
是条件为假时的取值
备注
逻辑运算符可以连接两个表达式,两个表达式结果共同决定最终的结果是True还是False。下面是And在连接两个条件时的所有情况。
口诀:一假为假
 
示例一
with member [期间].[MyMember] as
IIF ([期间].&[50648] < -9999 and [期间].&[50648] > -10001 ,[期间].&[50649] ,[期间].&[50650])
select
{[期间].[MyMember],[期间].&[50648],[期间].&[50649],[期间].&[50650]} on rows,
{[组织].&[50582]} on columns
from [模型一]
where ([场景].&[50685],[产品].&[50688],[版本].&[50672],[科目].&[50236])
 
运行结果:
产品: 不分
场景: 累计预算
版本: 年初编报01版本
科目: 研究开发费

-----------------------------------------------------------------------------------------------------------------
[期间]维度上key为50648的成员对应的元组值为-10000.00,小于-9999且大于-10001,同时满足小于-9999和大于-10001,因此[期间]维度用的是key为50649的成员对应的元组的值,即4200.00
示例二
with member [期间].[MyMember] as
IIF ([期间].&[50648] > -9999 and [期间].&[50649] > 4199 ,[期间].&[50649] ,[期间].&[50650])
select
{[期间].[MyMember],[期间].&[50648],[期间].&[50649],[期间].&[50650]} on rows,
{[组织].&[50582]} on columns
from [模型一]
where ([场景].&[50685],[产品].&[50688],[版本].&[50672],[科目].&[50236])
 
运行结果:
产品: 不分
场景: 累计预算
版本: 年初编报01版本
科目: 研究开发费

-----------------------------------------------------------------------------------------------------------------
[期间]维度上key为50648的成员对应的元组值为-10000.00,大于-9999,[期间]维度上key为50649的成员对应的元组值为4200.00,大于4199.00,[期间]维度上key为50648的成员对应的元组值不满足大于-9999的条件,因此[期间]维度用的是key为50650的成员对应的元组的值,即6800.00
 

Case

返回不同情况中第一个满足逻辑表达式(case_eperand)对应的值(result)。
语法一
CASE case_eperand
WHEN when_operand THEN result
WHEN when_operand THEN result….. 
ELSE result END
 
参数一
case_eperand
整个函数的逻辑表达式
WHEN when_operand THEN result
表达式为0至多个,代表不同情况;
when_operand
是当前情况下的值,
Result
是符合当前情况下的取值;
ELSE情况可以省略
 
示例一
with member  [期间].[x]  as  Case  2*3
WHEN 1 THEN 1
WHEN 2 THEN 2
WHEN 6 THEN 6
ELSE 100
END
select
{[期间].[x]} on rows,
{[版本].&[50672]} on columns
from [模型一]
where ([组织].&[50585],[场景].&[50685],[产品].&[50688],[科目].&[50220])
 
运行结果:
产品: 不分
场景: 累计预算
科目: 办公费
组织: 开发2部

-----------------------------------------------------------------------------------------------------------------
由于逻辑表达式的值为6,第三种情况刚好符合逻辑表达式的值,所以返回第三种情况对应的取值6。
 
语法二
CASE
WHEN search_condition THEN result
WHEN search_condition THEN result
WHEN search_condition THEN result… 
ELSE result END
参数二
WHEN search_condition THEN result
表达式为0至多个,代表不同情况;
search_condition
是当前情况下的逻辑表达式,
Result
是符合当前情况下逻辑表达式为真的取值;
ELSE
情况可以省略
示例二
with member  [期间].[x]  as  Case
WHEN count([期间].[2023年].Children)>10 THEN 10
WHEN count([期间].[2023年].Children)>2 THEN 2
WHEN count([期间].[2023年].Children)>3 THEN 3
ELSE 100
END
select
{[期间].[x]} on rows,
{[版本].&[50672]} on columns
from [模型一]
where ([组织].&[50585],[场景].&[50685],[产品].&[50688],[科目].&[50220])
 
运行结果:
产品: 不分
场景: 累计预算
科目: 办公费
组织: 开发2部

-----------------------------------------------------------------------------------------------------------------
由于[2023年]的子项有4个,所以第二种情况是第一个满足条件的,返回情况二THEN后面的值2。
 

EQ : '='

执行比较运算,以确定一个多维表达式 (MDX) 的值是否等于另一个 MDX 表达式的值。
语法
MDX_Expression = MDX_Expression
参数
MDX_Expression
有效的 MDX 表达式。
示例
with member [期间].[MyMember] as
IIF ([期间].&[50648] = -10000 , [期间].&[50648],null)
select
{[期间].[MyMember],[期间].&[50648]} on rows,
{[组织].&[50582]} on columns
from [模型一]
where ([场景].&[50685],[产品].&[50688],[版本].&[50672],[科目].&[50236])
 
运行结果:
产品: 不分
场景: 累计预算
版本: 年初编报01版本
科目: 研究开发费

-----------------------------------------------------------------------------------------------------------------
[期间].&[50648]的值为-10000.00,等于-10000,条件成立,返回[期间].&[50648]的值。
 

GE : '>='

执行比较操作,确定一个多维表达式 (MDX) 表达式的值是否大于或等于另一个 MDX 表达式的值。
语法
MDX_Expression >= MDX_Expression
参数
MDX_Expression
有效的 MDX 表达式。
示例
with member [期间].[MyMember] as
IIF ([期间].&[50648] >= -10002 , [期间].&[50648],null)
select
{[期间].[MyMember],[期间].&[50648]} on rows,
{[组织].&[50582]} on columns
from [模型一]
where ([场景].&[50685],[产品].&[50688],[版本].&[50672],[科目].&[50236])
 
运行结果:
产品: 不分
场景: 累计预算
版本: 年初编报01版本
科目: 研究开发费

-----------------------------------------------------------------------------------------------------------------
[期间].&[50648]的值为-10000.00,大于等于-10002,条件成立,返回[期间].&[50648]的值。
 

GT : '>'

执行比较运算,以确定一个多维表达式 (MDX) 的值是否大于另一个 MDX 表达式的值。
语法
MDX_Expression > MDX_Expression
参数
MDX_Expression
有效的 MDX 表达式。
示例
with member [期间].[MyMember] as
IIF ([期间].&[50648] > -10001 , [期间].&[50648],null)
select
{[期间].[MyMember],[期间].&[50648]} on rows,
{[组织].&[50582]} on columns
from [模型一]
where ([场景].&[50685],[产品].&[50688],[版本].&[50672],[科目].&[50236])
 
运行结果:
产品: 不分
场景: 累计预算
版本: 年初编报01版本
科目: 研究开发费

-----------------------------------------------------------------------------------------------------------------
[期间].&[50648]的值为-10000.00,大于-10001,条件成立,返回[期间].&[50648]的值。
 

IIf

此函数先判断条件是否成立,条件成立返回第一个值,不成立返回第二个值。
语法
IIF(search_condition, true_part, false_part)
参数
search_condition
逻辑表达式
true_part
条件为真时的取值
false_part
是条件为假时的取值
示例
with member [期间].[MyMember] as
IIF ([期间].&[50648] > -9999 ,[期间].&[50649] ,[期间].&[50650])
select
{[期间].[MyMember],[期间].&[50648],[期间].&[50649],[期间].&[50650]} on rows,
{[组织].&[50582]} on columns
from [模型一]
where ([场景].&[50685],[产品].&[50688],[版本].&[50672],[科目].&[50236])
 
运行结果:
产品: 不分
场景: 累计预算
版本: 年初编报01版本
科目: 研究开发费

-----------------------------------------------------------------------------------------------------------------
[期间]维度上key为50648的成员对应的单元格值为-10000.00,小于-9999,不满足>-9999的条件,因此[期间]维度用的是key为50650的成员对应的元组的值,即6800.00
 
 

IsEmpty

语法
ISEMPTY(value)
备注
判断单元格值是否为空,是为true,否为false.
示例一
with member  [科目].[x]  as
IIF(NOT(IsEmpty([科目].[管理费用合计].[工资-管理费用合计])),[科目].[管理费用合计].[工资-管理费用合计],[期间].[2023年].[2023年1季度].[2023年2月])
select
{[科目].[管理费用合计].[工资-管理费用合计]} on rows,
{[版本].&[50672]} on columns
from [模型一]
where ([组织].&[50582],[场景].&[50685],[产品].&[50688],[期间].[2023年].[2023年1季度].[2023年2月])
运行结果:
产品: 不分
场景: 累计预算
期间: 2021年1月
组织:北京总部

-----------------------------------------------------------------------------------------------------------------
科目维度上[科目].[管理费用合计].[工资-管理费用合计]的成员对应的单元格值为100.00,不为空返回false,NOT函数取反后返回true,则IIF函数的条件为真,取第一个表达式的值,所以展示的是[科目].[管理费用合计].[工资-管理费用合计]成员对应的值100.00.
 

LE : '<='

执行比较运算,以确定一个多维表达式 (MDX) 的值是否小于等于另一个 MDX 表达式的值。
语法
MDX_Expression <= MDX_Expression
参数
MDX_Expression
有效的 MDX 表达式。
示例
with member [期间].[MyMember] as
IIF ([期间].&[50648] <= -1000 , [期间].&[50648],null)
select
{[期间].[MyMember],[期间].&[50648]} on rows,
{[组织].&[50582]} on columns
from [模型一]
where ([场景].&[50685],[产品].&[50688],[版本].&[50672],[科目].&[50236])
 
运行结果:
产品: 不分
场景: 累计预算
版本: 年初编报01版本
科目: 研究开发费

-----------------------------------------------------------------------------------------------------------------
[期间].&[50648]的值为-10000.00,小于等于-1000,条件成立,返回[期间].&[50648]的值。
 

LT : '<'

执行比较操作,确定一个多维表达式 (MDX) 表达式的值是否小于另一个 MDX 表达式的值
语法
MDX_Expression < MDX_Expression
参数
MDX_Expression
有效的 MDX 表达式。
示例
with member [期间].[MyMember] as
IIF ([期间].&[50648] < -100 , [期间].&[50648],null)
select
{[期间].[MyMember],[期间].&[50648]} on rows,
{[组织].&[50582]} on columns
from [模型一]
where ([场景].&[50685],[产品].&[50688],[版本].&[50672],[科目].&[50236])
 
运行结果:
产品: 不分
场景: 累计预算
版本: 年初编报01版本
科目: 研究开发费

-----------------------------------------------------------------------------------------------------------------
[期间].&[50648]的值为-10000.00,小于-100,条件成立,返回[期间].&[50648]的值。
 

NE : '<>'

执行比较运算,以确定一个多维表达式 (MDX) 的值是否不等于另一个 MDX 表达式的值。
语法
MDX_Expression <> MDX_Expression
参数
MDX_Expression
有效的 MDX 表达式。
示例
with member [期间].[MyMember] as
IIF ([期间].&[50648] < > -100 , [期间].&[50648],null)
select
{[期间].[MyMember],[期间].&[50648]} on rows,
{[组织].&[50582]} on columns
from [模型一]
where ([场景].&[50685],[产品].&[50688],[版本].&[50672],[科目].&[50236])
 
运行结果:
产品: 不分
场景: 累计预算
版本: 年初编报01版本
科目: 研究开发费

-----------------------------------------------------------------------------------------------------------------
[期间].&[50648]的值为-10000.00,不等于-100,条件成立,返回[期间].&[50648]的值。
 

Not

逻辑运算符非可以将原表达式取反
语法
NOT(value)
备注
条件 返回值
false true
true false
示例
with member [期间].[MyMember] as
IIF (NOT([期间].&[50648] > -9999) ,[期间].&[50649] ,[期间].&[50650])
select
{[期间].[MyMember],[期间].&[50648],[期间].&[50649],[期间].&[50650]} on rows,
{[组织].&[50582]} on columns
from [模型一]
where ([场景].&[50685],[产品].&[50688],[版本].&[50672],[科目].&[50236])
运行结果:
产品: 不分
场景: 累计预算
版本: 年初编报01版本
科目:研究开发费

-----------------------------------------------------------------------------------------------------------------
[期间]维度上key为50648的成员对应的单元格值为-10000.00,小于-9999,不满足>-9999的条件,因此[期间]维度用的是key为50650的成员对应的元组的值,即6800.00,调用Not函数取反,因此[期间]维度用的是key为50650的成员对应的元组的值,即4200.
 
 

Or

逻辑运算符Or和IIF函数配合使用(不仅仅可用于IIF函数),用多个判断条件的结果来决定最终结果为真还是假
语法
IIF(search_condition1 Or search_condition2, true_part, false_part)
参数
search_condition是逻辑表达式
or是连接两个表达式的逻辑运算符
true_part是条件为真时的取值
false_part是条件为假时的取值
备注
逻辑运算符可以连接两个表达式,两个表达式结果共同决定最终的结果是True还是False。下面是Or在连接两个条件时的所有情况。
口诀:一假为假
 
示例1
with member [期间].[MyMember] as
IIF ([期间].&[50648] < -9999 or [期间].&[50648] > -10001 ,[期间].&[50649] ,[期间].&[50650])
select
{[期间].[MyMember],[期间].&[50648],[期间].&[50649],[期间].&[50650]} on rows,
{[组织].&[50582]} on columns
from [模型一]
where ([场景].&[50685],[产品].&[50688],[版本].&[50672],[科目].&[50236])
 
运行结果:
产品: 不分
场景: 累计预算
版本: 年初编报01版本
科目: 研究开发费

-----------------------------------------------------------------------------------------------------------------
[期间]维度上key为50648的成员对应的元组值为-10000.00,小于-9999或大于-10001,同时满足小于-9999和大于-10001,因此[期间]维度用的是key为50649的成员对应的元组的值,即4200.00
示例2
with member [期间].[MyMember] as
IIF ([期间].&[50648] > -9999 or [期间].&[50649] > 4199 ,[期间].&[50649] ,[期间].&[50650])
select
{[期间].[MyMember],[期间].&[50648],[期间].&[50649],[期间].&[50650]} on rows,
{[组织].&[50582]} on columns
from [模型一]
where ([场景].&[50685],[产品].&[50688],[版本].&[50672],[科目].&[50236])
 
运行结果:
产品: 不分
场景: 累计预算
版本: 年初编报01版本
科目: 研究开发费

-----------------------------------------------------------------------------------------------------------------
[期间]维度上key为50648的成员对应的元组值为-10000.00,大于-9999,[期间]维度上key为50649的成员对应的元组值为4200.00,大于4199.00,[期间]维度上key为50648的成员对应的元组值不满足大于-9999的条件,因此[期间]维度用的是key为50648的成员对应的元组的值,即4200.00
示例3
with member [期间].[MyMember] as
IIF ([期间].&[50648] > -9999 or [期间].&[50649] < 4199 ,[期间].&[50649] ,[期间].&[50650])
select
{[期间].[MyMember],[期间].&[50648],[期间].&[50649],[期间].&[50650]} on rows,
{[组织].&[50582]} on columns
from [模型一]
where ([场景].&[50685],[产品].&[50688],[版本].&[50672],[科目].&[50236])
 
运行结果:
产品: 不分
场景: 累计预算
版本: 年初编报01版本
科目: 研究开发费

-----------------------------------------------------------------------------------------------------------------
[期间]维度上key为50648的成员对应的元组值为-10000.00,大于-9999,[期间]维度上key为50649的成员对应的元组值为4200.00,不满足小于4199.00,[期间]维度上key为50648的成员对应的元组值不满足大于-9999的条件,因此[期间]维度用的是key为50650的成员对应的元组的值,即6800.00。

版权声明:
        1、本文档所有内容文字资料, 版权均属北京智达方通科技有限公司所有,任何企业、媒体、网站或个人未经本公司协议授权不得转载、链接、转发或以其他方式复制、发布/发表。已经本公司协议授权的媒体、网站,在下载使用时必须注明来源,违者本公司将依法追究责任。
         2、对不遵守本声明或其他违法、恶意使用本公司内容者,本公司保留追究其法律责任的权利。
产品中心
企业绩效管理系统套件
行业版产品
管理咨询
预算管理咨询
成本费用管控
绩效管理咨询
IT 规划咨询
解决方案
按行业解决方案
按应用解决方案
服务支持
产品标准服务
客服专线
关于我们
公司介绍
资质荣誉
公司新闻
业内新闻
管理团队
联系我们
招贤纳士
社会招聘
校园招聘

 2010-2030 北京智达方通科技有限公司 版权所有      京公网安备 11010502040655号    京ICP备11004585