【问题标题】:BIRT Pie Chart, Cascading Parameters, & SQL FormattingBIRT 饼图、级联参数和 SQL 格式
【发布时间】:2015-01-16 20:52:54
【问题描述】:

我有一个基于以下查询显示饼图的报告:

SELECT 
    COUNT(COURTESY_CHECK.CHECK_NUMBER) AS SUM, 
    'FORWARDED' AS STATUS
FROM
    COURTESY_CHECK
    INNER JOIN CHECK_FORWARD 
    ON COURTESY_CHECK.ID = CHECK_FORWARD.COURTESY_CHECK_ID
WHERE 
    to_char(COURTESY_CHECK.DATE_RECEIVED, 'FMMonth') = ? AND 
    EXTRACT (YEAR FROM COURTESY_CHECK.DATE_RECEIVED) = ?


UNION ALL

SELECT 
    COUNT(COURTESY_CHECK.CHECK_NUMBER) AS SUM, 
    'RETURNED' AS STATUS
FROM 
    COURTESY_CHECK
    INNER JOIN CHECK_RETURN 
    ON COURTESY_CHECK.ID = CHECK_RETURN.COURTESY_CHECK_ID
WHERE 
    to_char(COURTESY_CHECK.DATE_RECEIVED, 'FMMonth') = ? AND 
    EXTRACT (YEAR FROM COURTESY_CHECK.DATE_RECEIVED) = ?

UNION ALL 

SELECT  
    COUNT(COURTESY_CHECK.CHECK_NUMBER) AS SUM,
    'IPAC' AS STATUS 
FROM 
    COURTESY_CHECK
    INNER JOIN CHECK_DEPOSIT 
        ON COURTESY_CHECK.ID = CHECK_DEPOSIT.COURTESY_CHECK_ID
WHERE 
    COURTESY_CHECK.CHECK_STATUS = 'CLOSED' AND
    to_char(COURTESY_CHECK.DATE_RECEIVED, 'FMMonth') = ? AND 
    EXTRACT (YEAR FROM COURTESY_CHECK.DATE_RECEIVED) = ?

UNION ALL

SELECT 
    COUNT(COURTESY_CHECK.CHECK_NUMBER) AS SUM, 
    'PENDING' AS STATUS
FROM 
    COURTESY_CHECK
WHERE 
    COURTESY_CHECK.CHECK_STATUS = 'PENDING' AND
    to_char(COURTESY_CHECK.DATE_RECEIVED, 'FMMonth') = ? AND 
    EXTRACT (YEAR FROM COURTESY_CHECK.DATE_RECEIVED) = ?

UNION ALL 

SELECT 
    COUNT(COURTESY_CHECK.CHECK_NUMBER) AS SUM, 
    'DEPOSITED' AS STATUS
FROM 
    COURTESY_CHECK
WHERE 
    COURTESY_CHECK.CHECK_STATUS = 'DEPOSITED' AND
    to_char(COURTESY_CHECK.DATE_RECEIVED, 'FMMonth') = ? AND 
    EXTRACT (YEAR FROM COURTESY_CHECK.DATE_RECEIVED) = ?

我的问题在于这部分:

WHERE 
    to_char(COURTESY_CHECK.DATE_RECEIVED, 'FMMonth') = ? AND 
    EXTRACT (YEAR FROM COURTESY_CHECK.DATE_RECEIVED) = ?

Month 和 Year 参数基于从以下查询动态创建的级联参数:

SELECT  

 DISTINCT to_char(COURTESY_CHECK.DATE_CREATED, 'Month') AS MN, 
 EXTRACT (YEAR FROM COURTESY_CHECK.DATE_CREATED) AS YR 

FROM COURTESY_CHECK

我发现使用'Month' 会提取月份名称和尾随空格,而'FMMonth' 会截断月份名称并删除空格。

我已经尝试对这两个查询使用'Month' 并看到饼图应该位于的空白区域。对这两个查询使用'FMMonth' 根本不会给我一个饼图(空的或其他的)。将'FMMonth' 用于其中一个也不起作用。

我使用to_char,因为这就是我在级联参数下拉菜单中显示月份名称的方式。我希望报告的用户看到月份名称而不是月份编号。

我不知道为什么饼图没有出现。

【问题讨论】:

  • 很难想象你对报告的意思,但是当你看到的东西和没有匹配的格式时,你会看到不同的东西,这表明当两者都是 FMMonth 时,你正在获取数据,因为你会想到,报告/图表工具有问题。当您直接在 SQL*Plus 中运行查询时会发生什么?我假设您确实有匹配的数据,尽管您比较的两个日期来自不同的列(创建/接收)。

标签: sql oracle charts birt


【解决方案1】:

您应该在级联参数和查询中使用月份编号,并利用“displayText”属性在下拉菜单中显示月份名称。这将解决由于字符转换导致的任何类型的问题,请参阅下面从this example 截取的屏幕截图。在您的情况下,应更改级联参数的查询以同时显示月份 ID 和名称:

SELECT  
 EXTRACT (MONTH FROM COURTESY_CHECK.DATE_CREATED) MN_ID,
 DISTINCT to_char(COURTESY_CHECK.DATE_CREATED, 'Month') AS MN_NAME, 
 EXTRACT (YEAR FROM COURTESY_CHECK.DATE_CREATED) AS YR 
FROM COURTESY_CHECK

在下面的示例中,部门级别显示的是 DEPARTMENT_NAME,但它实际上使用 DEPARTMENT_ID 作为参数值,它是一个整数。您可以使用以下表达式在报告正文中处理月份参数的值和显示文本(假设您将其命名为“月份”):

params["month"].value;
params["month"].displayText;

【讨论】:

  • 非常感谢您的帮助。显示文本属性是我忽略的。也谢谢你附上的照片。有一个视觉指南真的很有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多