Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sharepoint SSRS-动态数据条_Sharepoint_Reporting Services - Fatal编程技术网

Sharepoint SSRS-动态数据条

Sharepoint SSRS-动态数据条,sharepoint,reporting-services,Sharepoint,Reporting Services,我需要达到以下报告要求- 我需要根据开始和结束日期动态增加数据栏的宽度。 我知道数据栏需要在图表上绘制一个度量值。因此,我不确定这是否可以使用数据栏来完成 我还尝试使用表达式为文本框(时间轴列)的背景色着色。这样对吗 谢谢, Amrita在文本框属性中使用表达式 我将使用矩阵处理此问题,并相应地设置每个单元格的背景 为此,我们需要一组日期。在您的情况下,由于您似乎只进入月份级别,所以我的日期表只包含月份和年份 首先,创建一个新报告,并使用以下查询添加一个数据集。很明显,您必须调整它以适应您的

我需要达到以下报告要求-

我需要根据开始和结束日期动态增加数据栏的宽度。 我知道数据栏需要在图表上绘制一个度量值。因此,我不确定这是否可以使用数据栏来完成

我还尝试使用表达式为文本框(时间轴列)的背景色着色。这样对吗

谢谢,
Amrita在文本框属性中使用表达式


我将使用矩阵处理此问题,并相应地设置每个单元格的背景

为此,我们需要一组日期。在您的情况下,由于您似乎只进入月份级别,所以我的日期表只包含月份和年份

首先,创建一个新报告,并使用以下查询添加一个数据集。很明显,您必须调整它以适应您的数据库,但您应该了解这一点。我将很快解释代码

DECLARE @dates TABLE(Year int, Month int)
INSERT INTO @dates VALUES
(2018,1), (2018,2), (2018,3), (2018,4), (2018,5), (2018,6),
(2018,7), (2018,8), (2018,9), (2018,10), (2018,11), (2018,12),
(2019,1), (2019,2), (2019,3), (2019,4)


DECLARE @t TABLE (GroupName varchar(10), ActivityName varchar(10), StartDate date, EndDate date, RGB varchar(10))

INSERT INTO @t VALUES
('Group 1', 'Activity 1', '2018-01-03', '2018-12-14', '#ED7D31'),
('Group 1', 'Activity 2', '2018-02-03', '2018-06-14', '#AFABAA'),
('Group 2', 'Activity 3', '2018-01-03', '2018-04-14', '#9DC3E8'),
('Group 2', 'Activity 4', '2018-06-03', '2018-07-14', '#2E75B5'),
('Group 2', 'Activity 5', '2018-08-03', '2018-12-14', '#C55B11'),
('Group 2', 'Activity 6', '2018-03-03', '2018-07-14', '#F4B184'),
('Group 3', 'Activity 7', '2018-10-03', '2019-03-14', '#596DF2'),
('Group 3', 'Activity 8', '2009-01-03', '2019-02-14', '#3d7080')

SELECT * 
    FROM @dates d
       LEFT JOIN (
                SELECT 
                    *
                    , (Year(StartDate) * 100) + Month(StartDate)  as StartYrMn
                    , (Year(EndDate) * 100) + Month(EndDate)  as EndYrMn
                    FROM @t
                ) a
                    ON ((d.[Year] * 100) + d.[Month]) BETWEEN StartYrMn AND EndYrMn
    ORDER BY ActivityName, d.Year, d.Month
这第一部分是我们的日期表。我刚刚在数据集中创建了这个表,但您可能希望为此创建一个永久数据库表

第二部分重新创建示例数据,我已将其扩展到跨年度边界(现在有2019个日期),因此当数据不在一年内时,它仍然有效。 我还添加了一个RGB列来存储我们想要的颜色(还有其他方法,但这是最简单的)

最后的SELECT语句获取基本活动数据,计算一个StartYrMn和EndYrMn列,该列仅包含2018年12月的值,例如
201812
。这是在子查询中完成的

然后,我们将日期表和
左连接到子查询,以生成一组数据,其中包含每年/每月和活动的一行。您可以在SSMS中运行上述代码以查看结果

好了,数据端完成了

接下来,将矩阵项添加到报告中

为GroupName和ActivityName设置行组(GroupName需要是ActivityName的父级)

现在为[Year]和[Month]添加列组。同样地,【年】应该是【月】的父项

您的报表设计应该是这样的(除了我接下来要介绍的月份表达式)

如果您现在运行报告,您将在列标题中获得月数,因此要解决此问题,请将月份表达式更改为

=FORMAT(DATESERIAL(2017, Fields!Month.Value, 1), "MMM")
你可以忽略2017年,我们只需要创建一个日期来获取月份名称。你可以使用1999年,它仍然有效

现在剩下要做的就是给单元格的背景上色。将
数据
单元格的背景色设置为以下表达式

=IIF(IsNothing(Fields!ActivityName.Value), nothing, Fields!RGB.Value)
这里我们要做的就是说,如果没有数据,请将单元格留空,否则将颜色设置为数据集中的RGB值

就这样

你的最终结果应该是这样的


如果您无法使其工作。我建议您使用我提供的数据集从上面的确切步骤开始,然后慢慢进行更改以适应您的数据库。

我可以使用以下方法解决上述问题

首先,我在数据集中创建了两个计算字段,这两个字段来自源的
StartDate
EndDate
字段-

StartYrMn = Year(Fields!Start_Date.Value)*100 + Month(Fields!Start_Date.Value)

EndYrMn = Year(Fields!End_Date.Value) *100 + Month(Fields!End_Date.Value)
以上内容将帮助我比较当前年份和月份的日期值

接下来,在报表设计区域中,我创建了一个矩阵,使用
GroupName
作为父组,使用
ActivityName
作为其子组。(Alan在上面的示例中描述了这一点。请参考相同内容。)

由于SSRS的限制,我无法创建一个字段来获取所有月份的名称,因此我必须对所有月份进行硬编码。在进行上述更改后,报告应如下所示:

完成上述操作后,我们现在需要为每个月编写
Fill
表达式,如下所示,以检查currentYrMn是否位于StartYrMn和EndYrMn之间

=Switch( Fields!StartYrMn.Value <= Year(Today()) & "01" And 
Fields!EndYrMn.Value>= Year(Today()) & "01" And Fields!GroupName.Value= "Group1",
"DarkBlue", 
Fields!StartYrMn.Value<= Year(Today()) & "01" And 
Fields!EndYrMn.Value>= Year(Today()) & "01" And Fields!GroupName.Value= "Group2",
"Gold")
=Switch(Fields!StartYrMn.Value=Year(Today())&“01”和Fields!GroupName.Value=“Group1”,
“暗蓝色”
Fields!StartYrMn.Value=Year(Today())&“01”和Fields!GroupName.Value=“Group2”,
“黄金”)
上面的表达式适用于一月。同样,将其转换为其他月份

最后,我删除了
数据
单元格中间的
边框线
(使用文本框的
边框
设置),这样我的颜色看起来像是分布在整个月份范围内的数据条

采用上述方法,我的最终报告如下所示:


您能否显示您现有的实际数据。这将决定解决此问题的最佳方法。是什么使每行独立,您是只有两个日期,开始日期和结束日期,还是所有日期都可用。您是否有某种可用的日期表?用尽可能多的信息更新您的问题,您会得到更好的回答ses。感谢您的回复!我已经更新了我的查询,提供了更多详细信息,包括我正在使用的数据集和报告要求。感谢您的回复!这太棒了!非常感谢您为此付出了这么多努力。我的头脑非常清楚,这让我更接近于解决方案的进度。但是,这里唯一的挑战是,我的数据源是SharePoint列表,我需要考虑如何在此处获取工作数据集。再次感谢您!如果您对处理这种情况下的SP列表有任何意见,请告诉我。谢谢!不幸的是,我没有使用SharePoint,因此无法在那里提供太多帮助。谢谢应该在您的问题中添加SharePoint标记。非常感谢!