下拉列表中的动态交叉表

时间:2012-02-26 23:26:43

标签: asp.net sql crystal-reports telerik-reporting

我一直在尝试创建一个带有动态交叉标签和列的透视表,但运气不佳。我需要它才能像这样运行,顶部有动态交叉标签,左侧有动态列。

1 http://img689.imageshack.us/img689/1812/crosstabs.jpg

我也只需要显示选定的列和交叉表。例如,如果只选择了一列和一个交叉表,则它们应该是唯一显示的列。我已经尝试了一个sql枢轴和一个网格,但我不能让它正确格式化,两个列类别堆叠在顶部。我也尝试了水晶报告,但没有选择时隐藏交叉标签。我尝试了Telerik报告控件,但无法通过下拉菜单动态生成交叉表。我正在寻找有关如何处理此问题的任何建议。此外,如果有人创建了这样的东西或有一个想法如何,请分享。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

我从未使用过Telerik,因此以下建议仅适用于Crystal。

您可以通过至少两种不同的方式在Crystal中有条件地隐藏交叉表:

  1. 通过格式对话框(交叉选项卡专家) - 右键单击​​交叉表,从菜单中选择格式交叉表...,按x-2按钮在“格式编辑器”对话框的“常用”选项卡中的“抑制”旁边,输入适当的公式(类似于{?crosstab1s1}="n/a")。
  2. 将交叉表放在其自己的子部分中并使子部分有条件地被抑制 - 右键单击​​相关子部分的“报表设计器设计”选项卡中报表布局区域左侧的灰色区域,选择Section Expert ...从菜单中,按Section Section对话框的Common选项卡中的Suppress(No Drill-Down)旁边的x-2按钮,输入一个合适的公式。
  3. 我建议使用后两种方法 - 抑制交叉表本身仍然会留下显示它的空白区域。

    您也可以将交叉表放在各自的子报表中,并有条件地抑制那些 - 然而,这会带来额外的复杂程度,此时似乎不需要。

    其他一些评论:

    • Crystal的参数不如ASP中的参数灵活,因此如果可能的话,在ASP中进行所有参数选择并将参数传递给Crystal。
    • Crystal对null的处理有些尴尬,因此传递一个指示不需要交叉表的特定值,而不是依赖于参数的评估为null。
    • 您的交叉表参数当前被安排为交叉表1和交叉表2,每个参数都包含在第1节,第2节和第3节中。目前尚不清楚这是否意味着总共最多应有6个交叉表,或者只有两个交叉表:
      • 如果是前者,则不清楚如何指定行分组,列分组和汇总字段。
      • 如果是后者,那么我建议将第1,2和3节重命名为行分组,列分组和汇总字段(因为我假设这是这些代表的内容)。
    • 您目前有Show Group Totals和Show Percentages选项 - 这些选项似乎适用于交叉表。这些选项可以在Crystal中指定,但不能在报表设计器中有条件地指定。
      • 如果您能够访问Crystal API,则应该可以在运行时以编程方式设置这些选项。
      • 否则,如果要为每个交叉表包含两个选项,则唯一的选择是将每个交叉表的四个版本添加到报表中,每个交叉表都根据选择的选项进行有条件抑制。 (除非你别无选择,否则我不推荐这种方法。)
    • Crystal无法处理动态数据结构(即在设计报表时必须知道数据结构)所以我建议根据指定的参数在SQL存储过程中生成结果集,结构如下:

    Dataset structure

    crosstab1Row
    crosstab1Column
    crosstab1SumValue
    crosstab2Row
    crosstab2Column
    crosstab2SumValue
    reportColumn1
    reportColumn2
    reportColumn3
    reportColumn4
    reportColumn5