Sql Cognos 11.1.7 Framework manager更改查询主题、类型数据的表

Sql Cognos 11.1.7 Framework manager更改查询主题、类型数据的表,sql,db2,cognos,db2-400,Sql,Db2,Cognos,Db2 400,使用Cognos11.1.7,数据库是IBMi上的DB2 DQM 试图找出如何让FrameworkManager根据数据库中的值动态更改SQL定义 这个想法是基于一个与参数映射类似的概念。您可以更改SQL定义,但是在下面的示例中,它基于会话parm。此示例非常适合多语言,因为它会动态更改SQL定义的from语句,如下所示: Select * from [LIVE].TABLE_#$Parameter_map{key}# 也可以通过在运行报告时传递的parm来实现这一点,但用户不知道传递什

使用Cognos11.1.7,数据库是IBMi上的DB2 DQM

试图找出如何让FrameworkManager根据数据库中的值动态更改SQL定义

这个想法是基于一个与参数映射类似的概念。您可以更改SQL定义,但是在下面的示例中,它基于会话parm。此示例非常适合多语言,因为它会动态更改SQL定义的from语句,如下所示:

  Select * from  [LIVE].TABLE_#$Parameter_map{key}#
也可以通过在运行报告时传递的parm来实现这一点,但用户不知道传递什么。所以我尝试了不同的方法

为什么参数映射不起作用 本文解释了参数映射不起作用,因为在向任何数据源发送任何查询之前,都需要输入值

然而,有了SQL,我认为它可以。这是我试过的 嵌套SQL语句,如果将括号内的SQL解析为子选择,则将通过将其更改为正确的表(如表A)来完成from语句

select * from (select X_VALUE from TABLE_X where X_CATEGORY = 'SALES')
对于本例,表_X有两列-X_类别X_值

X_类别=销售额

X_值=表A

因此,从表X中选择X_值,其中X_类别='SALES'

将返回“TABLE_A”的值

顺便说一句,一个永无止境的程序每10分钟切换一次表a或表B的值 由于这些表不断使用预先聚合的数据进行更新

不幸的是,在IBMi上的sqldb2中,它返回X_值而不是表A。 也许有另一种方法可以在DB2forIBMI的SQL中实现这一点?我可能只是遇到了一个语法问题

使用SQL-如何基于另一个表更改from语句中的表

目前我有一个解决方案,使用两组sql定义硬编码的查询主题。用一个完整的外部连接将它们拼接到公司、地点、日期等常用表中

在报告级别,我根据表X呈现内容


这是可行的,但是它对用户不友好,维护起来也更困难。这是我对情况的理解。我遇到的一个问题是我需要猜测一下

您有两个数据库,每个数据库都具有相同的元数据结构。您不断更新数据库

您有一个保存两个数据库状态的表,并且有{something}可以用作最近更新的数据库的指示符

目前尚不清楚这是如何完成的,也不清楚此表中有多少条记录

你可能想尝试一下这些方法。我还没有试过,所以细节上需要相当程度的挥手

可以在FM模型的数据源连接属性中使用参数映射宏

您需要导入用于跟踪数据库状态的表。如果在表的相关列中使用时间戳或筛选器作为值,则可以在查询主题中创建一个筛选器,以查找类似于最大值的内容,该列告诉您哪个DB是当前DB。这意味着只返回一行,表示当前数据库

您将创建一个参数映射,该映射将获取为查询主题中的相关列返回的任何值。将该宏放入数据源连接的相应属性中

Key          Value
Sales        DB1's name
AnotherThing DB2's name

您可以使用QueryValue宏函数动态地构建FROM子句。下面的示例将从claus更改为GOSALES。野营装备。这将失败,因为它不是您要替换的实际表名 dqqueryValue“[Sales query].[Products].[Product line]”,其中包含要使用的表名称的数据库列

SELECT
    "PRODUCT_LINE"."PRODUCT_LINE_CODE" AS "Product_line_code", 
   "PRODUCT_LINE"."PRODUCT_LINE_EN" AS "Product_line"
FROM
    "GOSALES".#dq(queryValue ('[Sales (query)].[Products].[Product line]'))# "PRODUCT_LINE" 

你能把它重写一下,让它稍微清楚一点你想要什么吗。一个问题是,您编写的很多内容都不是用正确的句子表达的。此外,您希望查询层对象采用select*from表格格式,因此您希望在业务层模型查询主题中对此进行建模。我重新措辞/试图使请求更清楚一些。展示我的研究成果,与我试图实现的目标相似的概念。例子。文章。我目前的工作是从表X中选择X_值,其中X_CATEGORY='SALES'应该返回一个表,其中包含名为X_值的列中的值。因此,如果只返回一行,您应该期望得到类似“TABLE_a”的值。您不会得到像table_a这样的表引用。为了更清楚地回答您的问题:数据库被设计为在任何给定时间只有一个table_a或table_B中有有效数据,可以通过从table_X中运行select X_VALUE来找到哪个表是有效的,其中X_CATEGORY='SALES'?Cognos不是这里的问题。期望报告工具和/或业务用户知道要使用哪个表的总体设计是
这个问题。话虽如此,也许你可以用一个视图来伪装它,然后每10分钟改变一次视图,指向另一张桌子?你赢了我。从queryValue'[namespace].[TABLE_X].[X_VALUE]'中选择*再次基于Cognos专家找到颠覆DBA的方法。如果表名中有空格,请从dqqueryValue'[namespace].[table_X].[X_VALUE]'中选择*需要注意的一点是:这仅在版本11.0.[something]和forward中可用,并且仅当模型配置为使用DQM时才可用。OP没有提供有关目标环境的信息。我在前11.1.7中说明了这一点,并在Clarify中添加了DQM。我可能在看标签。添加cognos-11可能会有所帮助。