【问题标题】:cognos: Pick up the initial value for every row of a crosstabcognos:为交叉表的每一行获取初始值
【发布时间】:2014-05-31 05:19:00
【问题描述】:

我有一个要求,我必须在交叉表中获取每一行的初始值.. 我的交叉表是这样的

值 1960 1970 2010 2011
澳大利亚      10        5      11      6
英语                           5        2
胸罩       11       4
工业                  8      11
我必须添加另一列,它根据年份为每一行获取初始值.. 所以结果应该是这样的。

值 1960 1970 2010 2011 初始值
澳大利亚      10        5      11      6         10
英语                            5        2          5
胸罩      11       4                            11
ind                 8      11                    8

【问题讨论】:

  • 您的数据是关系型的还是维度型的?
  • 假设关系数据,我认为您需要第二个查询来识别“初始”年份。然后,您可以将其与第三个查询一起使用,以获取每个国家/地区(或其他任何国家/地区)的最早值。然后您可以将其加入到您对国家/地区的原始查询中。

标签: cognos


【解决方案1】:

您应该能够使用 minimum() 函数来确定年份的最小值,然后返回对应的值。初始值数据项的表达式类似于:

total(
CASE
WHEN [Year] = minimum([Year] for [Language])
THEN [Value]
ELSE 0 
END
for [Language])

我们使用 minimum() 函数获取数据集中特定语言的最低年份,并使用 for 子句定义聚合级别。如果该行的年份与该数字匹配,则输出该值,否则输出 0。然后我们将每种语言的所有内容加起来,这应该为我们提供最低年份的值。

此解决方案假定交叉表中显示的数字是较低级别行详细信息的总计。如果聚合不同,例如平均值或计数,则应相应更改包装汇总函数。

【讨论】:

  • 它抛出以下错误...“RSV-VAL-0010 未能加载报告规范。XQE-PLN-0001 内部错误。查询服务无法计划查询:索引:0,大小:0"
  • 这是一个非特定错误。它是关系源还是维度源?
  • 是关系源
  • 您的数据库提供商是什么?
  • 我认为我无法远程解决您的问题。你将不得不玩它。这个概念是合理的,但 Cognos 可能很挑剔。由于我没有您的数据库或报告,因此我无法对其进行测试。再次查看代码。您可能会尝试的一件事是使用上面的 'minimum([Year] for [Language]) 参考并将其放入自己的数据项中。然后替换 CASE 语句中的引用和并将其替换为新的数据项名称。这可能会有所帮助,因为 Cognos 可能在使用 CASE 语句中的聚合函数时遇到问题。
猜你喜欢
  • 2016-09-07
  • 2015-03-04
  • 2010-10-01
  • 1970-01-01
  • 2014-12-15
  • 2019-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多