【问题标题】:SSRS - match dataset values with hard-coded valuesSSRS - 将数据集值与硬编码值匹配
【发布时间】:2018-11-07 02:10:42
【问题描述】:

我正在尝试创建一个 RDL 文件,我需要 tablix 以以下格式显示。

这就是我希望结果的样子

粗体的值是硬编码值。这就是数据集中SELECT 语句的输出的样子

SQL 输出

我不知道如何使从数据库输出的值与 RDL 文件中的硬编码值相匹配。 “Day”字段表示一个月中的某一天,“Num”字段表示当天的销售数量。上面的示例显示,在该月的第一天,进行了 100 笔销售。我需要tablix 以该特定格式输出。

如果当天不在 SQL 输出中(当天没有销售),我希望它输出空白和/或 0。

知道如何实现吗?

【问题讨论】:

  • RDL 中的硬编码值是什么意思?你有返回这些值的数据集吗?如果您要做的只是将报告返回为 3 列而不是一个长列表.. 转到报告属性 - 列 - 从 1 更改为 3.. (右侧有属性窗格)
  • 似乎已经创建了一个“日历”,并且返回的值应该位于与日期对应的相应数字列中。
  • 你有没有权限访问SQL,数据库中的“天”是如何存储的
  • 就像@JonTout 建议顶部;使用 sql server 中的日期字段,因为您清楚地汇总了基于 [Num] 列的日期。从 datepart 函数和您的 ace 中获取仅当日部分。您不必担心基于 30 和 31 的月份。

标签: reporting-services ssrs-tablix rdl


【解决方案1】:

使用 CTE 为您需要的每一天创建行,然后加入您的结果。您的 CTE 起点可能是:

;WITH nums AS
   (SELECT 1 AS value
    UNION ALL
    SELECT value + 1 AS value
    FROM nums
    WHERE nums.value <= 30)
SELECT *
FROM nums

然后您可能想要根据您正在查看的月份修改总天数。

【讨论】:

    【解决方案2】:

    您可以使用查找来执行此操作,但您需要在每个单元格中硬编码查找。例如第 1 天

    =lookup(cint(1),Fields!Day.Value,Fields!Num.Value,"Dataset1")
    

    一种更快的方法是在前十天过滤的数据集上创建一个 tablix:

    =Switch(
    Fields!DAY.Value <= 10 and Fields!DAY.Value >=1,"Include",
    True,"Exclude"
    )
    

    按天创建一个行组,然后使用以下查找创建一个包含 day 和 num 的列,以及包含 Fields!DAY.Value+10 和 Fields!DAY.Value+20 的列:

    =lookup(Fields!DAY.Value+10,Fields!DAY.Value,Fields!NUM.Value,"DataSet1")
    =lookup(Fields!DAY.Value+20,Fields!DAY.Value,Fields!NUM.Value,"DataSet1")
    

    【讨论】:

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