Reporting services SSRS-查询参数集合中不存在的参数引用

Reporting services SSRS-查询参数集合中不存在的参数引用,reporting-services,Reporting Services,我有一份有效的报告。我添加了一个新的数据集(报告仍然有效)。我向新数据集添加参数(报告失败)。完整的错误消息如下: 查询参数“:IP\u START\u DATE”的值表达式包含 一个错误。表达式引用参数“paramStartDate”, 参数集合中不存在的。书信 参数名称必须使用正确的大小写。 我的问题与这个非常相似()。但是我已经尝试了那里的建议(重新排序报告参数,将代码复制到新报告,删除“.Data”文件,参数大小写正确) 这些都不管用,我总是出错。在我看来非常奇怪的是,当我将Datase

我有一份有效的报告。我添加了一个新的数据集(报告仍然有效)。我向新数据集添加参数(报告失败)。完整的错误消息如下:

查询参数“:IP\u START\u DATE”的值表达式包含 一个错误。表达式引用参数“paramStartDate”, 参数集合中不存在的。书信 参数名称必须使用正确的大小写。

我的问题与这个非常相似()。但是我已经尝试了那里的建议(
重新排序报告参数
将代码复制到新报告
删除“.Data”文件
参数大小写正确

这些都不管用,我总是出错。在我看来非常奇怪的是,当我将Dataset参数值配置为映射到名称时,这些值的顺序与我的报告参数部分中定义的顺序不一致。截图包括以下内容

有人知道为什么我下面截图中的下拉列表顺序不正确吗?如何解决这个问题?我相信这可能是原因。下面是我尝试过的一些东西。我还验证了源数据库中的所有字段都是大写的,并且我的SQL数据集与此匹配

谢谢, 布莱恩


见下文:

  • 错误顺序映射的屏幕截图
  • “ReportParameters”的XML标记屏幕截图
  • “ReportParameters”的XML代码
  • 我已采取步骤完全删除并重新添加参数,但它们的顺序仍然错误
删除/添加参数:

  • 在代码中,删除“”和“”节点(位于“/ReportSections”之后和“Code”之前)
  • 删除所有“”节点
  • 查看报表设计器并验证报表和查询参数是否已删除。关闭设计器文件。打开设计器文件
  • 在代码中,添加“ReportParameters”和“ReportParametersLayout”节点(位于“/ReportSections”和“Code”之间)
  • 在报告中刷新数据集。然后映射参数
  • 屏幕截图-参数下拉列表(顺序错误):

    Screnshot-XML:

    XML:

    <ReportParameters>
        <ReportParameter Name="paramLocCode">
            <DataType>String</DataType>
            <Prompt>Location</Prompt>
            <ValidValues>
            <DataSetReference>
            <DataSetName>listLocationData</DataSetName>
            <ValueField>LOC_CODE</ValueField>
            <LabelField>fxLabel</LabelField>
            </DataSetReference>
            </ValidValues>
        </ReportParameter>
            <ReportParameter Name="paramStartDate">
            <DataType>String</DataType>
            <DefaultValue>
            <Values>
            <Value>=Format(Today(), "MMddyy")</Value>
            </Values>
            </DefaultValue>
            <Prompt>Start Date "MMDDYY"</Prompt>
        </ReportParameter>
            <ReportParameter Name="paramEndDate">
            <DataType>String</DataType>
            <DefaultValue>
            <Values>
            <Value>=Format(Today(), "MMddyy")</Value>
            </Values>
            </DefaultValue>
            <Prompt>End Date "MMDDYY"</Prompt>
        </ReportParameter>
    </ReportParameters>
    <ReportParametersLayout>
        <GridLayoutDefinition>
            <NumberOfColumns>2</NumberOfColumns>
            <NumberOfRows>3</NumberOfRows>
            <CellDefinitions>
                <CellDefinition>
                <ColumnIndex>0</ColumnIndex>
                <RowIndex>0</RowIndex>
                <ParameterName>paramLocCode</ParameterName>
                </CellDefinition>
                <CellDefinition>
                <ColumnIndex>0</ColumnIndex>
                <RowIndex>1</RowIndex>
                <ParameterName>paramStartDate</ParameterName>
                </CellDefinition>
                <CellDefinition>
                <ColumnIndex>1</ColumnIndex>
                <RowIndex>1</RowIndex>
                <ParameterName>paramEndDate</ParameterName>
                </CellDefinition>
            </CellDefinitions>
        </GridLayoutDefinition>
    </ReportParametersLayout>
    

    根据注释中的附加信息,这似乎是参数依赖性的问题。开始日期和结束日期用于生成位置代码,然后在下拉列表中填充并用于后续数据集。如果我理解正确的话,解决方案是重新排列参数

  • 在“报告数据”部分的“参数”文件夹下,单击
    paramlocode
    将其选中
  • 使用“报告数据”部分顶部的蓝色向下箭头将其移动到两个日期参数的下方

  • 现在,参数将按照它们相互依赖的顺序被引用。数据集的顺序无关紧要。

    您的where语句不应该在@paramStartDate和@paramEndDate之间>>吗?它是Oracle数据源。如果我使用
    @
    而不是
    则会收到一条错误消息,
    ORA-00936:缺少表达式
    如果删除参数名称前面的:,会发生什么?我没有使用Oracle的经验,但逻辑表明:,只是将其标识为参数,而不是参数名称的一部分。我删除了参数名称中的:。我得到了原始错误消息,
    表达式引用了参数“paramStartDate”,该参数在参数集合中不存在。
    。您的paramLocCode是否有多个值?您完全正确。真不敢相信我没看到。这是一个巨大的帮助,因为我在从Crystal reports转换项目中处理十几个其他报表时遇到了同样的问题。谢谢
    --listLocationData
    -- DEFINE ip_start_date =  '070120';
    -- DEFINE ip_end_date = '070120';
    
    SELECT DISTINCT 
        t1.LOC_CODE
        , t2.LOC_DESCR
        , t2.COMPANY
        , t2.STATE_CODE
        , t2.TYPE
    FROM 
        VEHICLE_COST t1
        JOIN VEHICLE_LOC t2
        ON t1.LOC_CODE = t2.LOC_CODE
    WHERE     TO_CHAR(INVOICE_DATE,'MMDDYY') BETWEEN :IP_START_DATE AND :IP_END_DATE