odoo pivot中去掉求和_进一步的了解下Power Pivot中的筛选及关系

1. TREATAS

A. 语法

TREATAS ( , [, [, … ] ] )

B. 返回

C. 注意事项

第1参数必须是表表达式

D. 作用

只筛选对应关联值的数据

E. 案例

表1

1). 单个筛选:

筛选姓名为张三的数据

Fiter('表1', '表1'[姓名]="张三")

单个筛选

筛选成绩大85的数据

Fiter('表1', '表1'[成绩]>85)

单个筛选1

2). 多个条件筛选

筛选学科为数学,成绩大于85的。

Fiter('表1', '表1'[学科]="数学" &&

'表1'[成绩]>85

)

多条件的我们可以用&&来链接实现。

3). 多个恒等条件的筛选

筛选姓名等于张三,李四,王五并求总成绩。

Calculate(Sum('表1'[成绩]),Filter('表1','表1'[姓名]="张三" ||

'表1'[姓名]="李四" ||

'表1'[姓名]="王五"

)

)

通过||来表达”或”的意思,也就是3个人的姓名是平行的。

不用filter函数是否也能计算出如上效果呢?

4). 使用TREATAS链接关系函数进行平行筛选

Calculate(Sum('表1'[成绩]),Treatas({"张三","李四","王五"},

'表1'[姓名]

)

)

通过treatas函数把指定表的表达式对应到关系列上,然后通过关系筛选出关系列对应的值得数据来进行计算。{“张三”,”李四”,”王五”}实际上是一个列表,这个关系是并列的。

5). 使用TREATAS链接关系函数进行叠加筛选

Calculate(Sum('表1'[成绩]),Treatas({("数学",90),

("英语",85)

},

'表1'[学科],'表1'[成绩]

)

)

我们可以看到这里{(),()}的结构实际上是构成了2行2列的表。列的顺序对应了列字段的关系。也就是计算条件为:学科=数学,成绩=90以及学科=英语,成绩=85的成绩之和。

我们知道了,在筛选的时候可以通过列,也可以通过表来进行筛选,那是否可以有替代性的方案呢?

6). 使用现有条件列或者条件表来进行筛选

同理我们现在有一个条件表

表2

条件表2

那我们需要根据条件表的列或者条件表的整体来进行求和。

根据表条件求和

我们可以直接在上面那个公式的基础上使用替换方式。

Calculate(Sum('表1'[成绩]),Treatas('表2',

'表1'[学科],'表1'[成绩]

)

)

表2实际上就代表{(“数学”,100),(“语文”,90),(“英语”,80)}

返回的结果是360,因为语文有2个90分。

根据列条件求和

如果只需要单列条件的话,通过Values或者SelectColumns都可以实现:

Calculate(Sum('表1'[成绩]),Treatas(SelectColumns('表2',"a",'表2'[成绩]),

'表1'[成绩]

)

)

返回的结果是530。这里通过SelectColumns来实现成绩等于100,90和80的求和。因为这里100的有1个,90的有3个,80的也有2个,加起来是530。

Calculate(Sum('表1'[成绩]),Treatas(Values('表2'[成绩]),

'表1'[成绩]

)

)

这里则使用的是values取单列的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值