【问题标题】:Report Builder 3.0 - Hide or filter out the last/max valueReport Builder 3.0 - 隐藏或过滤掉最后一个/最大值
【发布时间】:2017-02-28 21:44:29
【问题描述】:

理想的最终结果是有一个图表,无论何时生成,都会显示除最新值之外的所有值。因此,如果此时在我的数据集中,我今年的最后一个时期是 12,我希望所有去年和今年的时期都出现,除了最后一个时期是 12。

事实上,我有 3 个字段:Year、Period 和 Delay。

年份简单显示为:2017。共有 13 个期间,它们显示为:01、02、03、[...]、13。为了方便起见,我创建了一个字段

 Fields!YearPeriod.Value =Fields!Year.Value+Fields!Period.Value

所以现在,我可以单独使用 2 个字段,并且 YearPeriod 显示如下(示例):201701。所以这允许我使用 Max() 函数来隔离我试图排除的最后一个时期。

 Max(Fields!YearPeriod.Value)

这就是我卡住的地方!我尝试在我的图表上使用过滤器,但我收到一条错误消息,指出过滤器不能具有 First、Last、Max、Min 等功能。所以我尝试在我的图表值中使用 IIF, (见下文)但一旦我生成,它就会向我显示一个完全空的图表。:

=IIF(Fields!YearPeriod.Value=Max(Fields!YearPeriod.Value), Nothing, Fields!Delay.Value)

所以,我尝试使用图形属性/可见性部分并应用了类似的功能,但更糟糕的是:它使整个图形一起消失...

这似乎是一件非常简单的事情,但最后,我肯定被卡住了。谢谢大家!

【问题讨论】:

  • 如果您知道当前的第 13 年期间是您要始终过滤掉的那个,您可以在过滤器中使用如下内容:=IIF(Fields!YearPeriod.Value = CINT(Cstr(Today.Year) & "13"),Nothing,Fields!Delay.Value)
  • @Alejandro 感谢 Alejandro,但是,当前周期会随着时间的推移而变化,并且他的报告所针对的用户必须具有最少的输入才能生成它。不幸的是,Period 字段本身也没有与固定日期相关联(每年更改)...我只是尝试了另一种方法,我尝试使用 N 次/高级,但结果如下:使用 N 高级 = 1 它保持(而不是排除)最后一个时期。而 N 较差,我需要指出要保留的 N 的数量,所以我做了 Count()-1 但我收到一个错误消息,说聚合不能在过滤器中使用.. (X_X")
  • 您是否在图表的类别组中使用 YearPeriod 字段?
  • @Alejandro 是的,为简单起见,我唯一的类别组是 Fields!YearPeriod.Value,我的值是 Fields!Delay.Value。顺便说一句,我尝试在我的过滤器中使用 RowNumber()-1 而不是 Count()-1 并且我得到相同的“不允许聚合”错误。基本上,我需要我的过滤器排除 N Superior=1 值并且不包括,因为过滤器是默认设置的......我找到了这样的解决方案 NOT LIKE [=IIf(Not(Fields!XXXX.Value Like "TEST" ), 0, 1)],我试图模仿这个无济于事。关于这个你有什么建议吗?类似 [IIF(Not(Fields!YearPeriod.Value N SUPERIOR 1), 0,1)]?

标签: reporting-services filter reportbuilder


【解决方案1】:

在类别组属性而不是图表过滤器属性中设置过滤器。

Category Groups 窗格中,右键单击YearPeriod,然后选择Category Group Properties...

在“过滤器”选项卡中添加具有以下设置的过滤器:

Value 中使用这个表达式:

=MAX(Fields!YearPeriod.Value,"DataSetName")

DataSetName 替换为您的真实姓名。

聚合函数在图表过滤器中不起作用,因为没有范围(与整个数据集不同),这就是使用 MAX 过滤图表不起作用的原因。

更新:在图表中添加年份作为系列。

Year 字段添加到Chart Data 设置中的Series 窗格。

它会为每个 Year 值提供一行。

更新 2: 使用 YearPeriod 为 Category Group,但将标签设置为 Period,同时在系列组中使用 Year

您可以设置要在图表中显示的标签,它不依赖于您使用的组字段或表达式:

Filter 中使用与我之前使用的完全相同的表达式。这是我隐藏去年 (201713) 的最后一个值的示例

【讨论】:

  • 谢谢亚历杭德罗!极好的!这是目前最好的解决方案!!如果我的 GroupCategory 只是 Period 而不是 YearPeriod 怎么办? (目的是每年有 1 个系列,所以 1 行 2016 和另一个 2017,否则通过将 YearPeriod 作为 GroupCategory 我将所有选定的年份混合在一起)我尝试将相同的 YearPeriod 过滤器应用于 Period (作为一个组类别)但它删除了两个系列(2016 年和 2017 年)的特定时期。你还有其他像这样的好主意吗?抱歉推了我的运气,但非常感谢!
  • @MaxS.,尝试将年份字段添加到图表中的“系列”窗格中,如上一版中对我的回答所述。
  • 我正是这样做的:即我将 Year 保留在 Series Group 中。在您的演示中应用该方法时,当 YearPeriod 为 X 轴(类别 Gp)时,它的效果非常好。但是,如果我需要查看 2 年的数据价值,我会在该轴 (13x2) 上弹出 26 个周期。但是,假设我想要图表上的 2 年数据和 X 轴上的 13 个周期,我别无选择,只能有 Period (Category Gp) & Year (Series Gp);但是,通过将相同的 YearPeriod 过滤器应用于 Period,目标期间不仅会在最后一年(根据需要)消失,而且会在所有选定的年份消失。
  • 谢谢亚历杭德罗!
  • @MaxS,不客气。如果我的回答解决了您的问题,您可以mark it as the correct answer 积极关闭问题。
【解决方案2】:

只要您不介意让您的系列彼此跟随而不是叠加,Alejandro 的回答就非常有效。 我找到了以下答案,可以让它与正在叠加的系列一起工作,效果很好。

这就是我所说的叠加系列的意思,我圈出了我不想显示的数据(即当年的最后一个时期):

这是我的结果:

解决方案: 众所周知,过滤器通常不允许聚合,这是我一开始就遇到这个问题的第一个原因。它不允许我。

所以我发现这个链接详细说明了如何“硬编码”执行聚合 sum、count、min、max 和 avg 的能力。 长话短说,我不得不使用 max,我就是这样做的:

  1. 将位于Click here and, once on the page, click on "AggLookup.vb" 的代码复制/粘贴到报告属性中的代码部分

  2. 与在任何 LookUp 函数中一样,找到一个维度,您可以使用该维度将 2 个数据集锚定在一起,并允许您将目标度量重新组合在一起。就我而言,我选择了我工作的医院的名称,并将该字段插入到我的 Dataset1 和 Dataset2 中。这让我可以确保当我执行“最大”功能时,它会将 2015XX 和 2016XX 视为一组的一部分。最初,我没有这样做,我使用 Year 作为我的 Anchor,结果过滤掉了每年的最大值:即 201513 和 201613。

  3. 转到过滤器并使用此 tweeked LookUpSet 公式创建一个:

=code.AggLookup("聚合", LookupSet([localValue], [matchValue], [returnValue], [dataset]))

确保您的聚合使用小写字母(无大写字母)并用引号括起来,即“

我知道我可能花了很长时间才得到我的结果,但说我对 SQL 编码知之甚少将是夸大其词。所以我采用了这个选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 2022-09-27
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多