问题
我正在构建一份SSRS报告,该报告需要在某些行上定期进行组标题。从数据库查询返回的数据包括一个带有位标志的列,指示哪些行需要作为组子标题处理。
以下是源数据片段:
请注意 IsGroupHeading 列,其中第一行(“0401”)上的标志设置为1.
我想生成看起来像这个Excel样机的输出:
因此,每当报告遇到 IsGroupHeading 等于1的行时,它会生成一个粗体组标题行,后跟一行带有列标题的行。
发生了什么
我尝试在SSRS中使用表达式=Fields!IsGroupHeading.Value = 1
创建一个行组但是我得到了意想不到的结果:(1)只有第一个组标题被特别处理,(2)组标题行在下面重复标题。结果如下:
请注意,“0401”行在组标题下重复。此外,只有第一组标题才能获得这种特殊待遇。该报告只是忽略后续的组标题,并将它们呈现为正常的数据行。
问题
我已经花了好几个小时试图做到这一点,这是我能够得到它的最接近的,我在谷歌搜索的行显示页面主要是关于创建小计,所以我把这个扔到了社区希望一些SSRS专家可以帮助我。
答案 0 :(得分:1)
我将假设您在SQL中执行此操作并且所有关税编号都以组头关税编号(在本例中为0401
)开头。
让我们说你的SQL目前看起来像这样:
SELECT TariffNumber, RowDescription, TariffRate, IsGroupHeading
FROM Tariffs
我们要做的是将此表连接到自身,以便在每行上提供组TariffNumber和RowDescription列,以便我们对其进行分组。我们还想从Details行中排除GroupHeader Tariff。所以我们得到这样的东西:
SELECT TariffGroup.TariffNumber AS GroupNumber, TariffGroup.RowDescription AS GroupDescription,
TariffDetail.TariffNumber, TariffDetail.RowDescription, TariffDetail.TariffRate
FROM Tariffs AS TariffDetail
INNER JOIN Tariffs AS TariffGroup ON TariffGroup.TariffNumber = Left(TariffDetail.TariffNumber, CharIndex(TariffDetail.TariffNumber, '.')-1) AND TariffDetail.IsGroupHeader = 0
现在您只需要对GroupNumber
进行分组即可完成。