【问题标题】:SQL Dynamic Columns to Crystal ReportsSQL 动态列到 Crystal Reports
【发布时间】:2017-09-22 10:00:05
【问题描述】:

我有来自某个存储过程的以下结果集。

Tag  | Name  | Color  |   Qty   |     Sizes
 A     Joey    Black    1,2,3,4    S, M, L, XL
 A     Joey    Indigo   5,4,3,2    S, M, L, XL

水晶报表视图的预期输出。

                       S   M   L   XL
A   Joey    Black      1   2   3   4 
A   Joey    Indigo     5   4   3   2

首先,我尝试使用 SQL 分隔逗号分隔的字符串,并设法将其转换为表格行。

S
M
L
XL

我最初的方法是创建单独的结果集并使用这些数据块构建报告。最终,单独的数据块在多个子报告中产生了结果,我在组合列和行的详细信息时遇到了困难。

有没有办法直接从数据表创建报告?我希望使用 .net DataTables 修改 SQL 结果并将其直接绑定到报告。或者也许有更好的方法来完成这份报告?

任何帮助/想法将不胜感激。

PS:请注意,大小是动态数据,每条记录可能会有所不同。此外,数量与大小直接相关。即数量 1 = 尺寸 S

【问题讨论】:

  • 如果每条记录的大小都不同,为什么要在预期结果中将其用作列标题?还是标签会有所不同?
  • 不幸的是,要求就是这样。我很难弄清楚这一点。我也尝试了 RDLC 而不是 CR,但它不允许我将多个数据集放在一个表上,尽管 CR 可以。是的,它因每个标签而异。
  • 在分组结束时是否需要总尺寸?
  • 是的,尺寸和总和也是必需的。
  • 好吧,再问一个问题……总是有 4 种尺寸类别吗?

标签: c# sql-server reporting-services crystal-reports


【解决方案1】:

我可以在 Crystal 中看到几种方法来解决此问题,但请尝试一下。相当乏味,但应该工作。 创建一个名为 sz1Hdr

if ubound(Split({@Sizes},",")) > 1 then Split({@Sizes},",")[1]

重复一遍,对于最大数量的尺寸,您可能需要在公式名称和公式内容中增加数字 1。所以下一个是 sz2Hdr

if ubound(Split({@Sizes},",")) > 2 then Split({@Sizes},",")[2]

将它们放在您将为标签创建的组的标题中。

现在创建一个名为 qty1 的公式

if ubound(Split({@QTY},",")) > 1 then tonumber(Split({@QTY},",")[1])

为您在上面创建的每个 sz#Hdr 公式创建一个,同时增加 1。将这些中的每一个放在其相应标题下方的详细信息部分中。 右键单击画布上的每个 qty# 公式并选择格式字段 - 通用,然后单击 Suppress 右侧的 X-2 并在每个公式中输入此公式。

CurrentFieldValue=0

您现在可以将这些字段中的每一个汇总到您的组页脚和/或报告页脚...不是最干净的解决方案,但如果我了解您的要求,这应该可以工作。

【讨论】:

  • 我试过这个解决方案,它工作正常,除了数组的最后一个元素没有同时显示尺寸和数量。我不得不省略 CurrentFieldValue=0 公式,因为我不知何故需要 0 值。
  • 我通过将额外的, 连接到来自 sql 的 Sizes and Qty 结果集解决了数组的问题。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多