Crystal reports 如何在Crystal报表中水平显示多个结果?

Crystal reports 如何在Crystal报表中水平显示多个结果?,crystal-reports,Crystal Reports,我需要帮助在单个水平配置中显示我的8个结果。我有一张工作单,上面有一张带有检查表的表格。检查表是8个问题的通过或失败。每个CAT都有自己的代码,读取如果{F_checklist.CHK_TEXT}='其中一个测试名称',那么{@pass fail}我为8个测试组中的每个组设置了相同的代码 当我拉取数据并按WO将其分组时,其重复8次,每行的详细信息为通过或失败: 如果我抑制详细信息并将其放在组页脚中,我只会得到最后一个结果: 尽管这种报告作为交叉表/透视表更易于管理。据我所知,Crystal R

我需要帮助在单个水平配置中显示我的8个结果。我有一张工作单,上面有一张带有检查表的表格。检查表是8个问题的通过或失败。每个
CAT
都有自己的代码,读取
如果{F_checklist.CHK_TEXT}='其中一个测试名称',那么{@pass fail}
我为8个测试组中的每个组设置了相同的代码

当我拉取数据并按
WO
将其分组时,其重复8次,每行的详细信息为通过或失败:

如果我抑制详细信息并将其放在组页脚中,我只会得到最后一个结果:


尽管这种报告作为交叉表/透视表更易于管理。据我所知,Crystal Reports(直到版本9,不能说更高版本)不支持非数字数据透视。因此,在Sql pivot级别可以更好地处理此类情况

即使如此,对于固定级别的要求,例如您案例中的8个问题,也可以使用以下方法。您需要创建三个公式字段
f_Reset
f_Concat
f_Print
,并按如下方式设置其值:

  • f_Reset
    :将默认结果初始化为
    fail

    WhilePrintingRecords;
    stringVar Q1 := "fail";
    stringVar Q2 := "fail";
    stringVar Q3 := "fail";
    stringVar Q4 := "fail";
    stringVar Q5 := "fail";
    stringVar Q6 := "fail";
    stringVar Q7 := "fail";
    stringVar Q8 := "fail";
    stringVar st_Final := "";
    
  • f_Concat
    :检查所有问题的结果

    WhilePrintingRecords;
    if {F_CHECKLISTS.CHK_TEXT} = 'Test 1 Name' then stringVar Q1 := {@pass-fail};
    if {F_CHECKLISTS.CHK_TEXT} = 'Test 2 Name' then stringVar Q2 := {@pass-fail};
    if {F_CHECKLISTS.CHK_TEXT} = 'Test 3 Name' then stringVar Q3 := {@pass-fail};
    if {F_CHECKLISTS.CHK_TEXT} = 'Test 4 Name' then stringVar Q4 := {@pass-fail};
    if {F_CHECKLISTS.CHK_TEXT} = 'Test 5 Name' then stringVar Q5 := {@pass-fail};
    if {F_CHECKLISTS.CHK_TEXT} = 'Test 6 Name' then stringVar Q6 := {@pass-fail};
    if {F_CHECKLISTS.CHK_TEXT} = 'Test 7 Name' then stringVar Q7 := {@pass-fail};
    if {F_CHECKLISTS.CHK_TEXT} = 'Test 8 Name' then stringVar Q8 := {@pass-fail};
    
  • f_Print
    :准备最终显示结果

    WhilePrintingRecords;
    stringVar st_Final := stringVar Q1 + "    " + stringVar Q2 + "    " + stringVar Q3 + "    " + stringVar Q4 + "    " + stringVar Q5 + "    " + stringVar Q6 + "    " + stringVar Q7 + "    " + stringVar Q8;
    
  • 接下来,执行以下步骤:

  • 通过任意一个公共字段(如第二个屏幕截图中的
    WO
    )在报告中插入组
  • f_Reset
    公式字段置于组标题中
  • f_Concat
    公式字段置于详细信息部分
  • 将从
    Open
    Area Description
    的所有其他字段放置在报表页脚中,并设置其格式,就像它们在Detail部分一样(只是Details部分的一个副本,没有8个结果字段)
  • f_-Print
    公式字段放在组页脚部分,并沿所有8个结果标题拉伸它(所有8个结果的单个
    f_-Print
    公式字段)
  • 抑制
    组标题
  • 抑制
    详细信息部分

  • 基本思想是将所有结果连接到一个字符串,然后一次性显示。您可能需要调整
    f_Print
    中的连接空格,即
    +”
    ,以对齐8个结果标题下的值。

    尽管这种报告作为交叉选项卡/透视表更易于管理。据我所知,Crystal Reports(直到版本9,不能说更高版本)不支持非数字数据透视。因此,在Sql pivot级别可以更好地处理此类情况

    即使如此,对于固定级别的要求,例如您案例中的8个问题,也可以使用以下方法。您需要创建三个公式字段
    f_Reset
    f_Concat
    f_Print
    ,并按如下方式设置其值:

  • f_Reset
    :将默认结果初始化为
    fail

    WhilePrintingRecords;
    stringVar Q1 := "fail";
    stringVar Q2 := "fail";
    stringVar Q3 := "fail";
    stringVar Q4 := "fail";
    stringVar Q5 := "fail";
    stringVar Q6 := "fail";
    stringVar Q7 := "fail";
    stringVar Q8 := "fail";
    stringVar st_Final := "";
    
  • f_Concat
    :检查所有问题的结果

    WhilePrintingRecords;
    if {F_CHECKLISTS.CHK_TEXT} = 'Test 1 Name' then stringVar Q1 := {@pass-fail};
    if {F_CHECKLISTS.CHK_TEXT} = 'Test 2 Name' then stringVar Q2 := {@pass-fail};
    if {F_CHECKLISTS.CHK_TEXT} = 'Test 3 Name' then stringVar Q3 := {@pass-fail};
    if {F_CHECKLISTS.CHK_TEXT} = 'Test 4 Name' then stringVar Q4 := {@pass-fail};
    if {F_CHECKLISTS.CHK_TEXT} = 'Test 5 Name' then stringVar Q5 := {@pass-fail};
    if {F_CHECKLISTS.CHK_TEXT} = 'Test 6 Name' then stringVar Q6 := {@pass-fail};
    if {F_CHECKLISTS.CHK_TEXT} = 'Test 7 Name' then stringVar Q7 := {@pass-fail};
    if {F_CHECKLISTS.CHK_TEXT} = 'Test 8 Name' then stringVar Q8 := {@pass-fail};
    
  • f_Print
    :准备最终显示结果

    WhilePrintingRecords;
    stringVar st_Final := stringVar Q1 + "    " + stringVar Q2 + "    " + stringVar Q3 + "    " + stringVar Q4 + "    " + stringVar Q5 + "    " + stringVar Q6 + "    " + stringVar Q7 + "    " + stringVar Q8;
    
  • 接下来,执行以下步骤:

  • 通过任意一个公共字段(如第二个屏幕截图中的
    WO
    )在报告中插入组
  • f_Reset
    公式字段置于组标题中
  • f_Concat
    公式字段置于详细信息部分
  • 将从
    Open
    Area Description
    的所有其他字段放置在报表页脚中,并设置其格式,就像它们在Detail部分一样(只是Details部分的一个副本,没有8个结果字段)
  • f_-Print
    公式字段放在组页脚部分,并沿所有8个结果标题拉伸它(所有8个结果的单个
    f_-Print
    公式字段)
  • 抑制
    组标题
  • 抑制
    详细信息部分

  • 基本思想是将所有结果连接到一个字符串,然后一次性显示。您可能需要调整
    f_Print
    中的连接空格,即
    +”
    ,以对齐8个结果标题下的值。

    谢谢您的回复haraman,这在一定程度上起了作用,但在f_Print公式中,它没有传递st_Final的值?Q1-Q8在寻找某种价值我不明白你的意思:Q1-Q8在寻找某种价值。是的{pass fail}的编写方式就像{F_CHECK_RESULTS.CLR_PASSED}='Yes'然后是'pass'或者'fail'但是当我将代码添加到F_Print crystal告诉我它在寻找一个值时,那么只需显式地将每个Q1-Q8的类型声明为上面修改的
    stringVar
    Q1-Q8。i、 e.
    stringVar st_Final:=stringVar Q1+“”+stringVar Q2+“”+stringVar Q3…
    非常感谢您的帮助,它的工作方式正是我所需要的感谢您的响应haraman,这在某种程度上是有效的,但在f_打印公式中它没有传递st_Final的值?Q1-Q8在寻找某种价值我不明白你的意思:Q1-Q8在寻找某种价值。是的{pass fail}的编写方式就像{F_CHECK_RESULTS.CLR_PASSED}='Yes'然后是'pass'或者'fail'但是当我将代码添加到F_Print crystal告诉我它在寻找一个值时,那么只需显式地将每个Q1-Q8的类型声明为上面修改的
    stringVar
    Q1-Q8。i、 e.
    stringVar st_Final:=stringVar Q1+“”+stringVar Q2+“”+stringVar Q3…
    非常感谢您的帮助,它正是我需要的方式工作