我是一个BIRT新手,我真的可以用手做。
一些背景知识:
我正在开发一些软件,允许在数据中心中显示和简单建模第1层连接。
这是基于Java的,使用BIRT报告在Tomcat上运行。 BIRT从我们实现的一般Web服务中获取数据,以XML格式提供数据,BIRT使用SOAP提取这些数据。
我正在处理的报告目前正在查询我们的系统,以找出设备上某个特定端口的电路跟踪。
这个简单的报告工作正常。它给出了资产的祖先路径,然后是特定的资产和端口。
例如,资产ID 49345,端口1会产生一个看起来像这样的报告......
Organization >> Comms Room >> Comms Room Cabinet 02 Rack 01 >> Comms Room C02 R01 Telephone Patch Panel P1 - B1
Organization >> Comms Room >> Comms Room Cabinet 02 Rack 01 >> Comms Room C02 R01 Patch Panel 02 P2 - B2
Organization >> Client/Server development >> U1 ClntSvr FB 02 >> U1 ClntSvr FB 02 I4 P2 - B2
这表示电话配线架的背面通过跳线连接到另一个面板,到该面板的背面,到地板盒的背面。
这份报告非常愉快。
一个客户想要更多!
他们希望BIT报告中的Excel导出是可过滤的,即不是具有分隔的祖先路径,而是需要以列表形式,因此当它导出到Excel时,每个条目都在不同的列上。
我已经修改了我的查询以返回一个祖先元素数组而不是一个字符串,并且以它自己的方式,这也有效。
此新查询的SOAP响应如下(有关信息 - 可能有帮助)
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<FindCircuitByAssetAndPortResponse>
<CircuitDetail>
<FoundByAsset>Comms Room C02 R01 Telephone Patch Panel (id: 49345)</FoundByAsset>
<FoundByPort>P1</FoundByPort>
<CircuitAssetDetail>
<AssetId>49345</AssetId>
<AncestryPath>Organization >> Comms Room >> Comms Room Cabinet 02 Rack 01 >> Comms Room C02 R01 Telephone Patch Panel</AncestryPath>
<AncestryPathList>
<AncestryPathElement>Organization</AncestryPathElement>
<AncestryPathElement>Comms Room</AncestryPathElement>
<AncestryPathElement>Comms Room Cabinet 02 Rack 01</AncestryPathElement>
<AncestryPathElement>Comms Room C02 R01 Telephone Patch Panel</AncestryPathElement>
</AncestryPathList>
<AssetTypeName>Patch Panel</AssetTypeName>
<InPort>B1</InPort>
<OutPort>P1</OutPort>
</CircuitAssetDetail>
<CircuitAssetDetail>
<AssetId>49339</AssetId>
<AncestryPath>Organization >> Comms Room >> Comms Room Cabinet 02 Rack 01 >> Comms Room C02 R01 Patch Panel 02</AncestryPath>
<AncestryPathList>
<AncestryPathElement>Organization</AncestryPathElement>
<AncestryPathElement>Comms Room</AncestryPathElement>
<AncestryPathElement>Comms Room Cabinet 02 Rack 01</AncestryPathElement>
<AncestryPathElement>Comms Room C02 R01 Patch Panel 02</AncestryPathElement>
</AncestryPathList>
<AssetTypeName>Patch Panel</AssetTypeName>
<InPort>P2</InPort>
<OutPort>B2</OutPort>
</CircuitAssetDetail>
<CircuitAssetDetail>
<AssetId>48634</AssetId>
<AncestryPath>Organization >> Client/Server development >> U1 ClntSvr FB 02 >> U1 ClntSvr FB 02 I4</AncestryPath>
<AncestryPathList>
<AncestryPathElement>Organization</AncestryPathElement>
<AncestryPathElement>Client/Server development</AncestryPathElement>
<AncestryPathElement>U1 ClntSvr FB 02</AncestryPathElement>
<AncestryPathElement>U1 ClntSvr FB 02 I4</AncestryPathElement>
</AncestryPathList>
<AssetTypeName>Module</AssetTypeName>
<InPort>P2</InPort>
<OutPort>B2</OutPort>
</CircuitAssetDetail>
</CircuitDetail>
</FindCircuitByAssetAndPortResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
报告数据集使用最深层,即祖先元素。
当它显示数据时,会有重复的数据。例如,上面的数据现在显示为......
Organization B1 - P1
Comms Room B1 - P1
Comms Room Cabinet 02 Rack 01 B1 - P1
Comms Room C02 R01 Telephone Patch Panel B1 - P1
Organization P2 - B2
Comms Room P2 - B2
Comms Room Cabinet 02 Rack 01 P2 - B2
Comms Room C02 R01 Patch Panel 02 P2 - B2
Organization P2 - B2
Client/Server development P2 - B2
U1 ClntSvr FB 02 P2 - B2
U1 ClntSvr FB 02 I4 P2 - B2
这是“正确的”,因为我们通过XML获得了12个“行”。列映射表示元素是“当前”数据,端口(P1和B1)是“向上”一级,依此类推。
如果我获取有关祖先路径列表的数据,我们不会获得重复数据,但此时,祖先路径列表不会被视为列表,因此要么根本不显示,要么只显示重复列表中的第一个元素,产生......
Organization B1 - P1
Organization
Organization
Organization
Organization P2 - B2
Organization
Organization
Organization
Organization P2 - B2
Organization
Organization
Organization
我99%肯定BIRT会做我需要的,但我是新手,我很惊讶我已经尽我所能了!
此问题不具体,因为我们可能需要获取列表列表。
如果已经涵盖了我的道歉。我看过,但可能会列在我不熟悉的术语下。
非常感谢。
皮特。
答案 0 :(得分:0)
如果你想要这样的输出
Organization B1 - P1
Comms Room
Comms Room Cabinet 02 Rack 01
Comms Room C02 R01 Telephone Patch Panel
Organization P2 - B2
Comms Room
Comms Room Cabinet 02 Rack 01
Comms Room C02 R01 Patch Panel 02
Organization
Client/Server development
U1 ClntSvr FB 02
U1 ClntSvr FB 02 I4
在BIRT中有一个名为GROUP
的选项,你需要做的就是这个
选择表格,您将拥有属性对话框,您将拥有group options
,在该选项中,它将列出您的查询的列名称,您可以选择自己的列进行分组
view this tutorial for grouping