【问题标题】:SSRS - Report Builder: Show Items from groups in a column chart using tooltipSSRS - 报表生成器:使用工具提示在柱形图中显示组中的项目
【发布时间】:2021-03-23 11:02:39
【问题描述】:

我认为这可能很容易,但我不知道如何让它发挥作用。

我有一张按时间分组的门票柱形图(四舍五入为 15 分钟)

  • X 轴 - 时间组(四舍五入到 15 分钟)
  • Y 轴 - 计数(票)

我想在一列中显示所有分组票的“票号”和“标题”作为工具提示

我已经尝试过lookup / lookupset / miltiplelookup - 它没有用。我也尝试加入归档 -> =Join(Fields!IB.Value, ", ")。那也没有用。我只是通过将鼠标悬停在我的专栏上来获得#error。如果我只是显示该字段,我只会得到一个值=Fields!IB.Value。

有什么想法吗?

附言我正在使用 Report-Builder 和 Ssrs2016

它可能看起来像这样:

正如我之前提到的,我使用了一些舍入函数来按 time 列对门票进行分组。这是代码:

=Mid(Fields!time.Value,1,3) & Replace( Mid(Fields!time.Value,4,5),

Mid(Fields!time.Value,4,5),
    Switch(

Cint(Mid(Fields!time.Value,4,5)) >= 00 And Cint(Mid(Fields!time.Value,4,5)) <= 14, "00" ,

Cint(Mid(Fields!time.Value,4,5)) >= 15 And Cint(Mid(Fields!time.Value,4,5)) <= 29, "15" , 
   
Cint(Mid(Fields!time.Value,4,5)) >= 30 And Cint(Mid(Fields!time.Value,4,5)) <= 44, "30" ,
    
Cint(Mid(Fields!time.Value,4,5)) >= 45 And Cint(Mid(Fields!time.Value,4,5)) <= 59, "45" ))

【问题讨论】:

  • 我相信解决方案涉及包裹在 Join 中的 LookupSet ...。我记得过去做过类似的事情,但已经有一段时间了。 LookupSet 应该返回可以“加入”的对象类型。显然,对分组/聚合字段的引用不能作为 Join() 的直接参数,因为它不是正确的对象类型。
  • @Craig 我不太明白,如何引用分组数据?例如:我正在使用=lookupset(1, 1, Fields!Title.Value, "DataSet1") -> 它可以获取图表中的所有数据(但我只需要用于生成此特定列的数据)

标签: reporting-services ssrs-2012 reportbuilder ssrs-2016


【解决方案1】:

您可能已经猜到了,您的 lookupset() 将不起作用,因为它会将 1 与 1 进行比较,因此会返回所有值。

假设您的时间组列称为TimeGroup,而您的票号和标题列称为“TicketID”和“TicketTitle”,那么......

您需要将查找集更改为类似

=JOIN(
    LOOKUPSET(
        Fields!TimeGroup.Value,
        Fields!TimeGroup.Value,
        CSTR(Fields!TicketID.Value) & ": " & Fields!TicketTitle.Value,
        "DataSet1"),
        "," + vbcrlf
    )

时间组将始终在工具提示的上下文中进行评估,因此如果您将鼠标悬停在时间组A 上,时间组将被评估为A,因此查找集将仅返回与A 匹配的值。

表达式的返回部分将票号转换为字符串,添加一个冒号,然后附加标题。

我们将整个内容包装在一个 JOIN() 中,以在每个实例之间使用 , 和 carriage return /line feed 将 LOOKUPSET 数组的结果组合成一个字符串,这样结果每行显示 1 个。

【讨论】:

  • 这就是我的问题。我真的不明白我应该在前 2 个参数中使用什么值。据我了解; lookupset 循环遍历所有值并尝试在其中找到匹配项(第一个参数是我的数组,第二个是数据集中的数组,如果有匹配项,将显示第三个)。在我的图表中,我选择了count(TicketID) 作为 Y 轴值,因此要匹配票证 ID,对吗?在您的回答中,您使用了 TimeGroup,但没有这样的列,我刚刚将 TimeCreated 列四舍五入到 15 分钟并按它分组 ID
  • 刚刚编辑了我的问题以显示我的分组算法
【解决方案2】:

我已经通过 @Alan Schofield 使用 TimeGroup 的函数解决了这个问题,但为此我不得不重新定义我的组设置:

  1. 使用我在问题中提到的组函数将自定义字段添加到我的数据集
  2. 按此字段对我的 ColumnChart 进行分组
  3. 使用 count(Fields!TimeGroup.Value) 作为 Y 轴(而不是 count(Fields!TicketID.Value))
  4. 将图表中的组与数据集中的组连接起来,并在工具提示中列出所有结果

附注我讨厌这个解决方案,但效果很好

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多