SSRS tablix显示销售额与预算

时间:2016-09-14 22:07:26

标签: sql sql-server-2008 reporting-services ssrs-2008-r2

我正在努力了解如何在SSRS的正确Tablix中获得以下内容。

我想要一个包含以下内容的Tablix报告。

           NOV 2016         DEC 2016 
           Sales Target     Sales Target 
CustomerA   100   200        400    300

我的数据集全部在SQL Server 2008 R2中

dataset1获取销售数字。

Customer  InvoiceDate Salesvalue
CustomerA 05/11/2016  50
CustomerA 04/11/2016  50
etc

dataset2有目标。

   Customer   date      Target
   CustomerA  11/2016   200
   CustomerA  12/2016   300

我无法管理"合并"将这两张表放在一起,然后将我的目标放在每个月的销售额旁边。

我设法在powerBI中完成它,因为你可以很好地添加一个关系 基于额外DimTimTable的表格之间,我将日期与发票日期相关联,并根据月份添加过滤器。

我只是想知道我的数据集应该如何在与月份相关的预算旁边获得销售额(基于发票金额)。

所以我很难理解如何对此进行建模以及SSRS和SQLserver是否正确?我应该创建一个" cube"在此之前我能做到这一点吗?

1 个答案:

答案 0 :(得分:0)

您可以在SQL中执行此操作。

首先按客户和月份汇总您的销售额,请注意我使用了datediff / dateadd来查找该月的第一天

SELECT Customer, DATEADD(month, DATEDIFF(month, 0, InvoiceDate, 0) as StartMonth, Sum(Salesvalue) as Sales
FROM dataset1
GROUP BY Customer, DATEADD(month, DATEDIFF(month, 0, InvoiceDate, 0)

转换您的预测表日期字段,使其保持一致,并且还包含该月的第一天

SELECT Customer, CONVERT(date, '01/' + date , 103) as StartMonth, Target
FROM dataset2

如果您不希望数据存在差距并将其与客户列表相关联,您也可以加入日历文件,这样您就可以获得所有可能的值。但为了简单起见,我将在两者之间进行外部联接,因为您可能在您的范围内每个所需月份都有销售或目标。

SELECT ISNULL(Sales.Customer, Targets.Customer) as Customer, 
 ISNULL(Sales.StartMonth, Targets.StartMonth) as StartMonth,
 Sales, 
 Target
FROM (SELECT Customer, DATEADD(month, DATEDIFF(month, 0, InvoiceDate, 0) as     StartMonth, Sum(Salesvalue)  Sales 
FROM dataset1
GROUP BY Customer, DATEADD(month, DATEDIFF(month, 0, InvoiceDate, 0)) as ConvertedSales 
OUTER JOIN
(SELECT Customer, CONVERT(date, '01/' + date , 103) as StartMonth, Target
  FROM dataset2) Targets
 ON Sales.Customer = Targets.Customer AND Sales.StartMonth = Target.SalesMonth

现在,您可以使用此数据集

创建枢轴