- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我想从数组创建交叉表列,然后将更正信息插入交叉表中,有人有提示吗?
例如,我的数据库中有一个如下表:
客户1 ---- 01-01-2016 ---- A|
客户1 ---- 01-03-2016 ---- B|
客户2 ---- 01-01-2016 ---- A|
当用户请求1月16日至3月16日的报告时,报告应如下所示:
客户1 ---- 事件计数:1 ---- 事件计数:0 ---- 事件计数:1
customer2 ---- 事件计数:1 ---- 事件计数:0 ---- 事件计数:0
总计 ---- 事件总和:2 ---- 事件总和:0 ---- 事件计数:1
目前的问题是,由于2016年2月内没有数据,因此报告中缺少02-2016列。
是否有任何方法(如 scriptlet)创建一个数组作为列,然后告诉 JasperReport 在 Activity_date == column_date 时插入正确的数据?
我正在使用 Jaspersoft Studio。
最佳答案
要显示没有日期的日期(在您的情况下没有事件),您应该使用数据源传递数据。 JasperReports 不知道任何日期范围或其他内容。只需要一个数据即可。
如果使用数据库,您可以使用外部联接和某些日期范围“生成器”来显示数据。
我们应该解决这个任务:
获取某个时间段内所有日期(天)的列表。对于不同的 RDBMS,语法会有所不同。
对于PostgreSQL,您可以在Getting date list in a range in PostgreSQL中找到解决方案帖子
对于 MySQL - MySQL how to fill missing dates in range & generate days from date range对于 SQL Server - SQL Server: How to select all days in a date range even if no data exists for some days
使用左或右outter join .
Sorting按日期排列的数据和您想要的数据
如果使用 JavaBean datasources您应该做同样的事情 - 添加您需要的日期(没有数据)并对数据进行排序。我们可以跳过实现数据排序并要求 JasperReports 引擎为我们完成此操作。
交叉表有一个“功能” - 我们无法隐藏有条件的行。即使我们设置了隐藏所有文本字段的所有属性 - 也会绘制空行。如果我们尝试在交叉表上使用过滤器,我们的附加行将会消失。我认为(在这种可怜的情况下)好主意是为该行指定一个特殊的名称(我们也可以用更好的名称替换 0)。在我的示例中,它将是“未设置”。
我在此示例中使用了 PostgreSQL。
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="crss_dates_group" pageWidth="842" pageHeight="595" orientation="Landscape" whenNoDataType="AllSectionsNoDetail" columnWidth="802" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" isIgnorePagination="true" uuid="6886d70f-dbf3-4dfa-bbee-d5bc70b1c45d">
<style name="Crosstab Data Text" hAlign="Center"/>
<subDataset name="dsDates" uuid="9b8d3c04-25f5-40f0-b116-a77f8d2f7445">
<queryString language="SQL">
<![CDATA[SELECT activityName, to_char(generate_series, 'YYYY-MM-DD') AS activityDate
FROM myTable RIGHT OUTER JOIN (SELECT (generate_series('2010-07-18', '2010-07-29', '1 day'::interval))::date) fake
ON to_char(activityDateFromMyTable, 'YYYY-MM-DD')=to_char(generate_series, 'YYYY-MM-DD') ORDER BY 2, 1]]>
</queryString>
<field name="activityName" class="java.lang.String"/>
<field name="activityDate" class="java.lang.String"/>
<group name="activityDateGroup">
<groupExpression><![CDATA[$F{activityDate}]]></groupExpression>
</group>
</subDataset>
<title>
<band height="79" splitType="Stretch">
<crosstab>
<reportElement x="0" y="0" width="802" height="79" uuid="d39eef3f-aada-406f-99ee-1d2ce2bde5c8"/>
<crosstabDataset>
<dataset>
<datasetRun subDataset="dsDates" uuid="619c0498-512a-4f23-9f1e-6a5d7cfa986d">
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
</datasetRun>
</dataset>
</crosstabDataset>
<rowGroup name="activityName" width="95" totalPosition="End">
<bucket class="java.lang.String">
<bucketExpression><![CDATA[$F{activityName}]]></bucketExpression>
</bucket>
<crosstabRowHeader>
<cellContents backcolor="#F0F8FF" mode="Opaque">
<box>
<pen lineWidth="0.5" lineStyle="Solid" lineColor="#000000"/>
</box>
<textField>
<reportElement style="Crosstab Data Text" x="0" y="0" width="95" height="25" uuid="c25490b6-a836-41fb-a36c-a7ebb211bf03"/>
<textFieldExpression><![CDATA[$V{activityName} == null ? "Not set" : $V{activityName}]]></textFieldExpression>
</textField>
</cellContents>
</crosstabRowHeader>
<crosstabTotalRowHeader>
<cellContents backcolor="#BFE1FF" mode="Opaque">
<box>
<pen lineWidth="0.5" lineStyle="Solid" lineColor="#000000"/>
</box>
<staticText>
<reportElement x="0" y="0" width="95" height="25" uuid="12efa463-c4a3-4120-b0e2-0664856cc616"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[Total by Date]]></text>
</staticText>
</cellContents>
</crosstabTotalRowHeader>
</rowGroup>
<columnGroup name="activityDate" height="30" totalPosition="End">
<bucket class="java.lang.String">
<bucketExpression><![CDATA[$F{activityDate}]]></bucketExpression>
</bucket>
<crosstabColumnHeader>
<cellContents backcolor="#F0F8FF" mode="Opaque">
<box>
<pen lineWidth="0.5" lineStyle="Solid" lineColor="#000000"/>
</box>
<textField>
<reportElement style="Crosstab Data Text" x="0" y="0" width="61" height="30" uuid="5b931464-5a7a-4e57-a51a-3d687c0a4130"/>
<textFieldExpression><![CDATA[$V{activityDate}]]></textFieldExpression>
</textField>
</cellContents>
</crosstabColumnHeader>
<crosstabTotalColumnHeader>
<cellContents backcolor="#BFE1FF" mode="Opaque">
<box>
<pen lineWidth="0.5" lineStyle="Solid" lineColor="#000000"/>
</box>
<staticText>
<reportElement x="0" y="0" width="50" height="30" uuid="227c77a6-b1c1-485f-95cf-95b43bc95920"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[Total by Activity]]></text>
</staticText>
</cellContents>
</crosstabTotalColumnHeader>
</columnGroup>
<measure name="activityNameMeasure" class="java.lang.Integer" calculation="Count">
<measureExpression><![CDATA[$F{activityName}]]></measureExpression>
</measure>
<crosstabCell width="61" height="25">
<cellContents>
<box>
<pen lineWidth="0.5" lineStyle="Solid" lineColor="#000000"/>
</box>
<textField>
<reportElement style="Crosstab Data Text" x="0" y="0" width="61" height="25" uuid="b8a8aacb-58d1-447a-9628-7f045b039f9f"/>
<textFieldExpression><![CDATA[$V{activityNameMeasure}]]></textFieldExpression>
</textField>
</cellContents>
</crosstabCell>
<crosstabCell width="61" height="25" rowTotalGroup="activityName">
<cellContents backcolor="#BFE1FF" mode="Opaque">
<box>
<pen lineWidth="0.5" lineStyle="Solid" lineColor="#000000"/>
</box>
<textField>
<reportElement style="Crosstab Data Text" x="0" y="0" width="61" height="25" uuid="02e88c9a-e9cc-4674-9301-21676d3f33bc"/>
<textFieldExpression><![CDATA[$V{activityNameMeasure}]]></textFieldExpression>
</textField>
</cellContents>
</crosstabCell>
<crosstabCell width="50" columnTotalGroup="activityDate">
<cellContents backcolor="#BFE1FF" mode="Opaque">
<box>
<pen lineWidth="0.5" lineStyle="Solid" lineColor="#000000"/>
</box>
<textField>
<reportElement style="Crosstab Data Text" x="0" y="0" width="50" height="25" uuid="d39d1353-61a6-4041-96d6-2065bae0041b"/>
<textFieldExpression><![CDATA[$V{activityNameMeasure}]]></textFieldExpression>
</textField>
</cellContents>
</crosstabCell>
<crosstabCell rowTotalGroup="activityName" columnTotalGroup="activityDate">
<cellContents backcolor="#BFE1FF" mode="Opaque">
<box>
<pen lineWidth="0.5" lineStyle="Solid" lineColor="#000000"/>
</box>
<textField>
<reportElement style="Crosstab Data Text" x="0" y="0" width="50" height="25" uuid="09aa0d57-5cfa-4e78-af85-0e718c0fee44"/>
<textFieldExpression><![CDATA[$V{activityNameMeasure}]]></textFieldExpression>
</textField>
</cellContents>
</crosstabCell>
</crosstab>
</band>
</title>
</jasperReport>
我尝试在“删除空白行”、“空时空白”、“表达式时打印”属性的帮助下隐藏空行(带空),但没有成功。挖掘源代码对我也没有帮助。
您可以在此处找到有关在交叉表中隐藏空记录的类似尝试的更多信息:
也许是时候在 Jaspersoft/Tibco 社区投票支持这个“新旧”功能(隐藏空行)了:)
关于jasper-reports - 即使数据不存在,如何在交叉表中显示列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35931937/
是否有将 Crystal Reports .rpt 文件转换为 SQL Reporting 2008 .rdl 文件的免费软件? 最佳答案 您很快就会发现,由于 Crystal 许可限制,这是不允许的
如何将 Crystal Reports 8.0 迁移到 Crystal Reports 2008? 8.0的存储过程的 Crystal 报表在2008年不执行,有人可以帮忙吗? 我们正在使用 Seag
我们有几个执行相同格式操作的报告(例如,如果值在特定范围内,则显示“通过”或“失败”。) 如果没有 Crystal Reports Server,有没有办法在报表之间共享功能,以便它们不需要重复?我知
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我的 Allure 报告以 MM/dd/yyyy 格式显示日期。我想将格式更改为 dd/MM/yyyy。是否可以在 Allure 报告中设置不同的日期格式? 最佳答案 是的,您可以在 settings
在矩阵报告中是否可以根据父组的值隐藏列? 例如,我有一个名为“value”的列,当包含它的列组具有特定值时,我想隐藏它。 最佳答案 对的,这是可能的。如果您单击该组并在“可见性”选项卡下编辑其属性,您
我有一个 Crystal 报告,它正在打印一个空白页并可以很好地打印报告,但只是使用了这个额外的页面。 完成我的研究,勾选、取消勾选并将正确的公式添加到“新页面之后”选项中,而不是在最后一条记录公式等
我的 PDF 报告有问题,在填充文本字段之前,文本字段中的字符串被截断。丢失字符的数量 (5-6) 不足以超过 textField 的末尾. 我添加了 text.truncate.at.char属性添
如果数据字段“IsVisible”设置为 1,我在 Crystal Report 上有一个文本和绘图,我想隐藏它。有没有简单的方法来做到这一点? 最佳答案 您可以通过转到“部分专家”-> 选择所需部分
我设计了一个 Crystal 交叉表报告。它是这样显示的 col1 col2 col3 行1 行11 val1 val2 val3 行2 行21 val1 val2 val3 但我也想要
我刚刚购买了最新版本的 SAP Crystal Reports,并从他们的网站下载了它。我正在尝试运行 Setup.exe 程序,但是一旦我双击它,我就会收到一条 fatal error 消息,指出
如何在 Crystal Reports 中使用多个非嵌套组? 我想做的一个小例子: - 租车头 --rentals 标题(组) ---出租时间为 01-02-2008 至 01-06-2008 ---
我有一个多列 Crystal 报告,现在我想显示重量和数量列的运行总计。实际报告的图片是这个 但是 Crystal 报表设计器不显示其他列,所以我应该在哪一列计算值。 最佳答案 遵循这种方法: 使用以
在 Crystal Reports 中,运行总计字段和汇总字段有什么区别? (在 Crystal IDE 中,汇总字段位于插入 -> 汇总。可以在字段资源管理器中添加运行总计) (版本 11.5) 最
我正在用 Crystal 开发一份报告,我需要对具有多种不同状态的特定字段进行计数。例如,我的报告中有一个“StatusType”字段,其中包含的值是 "In Process", "Rejected"
我有一份 SSRS 2005 报告,其中包含许多图像。我包含图像的方式是我有一个图像对象,其 URL 设置在 value 属性中。实际图像由同一台服务器上的 IIS 虚拟目录托管。我这样做是因为我需要
我正在尝试打印组的最后一条记录,但表达式 print when group changes: True似乎不起作用。它只是打印该组的所有记录。 (我已经根据用户名对记录进行了分组)。 最佳答案 我遇到
我需要构建一个报告,以四个分组级别显示数据。棘手的部分是:要在这四个级别上显示的实际字段将作为参数传递到报告中。 我现在的主要问题是:如何告诉报告上的文本框不显示参数@X 的值,而是按参数@X 中指定
是否可以确定 Reporting Services 报表中显示的列数,并在单独文本框的可见性表达式中使用它? 我面临以下情况: 我的客户有一个 Reporting Services 2005 报告,其
在 RS 报告中,我有一个矩阵,其 LayoutDirection 属性设置为 RTL(因为它是希伯来语)。我通过从数据集字段列表中拖动一个字段并将其放在矩阵的列标题中来创建一个列组。所以列数是可变的
我是一名优秀的程序员,十分优秀!