比较 2 个动态创建的矩阵列以获得差异

Compare 2 dynamically created matrix columns to get a difference

我设置了一个矩阵,其中包含一个名为 "company" 的行组、一个名为 "Year" 的列组和一个值字段,该字段是一年中费用的总和,称为收入。列组最终将包含 2 列,这些列是通过用户输入提供的。最终结果是一个看起来像这样的矩阵:

         Year 1 | Year 2
Company:    0    0
Company2:   0    0

我想做的是在矩阵中添加一列来计算从第 1 年到第 2 年的变化。有没有办法在矩阵中执行此操作,例如添加一个新列,其中包含一个比较表达式行中的 2 个条目,或者我是否需要操纵 SQL 代码来创建一个在代码中执行此操作的列?为此,如果这是我需要的方式,这里是数据集代码的视图:

SELECT
 company.cmp_id
,company.Company
,ChargeDetails.[Bill To ID]
,ChargeDetails.[Delivery Year]
,ChargeDetails.Revenue
FROM
ChargeDetails
LEFT OUTER JOIN company
ON ChargeDetails.[Bill To ID] = company.cmp_id
WHERE
ChargeDetails.[Delivery Year] = @DeliveryYear 
OR 
ChargeDetails.[Delivery Year] = @ComparisonYear2
ORDER BY ChargeDetails.[Delivery Year] DESC,ChargeDetails.Revenue DESC;`

尝试在 header 中的 Year 组之外添加一列,键入 Change 或您想要输入的内容,在下面的单元格中使用此表达式:

=Sum(iif(Max(Fields!DeliveryYear.Value)=Fields!DeliveryYear.Value,Fields!Revenue.Value,0))-
Sum(iif(Min(Fields!DeliveryYear.Value)=Fields!DeliveryYear.Value,Fields!Revenue.Value,0))

Note I am substracting the min year (1) revenue sum to the max year (2) revenue sum.

在您的示例中,它将产生:

+-----------+--------+--------+--------+
| Company   | Year 1 | Year 2 | Change |
+-----------+--------+--------+--------+
| Company A | 500    | 250    | -250   |
+-----------+--------+--------+--------+

您可以用多种方式定义 change,可能是百分比或任何其他度量,这只是一个示例,了解上面的表达式在做什么,以便计算您的度量需要。


编辑 1:

添加具有此数据排列的矩阵。

矩阵在预览中看起来像这样:

确保您在 DeliveryYear 组之外添加了 Change 列,如上图所示。还要检查字段名称是否与表达式中的字段名称相对应。

编辑 2:

如果收入有空值,您可以试试这个:

尝试使用 T-SQL ISNULL() 函数替换查询级别的空值,将这部分的查询更改如下

,ISNULL(ChargeDetails.Revenue,0)

但是,如果 DeliveryYear 具有空值,您可能希望忽略该记录,因此请尝试在 where 子句中将其排除。

如果您需要进一步的帮助,请告诉我。

我最终使用以下内容作为更改列中的表达式。

=sum(iif(Fields!Delivery_Year.Value=Parameters!DeliveryYear.Value,1,0)*Fields!Revenue.Value) -  sum(iif(Fields!Delivery_Year.Value=Parameters!ComparisonYear2.Value,1,0)* Fields!Revenue.Value)