【问题标题】:SSRS The textrun uses a First aggregate in an outer aggregate (Different datasets)SSRS textrun 在外部聚合中使用第一个聚合(不同的数据集)
【发布时间】:2019-11-06 14:59:11
【问题描述】:

好的,我正在处理一个多数据报告,该报告会合并来自多个服务器的数据。
dataset1 = 包含我需要的数据的六个数据集之一。

ds_BusinessDays = 一个日历表数据集,其中包含每天/每周/每月更改的特定日期和数字。

我正在尝试使用 SWITCH,其中来自 dataset1 的 MonthName(Date) = 来自 ds_BusinessDays 的 MonthName(Date2)。然后对总数求和。

我已经成功使用了类似的跨数据集计算,例如 SUM(SWITCH 当 Data = "Product" then 1) / SUM(businessdaysinmonth, "ds_BusinessDays") 这是为了得到平均值。奇迹般有效。

=SUM(
    SWITCH(Fields!Requested_Month.Value = MonthName(Month(First(Fields!PreviousBusinessDate.Value, "ds_BusinessDays")))
    ,1)
)

ds_BusinessDays 数据集中的所有字段均为 1 个条目结果。例如,“上一个工作日”=“2019 年 6 月 21 日”。所以我希望我的代码做这样的事情。 当 MonthName(Date) form dataset1 = MonthName(PreviousBusinessDate) from ds_BusinessDays 然后 1. 将所有这些相加得到我该月的总数。 问题是当使用来自另一个数据集的字段时,FIRST 和 SUM 是我唯一可用的字段。它们不能在聚合内的聚合中使用。

我可以使用 First in First(Fields!PreviousBusinessDate.Value, "ds_BusinessDays") 的替代品吗?

【问题讨论】:

    标签: dataset ssrs-2008


    【解决方案1】:

    当您只有一个条件时,为什么要使用 SWITCH?我认为IIF 会更容易阅读。另外,如果ds_BusinessDays.PreviousBusinessDate 是单个条目,为什么还需要FIRST?应该只有一个结果。如果您正在尝试做我认为您正在尝试做的事情,那么这个表达式应该可以做到。

    = SUM(IIF(Fields!Requested_Month.Value = MonthName(Month(Fields!PreviousBusinessDate.Value, "ds_BusinessDays")), 1, 0))
    

    要添加更多细节,SWITCH 最好用于 2 个以上的条件语句。如果您只是想比较两个字段,您可以使用简单的IIF。何时需要SWITCH 的示例:

     =SUM(SWITCH(Fields!Date.Value = Fields!Today.Value, 1,
                 Fields!Date.Value = Fields!Yesterday.Value, 2,
                 Fields!Date.Value = Fields!Tomorrow.Value, 3,
                 true, 0))
    

    此表达式将针对三个不同的字段检查Date,并为每个字段返回不同的计数,以捕获其他所有内容的始终为真的条件结束。您的表达式不需要SWITCH

    【讨论】:

    • 对不起,简化的解释。 SWITCH 是一个较长系列的一部分,只是这部分是我遇到问题的部分。另外,我不知道不需要 SUM/FIRST。我之前尝试过删除它们,但没有成功。我会再试一次。使用它的计算很多,所以需要一段时间。
    • 好吧,如果我没看错的话,PreviousBusinessDate 应该只有一个值。除非该字段返回多个值,否则您不需要FIRST
    • 我尝试使用 '=SUM(SWITCH(Fields!Requested_Month.Value = MonthName(Month(Fields!PreviousBusinessDate.Value, "ds_BusinessDays")) ,1) )' 这是我得到的错误。文本框 'Textbox 1032' 的值表达式引用字段 'Previous Business Date'。报表项表达式只能引用当前数据集范围内的字段,如果在聚合内,则只能引用指定的数据集范围。字段名称中的字母必须大小写正确。仅供参考,拼写和大小写都是正确的。
    • 看起来你可能需要一个Lookup 函数。两个数据集之间是否有任何共同领域?如果是这样,LOOKUP(Fields!Dataset1Common.Value, Fields!Dataset2Common.Value, Fields!FieldToLookup.Value, "DatasetToLookup")
    • 不,我们从客户那里获得的数据表和工作日表中的日历没有任何共同之处。日期以月份名称的形式出现,日历表是正在使用的实际日期,然后进行转换。这个日历表每天晚上都会通过工作进行更新,这不在我的控制范围内。与客户端表相同。我想我会用从 DateName 转换的假“日期”创建一个虚拟字段。试图避免这种情况,但我想我也会有。
    猜你喜欢
    • 1970-01-01
    • 2015-10-21
    • 2023-03-23
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多