问题描述
我正在使用Report Builder,在创建计算字段以对另一列中的数据进行分类时遇到问题。
为简化和解释我的目标,
我想创建一个具有4个不同类别的计算字段,并且我认为最好的方法是嵌套if语句。如果那不是最好的功能,请随时纠正我。
Category 1: Let’s just call it “A”
Category 2: “B“
Category 3: “C“
Category 4: “D”
另一列中的值:
简化示例-
- 数字1-10属于A类,
- 数字11-20为B,
- 数字21-30是C,
- 数字31-40将属于D类
但是,在我的特殊情况下,在这10个连续范围内,这些值的排列并不理想。例如,我有一个33值,该值将是A类别,这使它无法使用大于或小于运算符。
已经解释了我的问题和目标-我的问题是,当我有多个离散值未按连续的数字顺序整齐地组织时,如何为if语句编写语法?
我希望这个问题有意义。
我尝试仅使用一个参数使它继续运行,并在不起作用时陷入困境:
Iif(field data = 1,2,3,4,5,6,7,8,9,10,33,“A”,“Other”)
它不适用于逗号,因此我尝试在每个值之间插入Or运算符,但这也不起作用。
感谢您提供的任何语法提示。
解决方法
有几种方法可以做到这一点。
选项1:在您的数据库设计中
我认为最好的方法是在数据库中执行此操作。创建具有这些值/类别对的表,并在需要包含数据的分类视图时简单地加入该表。
选项2:在您的报表设计中
如果您确实必须在报表设计中执行此操作,那么使用SWITCH()
可能会更容易,当然也很容易阅读。
给出第二个示例,并将其扩展一点,您可以执行以下操作...
=SWITCH(
(Fields!myData.Value >=1 AND Fields!myData.Value <=10) OR Fields!myData.Value = 33,"A",(Fields!myData.Value >=11 AND Fields!myData.Value <=15) OR Fields!myData.Value = 34 OR Fields!myData.Value = 39,"B",True,"Other"
)
SWITCH使用一对值,当该对中的第一个值评估为true时,返回该对中的秒值。
最后的True,"Other"
的行为与其他类似。如果先前的条件不匹配,则最后一对始终评估为true,因此将返回“其他”。