【问题标题】:How do I achieve a pivot report in Crystal Reports for Visual Studio?如何在 Crystal Reports for Visual Studio 中实现数据透视报表?
【发布时间】:2013-07-14 02:59:24
【问题描述】:

除了带有小计的水平线之外,我在任何报告中都是排名菜鸟。我有一个数据集,其中包含汽车在停车场所花费的时间。我必须生成一个表格,显示每小时一列和每一天的一行,显示特定日期特定时间的条目数。

我会在 RDLC 设计器中发现这更容易,因为它是柱状分组,但我什至在 Crystal 中找不到这样的东西。

帮助。

【问题讨论】:

  • 你试过交叉表吗?

标签: crystal-reports reporting crosstab


【解决方案1】:

假设以下字段:{table.car_id}{table.census_time}

  • 选择插入 |交叉表...;将交叉表添加到报表标题部分

右键单击交叉表并选择“交叉表专家”:

  • {table.census_time]添加到列字段列表中;按小时分组
  • {table.census_time}添加到行字段列表中;按天分组
  • {table.car_id} 添加到汇总字段列表中;计数

** 编辑 **

您无需创建特殊公式即可从日期/时间字段中提取小时;交叉表将为您做到这一点。

选择“Cross-Tab”选项卡,添加{table.census_time} 字段,然后单击“Group Options...”按钮。

选择“每小时”。从选择列表中。

【讨论】:

  • 我该怎么做按小时对列进行分组?它是第二个选项卡,组选项,使用公式作为组名吗?在那里我尝试应用公式Hour({table.census_time]),它告诉我有一个错误,“剩余的文本似乎不是公式的一部分”。
【解决方案2】:

您需要创建一个记录每小时的表:

餐桌时间

Period             StartHour        EndHour
00:00 - 01:00      0                 1
01:00 - 02:00      1                 2
02:00 - 03:00      2                 3
03:00 - 04:00      3                 4
...
23:00 - 00:00      23                24

然后将您的数据与此表左连接

SELECT h.Period, DATEPART(dd,d.EntryTime) as Day, 1 as Value
FROM DayHour h LEFT JOIN <YourData> d ON h.StartHour <=DATEPART(hh,d.EntryTime) and DATEPART(hh,d.EntryTime)<h.EndHour

这将返回包含时间段的所有记录,如果在特定时间范围内没有车辆进入停车场,甚至会返回一条记录。将 Period 列拖放到交叉表的列部分,将 Day 列拖放到 Rows 部分。将值列拖到摘要部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-30
    相关资源
    最近更新 更多