代码之家  ›  专栏  ›  技术社区  ›  WillyC

SSRS中滤波器表达式的类型问题

  •  2
  • WillyC  · 技术社区  · 12 年前

    SQL Server 2008 R2,使用BIDS来设计报告。

    我有一张桌子,我试图只显示某一排。也许有更好的方法可以做到这一点,但我在筛选表达式中遇到了一个错误,无论我如何完成最初的任务,我都想了解筛选。

    我从过滤器表达式开始(设置为“Integer”类型):

    RowNumber(Nothing) = 1
    

    这导致了错误:

    Cannot compare data of types System.String and System.Int32.
    

    我发现解决方案是将1更改为“=1”,因为1被计算为字符串。

    于是我有了:

    RowNumber(Nothing) = =1
    

    这并没有改变什么,我也犯了同样的错误。

    然后我试着对表达式的第一部分做这样的处理:

    =RowNumber(Nothing) = =1
    

    这将错误更改为部署问题(仍在构建,这令人沮丧):

    Error pvInvalidDefinition : The definition of the report '/ReportName' is invalid.
    

    然后我尝试在RowNumber上使用CInt: CInt(行号(无)==1

    然后我可以部署它,但错误只会变回第一个:

    无法比较System.StringSystem.Int32类型的数据。
    

    似乎无论我在这里尝试什么,我要么无法部署报告,要么我在将字符串与int进行比较时出错。

    RowNumber返回一个整数,所以这似乎应该有效。我试着用数据集的名称来代替“Nothing”,但这并不能改变我所看到的。

    我意识到有很多方法可以解决我最初的问题,但我很好奇为什么过滤器表达式无效。

    2 回复  |  直到 12 年前
        1
  •  1
  •   Akarsh Kolanu    12 年前

    最好隐藏具有可视属性的行。只需点击任何文本框,然后转到“可见”选项卡。现在,您可以单击show或hode并转到表达式。

    默认为“隐藏”。所以在那里写一个表达式来隐藏行。 =IIf(NOT(行号=1),TRUE,FALSE)

    如果你有任何错误,请告诉我

        2
  •  1
  •   WillyC    12 年前

    RowNumber不可用于Tablix筛选器。

    使用 RowNumber(Nothing) <> 1 因为Row可见性属性解决了这个问题。

    使用BIDS,您不会得到任何指示问题所在的错误,但将报告导入到report Builder并从那里进行部署会得到一个更具描述性的错误,最终帮助我解决了问题。