如何在Crystal Reports for Visual Studio中实现数据透视报表?

时间:2013-07-16 04:17:35

标签: crystal-reports reporting crosstab

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

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

帮助。

2 个答案:

答案 0 :(得分:4)

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

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

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

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

**编辑**

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

enter image description here 选择“交叉表”标签,添加{table.census_time}字段,然后点击“群组选项...”按钮。

enter image description here

选择'每小时'。来自选项列表。

答案 1 :(得分:1)

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

表DayHour

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

这将返回具有时间段的所有记录,并且如果在特定时间段内没有车辆进入停车场,则将返回记录。将“期间”列拖放到交叉选项卡的“列”部分,将“日期”列拖放到“行”部分。将值列拖到摘要部分。