She*_*ets 3 xml reporting-services ssrs-2016
我已经使用自动服务工具将报表文件从Crystal(.rpt)转换为SSRS(.rdl)。当我在Viusal Studio SSDT中预览报告时,收到一条非常奇怪的错误消息:
“定义的参数数量不等于参数面板中的单元格定义数量”
我也尝试在Report Builder中运行它,并且收到了相同的错误消息。
RDL文件有1710行;下面是看起来像它们相关的某些节点的代码-ReportParameters,ReportLayout,QueryParameters,CommandText。
有谁知道是什么原因导致此错误?而我该如何解决呢?我读过一篇文章,建议隐藏参数必须具有默认值-SSRS 报告的定义无效;8个参数中有7个是隐藏的,并且没有一个具有默认参数。但是我不确定默认值应该是什么(如果必须有一个)。
任何帮助表示赞赏。
第16..20行
<QueryParameters>
<QueryParameter Name=":PmPROD_WHSEPROD_CODE">
<Value>=Parameters!PmPROD_WHSEPROD_CODE.Value</Value>
</QueryParameter>
</QueryParameters>
Run Code Online (Sandbox Code Playgroud)
行1533..1573
<ReportParameters>
<ReportParameter Name="PmPROD_WHSEPROD_CODE">
<DataType>String</DataType>
<Prompt>Pm-PROD_WHSE.PROD_CODE</Prompt>
</ReportParameter>
<ReportParameter Name="g_invtot">
<DataType>Float</DataType>
<Prompt>invtot</Prompt>
<Hidden>true</Hidden>
</ReportParameter>
<ReportParameter Name="g_grdtotinv">
<DataType>Float</DataType>
<Prompt>grdtotinv</Prompt>
<Hidden>true</Hidden>
</ReportParameter>
<ReportParameter Name="g_totweight">
<DataType>Float</DataType>
<Prompt>totweight</Prompt>
<Hidden>true</Hidden>
</ReportParameter>
<ReportParameter Name="g_grand_tot_wgt">
<DataType>Float</DataType>
<Prompt>grand_tot_wgt</Prompt>
<Hidden>true</Hidden>
</ReportParameter>
<ReportParameter Name="g_grdtotwgt">
<DataType>Float</DataType>
<Prompt>grdtotwgt</Prompt>
<Hidden>true</Hidden>
</ReportParameter>
<ReportParameter Name="g_totinv">
<DataType>Float</DataType>
<Prompt>totinv</Prompt>
<Hidden>true</Hidden>
</ReportParameter>
<ReportParameter Name="g_totqtyonorder">
<DataType>Float</DataType>
<Prompt>totqtyonorder</Prompt>
<Hidden>true</Hidden>
</ReportParameter>
</ReportParameters>
Run Code Online (Sandbox Code Playgroud)
1574..1586行
<ReportParametersLayout>
<GridLayoutDefinition>
<NumberOfColumns>4</NumberOfColumns>
<NumberOfRows>2</NumberOfRows>
<CellDefinitions>
<CellDefinition>
<ColumnIndex>0</ColumnIndex>
<RowIndex>0</RowIndex>
<ParameterName>PmPROD_WHSEPROD_CODE</ParameterName>
</CellDefinition>
</CellDefinitions>
</GridLayoutDefinition>
</ReportParametersLayout>
Run Code Online (Sandbox Code Playgroud)
第21..55行
<CommandText>
Select ORD_HDR.ORDER_SEQ_CODE ORD_HDR_ORDER_SEQ_CODE
, ORD_HDR.MASTER_ORDER_NBR
, ORD_HDR.STATUS_CODE
, ORD_HDR.ORDER_TYPE
, ORD_HDR.BILL_PO_ID
, ORD_HDR.SHIP_PO_ID
, ORD_HDR.SHIP_DATE
, ORD_HDR.DELIVERY_DATE
, ORD_HDR.SHIP_FROM_WHSE ORD_HDR_SHIP_FROM_WHSE
, ORD_DTL.PROD_CODE ORD_DTL_PROD_CODE
, ORD_DTL.CASES_ORD
, PRODUCT.DESCR
, Command.PRICE COMMAND_PRICE
, Command.NAME COMMAND_NAME
, Command.CITY COMMAND_CITY
, Command.STATE_CODE COMMAND_STATE_CODE
From (SELECT d.prod_code,
d.order_seq_code,
d.price + NVL (d.market_price_adj, 0) price,
h.cust_shipto_code,
c.name,
c.city,
c.state_code
FROM ord_dtl d, ord_hdr h, customer_shipto c
WHERE d.order_seq_code = h.order_seq_code
AND h.cust_code = c.cust_code
AND h.cust_shipto_code = c.cust_shipto_code) Command
INNER JOIN ROCCO.ORD_HDR ORD_HDR on (Command.ORDER_SEQ_CODE = ORD_HDR.ORDER_SEQ_CODE)
INNER JOIN ROCCO.ORD_DTL ORD_DTL on (Command.PROD_CODE = ORD_DTL.PROD_CODE and ORD_DTL.ORDER_SEQ_CODE = ORD_HDR.ORDER_SEQ_CODE)
INNER JOIN ROCCO.CUSTOMER CUSTOMER on (ORD_HDR.CUST_CODE = CUSTOMER.CUST_CODE)
INNER JOIN ROCCO.PRODUCT PRODUCT on (ORD_DTL.PROD_CODE = PRODUCT.PROD_CODE)
Where (((ORD_HDR.ORDER_TYPE <> 'tr') And (ORD_DTL.PROD_CODE = :PmPROD_WHSEPROD_CODE)) And (Not (ORD_HDR.STATUS_CODE in ('ED', 'dl', 'ip', 'sp')))) And (ORD_HDR.SHIP_FROM_WHSE = '06')
Order by ORD_DTL.PROD_CODE
, ORD_HDR.DELIVERY_DATE</CommandText>
Run Code Online (Sandbox Code Playgroud)
因此,即使该参数被隐藏,它仍需要在RDL文件中具有标签。我通过测试另一个报告来了解这一点,以查看RDL文件在隐藏参数下的行为。
要更正有问题的RDL文件...
<ReportParametersLayout><CellDefinitions>
包括一个<CellDefinition>
节点(下面的代码)希望这对其他人有帮助。
<ReportParametersLayout>
<GridLayoutDefinition>
<NumberOfColumns>4</NumberOfColumns>
<NumberOfRows>2</NumberOfRows>
<CellDefinitions>
<CellDefinition>
<ColumnIndex>0</ColumnIndex>
<RowIndex>0</RowIndex>
<ParameterName>PmPROD_WHSEPROD_CODE</ParameterName>
</CellDefinition>
<CellDefinition>
<ColumnIndex>1</ColumnIndex>
<RowIndex>0</RowIndex>
<ParameterName>g_invtot</ParameterName>
</CellDefinition>
<CellDefinition>
<ColumnIndex>2</ColumnIndex>
<RowIndex>0</RowIndex>
<ParameterName>g_grdtotinv</ParameterName>
</CellDefinition>
<CellDefinition>
<ColumnIndex>3</ColumnIndex>
<RowIndex>0</RowIndex>
<ParameterName>g_totweight</ParameterName>
</CellDefinition>
<CellDefinition>
<ColumnIndex>0</ColumnIndex>
<RowIndex>1</RowIndex>
<ParameterName>g_grand_tot_wgt</ParameterName>
</CellDefinition>
<CellDefinition>
<ColumnIndex>1</ColumnIndex>
<RowIndex>1</RowIndex>
<ParameterName>g_grdtotwgt</ParameterName>
</CellDefinition>
<CellDefinition>
<ColumnIndex>2</ColumnIndex>
<RowIndex>1</RowIndex>
<ParameterName>g_totinv</ParameterName>
</CellDefinition>
<CellDefinition>
<ColumnIndex>3</ColumnIndex>
<RowIndex>1</RowIndex>
<ParameterName>g_totqtyonorder</ParameterName>
</CellDefinition>
</CellDefinitions>
</GridLayoutDefinition>
</ReportParametersLayout>
Run Code Online (Sandbox Code Playgroud)