Cognos 11 报告列出了联系电话号码

Cognos 11 report listing contact phone number

提问人:Kyle R. Moore 提问时间:9/19/2023 最后编辑:dougpKyle R. Moore 更新时间:10/13/2023 访问量:54

问:

我希望在创建 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 个仅具有家庭电话类型的联系人。

如果我需要提供任何其他有用的细节,请告诉我。 提前致谢!

Cognos Cognos-11

评论

0赞 dougp 9/19/2023
请了解更多细节。代码引用 Query2 和 Query3。这是 UNION 查询中的表达式吗?查询结构是什么样的?每个查询的目的是什么?示例数据也会有所帮助。
0赞 dougp 9/19/2023
此外,包括基于示例数据(输入)的所需输出。
0赞 Kyle R. Moore 9/19/2023
谢谢你的回复,@dougp。我更新了我的帖子以包含您要求的一些内容。我不确定如何为您提供输入,我不是数据库的管理员,我只能访问 report studio 以创建访问数据的报告。
0赞 Kyle R. Moore 9/19/2023
另外,感谢您提供有关 Coalesce 的提示。我之所以把它放在适当的位置,是因为它比我的嵌套 IF 语句更干净。但是,输出仍然不包含我知道具有家庭电话号码的联系人。
0赞 dougp 9/19/2023
请在您的问题中澄清您得到的结果以及该结果与您期望的结果之间的区别。

答:

0赞 dougp 9/19/2023 #1

最终,你会想要类似这个基本 SQL 的东西:

COALESCE([Cell], [Mobile], [Home])

COALESCE()在 Cognos 中应该可以正常工作。

0赞 VAI Jason 10/13/2023 #2

您可以创建一个表达式来检测存在的类型 以及用于选择要显示的所需值的 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