0

我是 Pentaho 水壶的新手。

我需要使用表输入步骤的结果集生成 microsoft excel 输出。

我在转换中使用以下步骤

  1. 获取系统数据 - 为要检索的表数据提供日期范围
  2. 表输入 - SQL 根据上一步中给出的日期范围检索表数据
  3. Excel 输出 - 使用 step2 的结果集生成 Excel。

我的 excel 输出在列标题之前应该有 3 个空行。所以我尝试使用联合生成空行并使用 sql 构造列标题。但是如果我在 sql 中选择空行(所有字段值将被视为字符串),水壶不会对字段应用格式。

无论如何在列标题之前的excel输出中生成空行,而不会干扰我的结果集。

SELECT 
    '' AS 'Accounting Month',   '' AS 'Insured Name','' AS 'Policy Number','' AS 'Company Name','' AS 'Line Of Business','' AS 'Transaction Type',  '' AS 'Effective Date','' AS 'Rate','' AS 'Gross Premium','' AS 'Commission Amount',    '' AS 'Expense Constant',   '' AS 'Net Amount','' AS 'Payment Amount', 1 as ORDERS
UNION ALL

SELECT 
    '' AS 'Accounting Month',   '' AS 'Insured Name','' AS 'Policy Number','' AS 'Company Name','' AS 'Line Of Business','' AS 'Transaction Type',  '' AS 'Effective Date','' AS 'Rate','' AS 'Gross Premium','' AS 'Commission Amount',    '' AS 'Expense Constant',   '' AS 'Net Amount','' AS 'Payment Amount', 1 as ORDERS
UNION ALL

SELECT 
    '' AS 'Accounting Month',   '' AS 'Insured Name','' AS 'Policy Number','' AS 'Company Name','' AS 'Line Of Business','' AS 'Transaction Type',  '' AS 'Effective Date','' AS 'Rate','' AS 'Gross Premium','' AS 'Commission Amount',    '' AS 'Expense Constant',   '' AS 'Net Amount','' AS 'Payment Amount', 1 as ORDERS
UNION ALL


SELECT 
    '' AS 'Accounting Month',   '' AS 'Insured Name','' AS 'Policy Number','' AS 'Company Name','' AS 'Line Of Business','' AS 'Transaction Type',  '' AS 'Effective Date','' AS 'Rate','' AS 'Gross Premium','' AS 'Commission Amount',    '' AS 'Expense Constant',   '' AS 'Net Amount','' AS 'Payment Amount', 3 as ORDERS
UNION ALL

SELECT 
 'Accounting Month',
 'Insured Name',
 'Policy Number',
 'Company Name',
 'Line Of Business',
 'Transaction Type',
 'Effective Date',
 'Rate',
'Gross Premium',
'Commission Amount',
'Expense Constant',
'Net Amount',
'Payment Amount', 
2 ORDERS

UNION ALL

SELECT * FROM (
SELECT 
        CONCAT(ACCOUNT_YEAR,ACCOUNT_MONTH) AS 'Accounting Month',
        INSURED_NAME AS 'Insured Name',
        POLICY_NUMBER AS 'Policy Number',
        COMPANY AS 'Company Name',
        LINE_OF_BUSINESS AS 'Line Of Business',
        TRANSACTION_DETAIL_TYPE 'Transaction Type',
        DATE_FORMAT(CHANGE_EFFECTIVE_DATE,'%m/%d/%Y') AS 'Effective Date',
        OWNER_COMMISSION_RATE AS 'Rate',
        GROSS_PREMIUM AS 'Gross Premium',
        OWNER_COMMISSION_AMOUNT AS 'Commission Amount',
        EXPENSE_CONSTANT AS 'Expense Constant',
        NET_AMOUNT AS 'Net Amount',
        NET_AMOUNT AS 'Payment Amount' ,
        4 ORDERS
        FROM TABLE1
        WHERE           
        DATE(TRANSACTION_ENTRY_DATE) >=?
        AND 
        DATE(TRANSACTION_ENTRY_DATE) <=?
        ORDER BY TABLE1.POLICY_NUMBER,TABLE1.FLAG,TABLE1.ENDORSEMENT_NUMBER
)T
ORDER BY ORDERS;
4

2 回答 2

0

我看到 2 个选项:

  1. 使用选择值步骤将列从字符串正确更改为整数或其他。
  2. 使用 Cast('' as Integer) 或类似方法确保 SQL 查询将列作为正确的数据类型返回。

如果您在联合的不同部分有不同的数据类型,我会认为您的联合查询会产生错误!?所以也许这里发生了其他事情?

于 2012-12-12T17:40:12.603 回答
0

您还可以使用 MS Excel Writer 步骤,并在内容选项卡上的“从写入 ... 空行开始”框输入 3。

于 2013-02-01T22:12:55.970 回答