我想建立一个SSRS报告,有列作为周数-8周8列从当前开始。此报告每周运行一次,然后设置当前周数字。所以列名和它们的值都应该改变,在.Is中构建类似这样的东西是可能的吗?
我尝试在dataset中使用基于动态SQL的存储过程来做到这一点。但是,对于每次运行,我甚至看不到列值动态更新
下面是一个例子:

此外,我还试图避免将这些周数字作为行值,然后使用矩阵
我存储的proc如下所示
声明@n tinyint = datepart(wk,getdate())
声明@n1tinyint= (@n+1),@n2tinyint =(@n+2),@n3tinyint =(@n+3),@n4tinyint =(@n+4),@n5tinyint =(@n+5),@n6tinyint =(@n+6)
exec (‘选择b.sku,b.'+@n+',b.'+@n1+',b.'+@n2+',b.'+@n3+',b.'+@n4+',b.'+@n5+'...
将非常感谢在这个方向上的任何帮助..非常感谢!
发布于 2016-11-22 04:07:08
在使用SSRS时,通常最好避免使用动态SQL和在SQL中旋转数据。使用SQL获取所需的原始数据,然后让SSRS执行旋转和聚合。这样你就可以利用他们各自最擅长的东西了。我知道您说过要避免矩阵,但这是使报告动态化的最好方法。
因此,您应该返回一个数据集中的所有数据并对矩阵使用筛选器,或者编写两个查询并让每个查询填充一个矩阵。顺便说一句,矩阵只是一个添加了列组的表,所以不要被它们吓倒。
发布于 2016-11-22 04:30:22
对于标准的tablix,有两种方法可以做到这一点。
=First(Fields!ColHeader0.Value)的表达式。这是一种更灵活的方法,因为它允许您选择8个历史周,而不是如果添加参数,则仅选择最近8周。编辑-澄清
您得到空白列Wk48的原因大致是因为您创建的报告查找的是下一次不会出现的列。SSRS查找精确的列。您应该对我指定的任一选项使用相对列名:
exec ('Select b.sku, b.['+@n+'] as Wk0, b.['+@n1+'] as Wk1, b.['+@n2+'] as Wk2, b.['+@n3+'] as Wk3, b.['+@n4+'] as Wk4, b.['+@n5+'] as Wk5...这将允许您使用适当的当前周数据填充带别名的Wk0列,同时仍然确保它可以被SSRS一致地引用为基准周。
要更改列标题,您可以执行以下操作:
="Wk" + CStr(<correct week calculation>).exec ('Select b.sku, b.['+@n+'] as Wk0, b.['+@n1+'] as Wk1, b.['+@n2+'] as Wk2, b.['+@n3+'] as Wk3, b.['+@n4+'] as Wk4, b.['+@n5+'] as Wk5..., ''Wk'''+@n+' as ColHeader0, ''Wk'''+@n1+' as ColHeader1...
并将从SSRS列标题表达式返回的列标题引用为=First(Fields!ColHeader0.Value)。
发布于 2016-11-28 11:49:54
这是一个对我有效的解决方案:
您可以通过至少具有静态字段来避免部分问题,例如,通过首先运行带有静态字段的sql查询(从Sales_Table中选择SKU ),将SKU列在' fields‘列表中。然后,您可以返回更新dataset-将查询更改为表达式并嵌入参数化的字段名称。
点击底部的“刷新字段”。现在,您有了一个包含完整字段列表的数据集。在图表和表格中使用它们。每周运行一次,并注意数字的变化。
如果您在表中使用此数据集,请确保使用参数标签设置标题(例如,此处I did = Parameters !CurrWk.Label表示具有当前周数据的col )
就这样!
https://stackoverflow.com/questions/40727732
复制相似问题