为什么突然认为未更改的现有字段的数据类型无效?

时间:2017-03-29 18:29:24

标签: reporting-services types sqldatatypes rdl

我正在修改旧版SSRS报告(rdl文件);我已经添加了四列,并通过新的数据源(存储过程)提供这些值。

但是,现在当我尝试通过"预览"标签,我得到:

在本地报告处理期间发生错误。 用于分组' table1_Group1'返回了无效的数据类型。 " [第二个与上面的错误相同的错误信息]"

确实有一个名为" table1_Group1"的行组,其属性如下所示:

enter image description here

我不知道为什么NewBiz突然出现问题;关于它没有任何改变,之前没有任何关于它的投诉。

" NewBiz" (仍然)出现在"数据集属性"中的字段列表中窗格(字段名称和字段源都是" NewBiz");数据源(存储过程)确实返回它。所以......?!?

注意:" table1_Details_Group"在" table1_Group1"没有群体表达,因此似乎没有存在的理由;除非我误解了它的角色/目的。

更新

Alan Schofield提出了数据集字段"是否符合预期顺序的问题。"

所以我在细齿显微镜下检查了一下。这是数据源/存储过程的最后一部分,它返回值:

select CY.CSDirector, CY.Category, CY.Segment, CY._Unit, 
       CU.New, CU.Assumed, CU.Existing, CU.Organic, 
       CY.NumUnits, CY.NumUnitsLast, CY.MonthSales, CY.MonthSalesLast, 
       CY.MonthPerc, CY.YTDSales, CY.YTDSalesLast, CY.YTDPerc,
       CY.ProjSales, CY.YTDProjSales, CY.YTDBudgetPerc, CY.NewBiz 
from #CombinedYears CY
left join #CategorizedUnits CU on CU.Unit = CY._Unit

这就是我在报告数据窗格中看到的数据:

enter image description here

所以第一个可能的差异在于" _Unit"被视为" ID_Unit"出于某种原因在数据集中。那为什么会这样? SSRS会自动转换" "到" ID "?如果这是一个已知的问题,那对我来说还是未知的。

之后,所有达拉斯都破裂了,因为田野的顺序发生了根本性的分歧。为什么?不应该刷新它们的命令吗?我怎样才能使它们伸直并向右飞行,或手动更改顺序以使它们匹配?

注意:我不确定这是否应该重要 - 是吗?是否根据位置而不是字段名称填充字段值?我们,他们必须匹配,位置?

更新2

This让我意识到有上/下箭头的事实;我会尝试......

更新3

我更改了列表中字段的顺序以匹配从存储过程返回的字段,但它没有区别 - 当我尝试生成报告时,我仍然得到相同的错误消息。

更新4

在rdl文件中,可能存在问题的组表达式为:

  <TablixRowHierarchy>
      <TablixMembers>
        <TablixMember>
          <KeepWithGroup>After</KeepWithGroup>
          <RepeatOnNewPage>true</RepeatOnNewPage>
          <KeepTogether>true</KeepTogether>
        </TablixMember>
        <TablixMember>
          <Group Name="table1_Group1">
            <GroupExpressions>
              <GroupExpression>=Fields!NewBiz.Value</GroupExpression>
            </GroupExpressions>
          </Group>
          <TablixMembers>
            <TablixMember>
              <KeepWithGroup>After</KeepWithGroup>
              <KeepTogether>true</KeepTogether>
            </TablixMember>
            <TablixMember>
              <Group Name="table1_Details_Group">
                <DataElementName>Detail</DataElementName>
              </Group>
              <TablixMembers>
                <TablixMember />
              </TablixMembers>
              <DataElementName>Detail_Collection</DataElementName>
              <DataElementOutput>Output</DataElementOutput>
              <KeepTogether>true</KeepTogether>
            </TablixMember>
            <TablixMember>
              <KeepWithGroup>Before</KeepWithGroup>
              <KeepTogether>true</KeepTogether>
            </TablixMember>
          </TablixMembers>
        </TablixMember>
        <TablixMember>
          <KeepWithGroup>Before</KeepWithGroup>
          <KeepTogether>true</KeepTogether>
        </TablixMember>
      </TablixMembers>
    </TablixRowHierarchy>

...更具体地说,这个:

  <Group Name="table1_Group1">
    <GroupExpressions>
      <GroupExpression>=Fields!NewBiz.Value</GroupExpression>
    </GroupExpressions>
  </Group>

为什么会出现问题? NewBiz是结果集中包含的值,它有两个值可用于分组(-1,表示&#34;新&#34;和0,表示&#34;现有&#34;)。 / p>

为什么错误的消息?

该字段本身在rdl文件中表示如下:

<Field Name="NewBiz">
  <DataField>NewBiz</DataField>
  <rd:TypeName>System.Int32</rd:TypeName>
</Field>

更新5

现在它正在工作,现在改变了代码......这种情况经常发生在旧技术上,而且我不知道在没有&#的情况下是否会更加放心或烦躁39; t work突然开始工作,没有代码更改。为什么!?? Arghhhh! Gleeeep! (最后一个是快乐的声音,或多或少等同于argh的极性)。

1 个答案:

答案 0 :(得分:1)

我有类似的问题。我有一个图表由3列查询提供,其中一个是聚合(ID代码,Sum(Count)和Day - 按此顺序)。我所做的就是把我在早前分组的字段放在我的查询中(即Day,ID Code和Sum(Count)),这似乎可以解决问题。这看起来有点愚蠢......但确实如此。