首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在每周运行时动态更改列名为week number

在每周运行时动态更改列名为week number
EN

Stack Overflow用户
提问于 2016-11-22 03:18:24
回答 3查看 2.6K关注 0票数 2

我想建立一个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+'...

将非常感谢在这个方向上的任何帮助..非常感谢!

EN

回答 3

Stack Overflow用户

发布于 2016-11-22 04:07:08

在使用SSRS时,通常最好避免使用动态SQL和在SQL中旋转数据。使用SQL获取所需的原始数据,然后让SSRS执行旋转和聚合。这样你就可以利用他们各自最擅长的东西了。我知道您说过要避免矩阵,但这是使报告动态化的最好方法。

因此,您应该返回一个数据集中的所有数据并对矩阵使用筛选器,或者编写两个查询并让每个查询填充一个矩阵。顺便说一句,矩阵只是一个添加了列组的表,所以不要被它们吓倒。

票数 0
EN

Stack Overflow用户

发布于 2016-11-22 04:30:22

对于标准的tablix,有两种方法可以做到这一点。

  1. 计算列标题作为表达式使用Wk和一些日期数学来找到正确的星期数并从您的查询中返回相同的东西(例如,columns是current_week,week_minus_1,
  2. 列标题作为查询中的附加列,对于每一行都是相同的值(例如,ColHeader0,ColHeader1...)。您的数据列仍然是相对周(例如ValueWeek0、ValueWeek1...)。在您的报表中,列标题应该有一个类似=First(Fields!ColHeader0.Value)的表达式。这是一种更灵活的方法,因为它允许您选择8个历史周,而不是如果添加参数,则仅选择最近8周。

编辑-澄清

您得到空白列Wk48的原因大致是因为您创建的报告查找的是下一次不会出现的列。SSRS查找精确的列。您应该对我指定的任一选项使用相对列名:

代码语言:javascript
复制
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一致地引用为基准周。

要更改列标题,您可以执行以下操作:

  1. Independently在列表头表达式中计算SSRS中的周数:="Wk" + CStr(<correct week calculation>).
  2. Return结果集中的列表头,并在列表头表达式中访问它们:

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)

票数 0
EN

Stack Overflow用户

发布于 2016-11-28 11:49:54

这是一个对我有效的解决方案:

  • 编写了一个查询表达式。单击dataset查询空间旁边的fx,并为您的程序编写select查询,在表达式窗口中嵌入参数值。现在在左侧找到' fields‘选项卡,panel.You需要在这里手动映射查询中的字段。如果不这样做,您很有可能看到一个空的字段列表,并且根本无法访问它们。这可能是因为ssrs不直接存储来自表达式的查询元数据。

您可以通过至少具有静态字段来避免部分问题,例如,通过首先运行带有静态字段的sql查询(从Sales_Table中选择SKU ),将SKU列在' fields‘列表中。然后,您可以返回更新dataset-将查询更改为表达式并嵌入参数化的字段名称。

  1. 映射字段名称。在这个例子中,我选择了'Query Type‘字段,并将字段名设置为SKU,CurrentWeek,NextWeek,并映射到源SKU,Wk和Wk1 respectively.

点击底部的“刷新字段”。现在,您有了一个包含完整字段列表的数据集。在图表和表格中使用它们。每周运行一次,并注意数字的变化。

如果您在表中使用此数据集,请确保使用参数标签设置标题(例如,此处I did = Parameters !CurrWk.Label表示具有当前周数据的col )

就这样!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40727732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档