提问人:Kyle R. Moore 提问时间:9/19/2023 最后编辑:dougpKyle R. Moore 更新时间:10/13/2023 访问量:54
Cognos 11 报告列出了联系电话号码
Cognos 11 report listing contact phone number
问:
我希望在创建 Cognos 报告时得到一些帮助。我有一些做基本报告的经验,但我觉得这里超出了我的深度。
以下是我可用的字段:
联系人 ID
电话类型
电话
表如下所示:
联系人 ID | 电话类型 | 电话 |
---|---|---|
1 | C | 1234567890 |
1 | H | 1234567890 |
2 | M | 1234567890 |
2 | H | 1234567890 |
3 | H | 1234567890 |
3 | W | 1234567890 |
联系人 ID 和电话是整数。手机类型可以是 C、H、W 或 M,分别用于手机、家庭、工作和移动设备。联系人并不总是列出所有类型,但可以。
我需要什么: 一个两列列表,第一列是联系人 ID,第二列是电话,每个联系人在报表中只有 1 行。我需要以下优先级:C > M > H。我根本不想要工作电话。因此,如果他们列出了手机,我想要那个号码。如果他们没有手机或手机,但列出了家庭电话,我想要那个号码。 输出应如下所示,将以 CSV 格式导出:
Contact ID | Phone
_____________________________
10292 | 1234567890
102847 | 0987654321
我尝试进行联接,查询 2 提供单元格编号,查询 3 提供 Home。 My Join 的结构如下:
Query 2
|
Query 1 <--
|
Query 3
然后,我在列表(查询 1)的 Phone 数据项中有一个 IF 语句,如下所示:
IF ([Query2].[Cell Phone] is not null)
THEN ([Query2].[Cell Phone])
ELSE
IF ([Query3].[Home Phone] is not null)
THEN ([Query3].[Home Phone])
ELSE null
我无法获得所需的结果,因为有些用户确实具有不在报告输出中的家庭电话类型。我不清楚基数是如何工作的,所以这可能是问题的一部分。 我得到的输出看起来是正确的,但是当我深入研究它时,我发现数据丢失了。输出中不包含至少 1 个仅具有家庭电话类型的联系人。
如果我需要提供任何其他有用的细节,请告诉我。 提前致谢!
答:
最终,你会想要类似这个基本 SQL 的东西:
COALESCE([Cell], [Mobile], [Home])
COALESCE()
在 Cognos 中应该可以正常工作。
您可以创建一个表达式来检测存在的类型 以及用于选择要显示的所需值的 case 语句
例如,创建 3 个新数据项以确定是否存在条目 这将使结果变平,以便您可以显示 id 和所需的数字
数据项 CType
If ([Phone Type] = 'C')Then([Phone])else(Null)
数据项 MType
If ([Phone Type] = 'M')Then([Phone])else(Null)
数据项 HType
If ([Phone Type] = 'H')Then([Phone])else(Null)
然后是合并或案例陈述
Coalesce([CType],[MType],[HType])
或者如果你愿意,这也行得通
case
when ([CType] IS NOT NULL)Then([CType])
when ([MType] IS NOT NULL)Then([MType])
when ([HType] IS NOT NULL)Then([HType])
else(Null)
end
<table border=1>
<tr>
<td>ID</td><td>Phone Type</td>
<td>Phone</td>
<td>C Phone</td>
<td>M Phone</td>
<td>H Phone</td>
</tr>
<tr>
<td>1</td><td>C</td><td>5554567890</td><td>5554567890</td><td></td><td></td>
</tr>
<tr>
<td>1</td><td>H</td><td>1114567890</td><td></td><td></td><td>1114567890</td>
</tr>
</table>
For example
评论