运行 值 CountDistinct 和逻辑表达式?
Running Value CountDistinct and Logic Expression?
我有这样的原始数据
Original Data
我需要用它创建两个报告,这是第一个报告:
First Report
运行值可以用这个表达式来实现
RunningValue(Fields!City.Value+Fields!Month.Value,CountDistinct,"Region")
我需要的第二份报告是:
Second Report
我该怎么做才能向 运行 值添加逻辑,从而避免对 Sum(Amount) 为零的行进行编号?
我不确定您是否可以使用 RunningValue 执行此操作,其他人可能知道某种方法。
我所做的是将逻辑移至查询中。
我复制了一些数据以匹配您的最终报告编号(您的示例数据与示例报告输出不匹配)。
这是我使用的示例数据。
DECLARE @t TABLE(Region varchar(10), City varchar(10), MonthID int, Amount int)
INSERT INTO @t VALUES
('Asia', 'Tokyo', 4, 1000),
('Asia', 'Tokyo', 4, 500),
('Asia', 'Tokyo', 5, 2000),
('Asia', 'Tokyo', 5, -2000),
('Asia', 'Tokyo', 6, 1000),
('Asia', 'Tokyo', 6, -500),
('Asia', 'Bangkok', 4, 500),
('Asia', 'Bangkok', 4, 500),
('Asia', 'Bangkok', 5, 3000),
('Asia', 'Bangkok', 5, -500),
('Asia', 'Bangkok', 6, -750),
('Asia', 'Bangkok', 6, 750)
SELECT
*
, ROW_NUMBER() OVER(PARTITION BY Region, City ORDER BY MonthID) as RowN1
, ROW_NUMBER() OVER(PARTITION BY (CASE Amount WHEN 0 THEN 0 ELSE 1 END), Region, City ORDER BY MonthID) as RowN2
FROM
(
SELECT
Region, City, MonthID
, SUM(Amount) AS Amount
FROM @t
GROUP BY Region, City, MonthID
) x
ORDER BY Region, City DESC, MonthID
我使用 ROW_NUMBER 函数为两个报告分配行号。
第一个“RowN1”是城市内的简单行号
第二个“RowN2”做同样的事情,但它对任何零值进行分区,因此它们与其他数据不在同一分区中。
这为我们提供了以下数据集
现在您可以使用简单的 table 在第一个报告中使用 RowN1
显示结果
在您的第二份报告中,使用 RowN2 和表达式
=IIF(Fields!Amount.Value=0, Nothing, Fields!RowN2.Value)
如果金额为零,这只会强制显示空白。
我这样做并得到了以下结果。
注意:我在数据中使用月份数字只是为了方便排序,在报告中我使用 =MonthName(Fields!MonthID.Value)
显示实际名称。
我有这样的原始数据
Original Data
我需要用它创建两个报告,这是第一个报告:
First Report
运行值可以用这个表达式来实现
RunningValue(Fields!City.Value+Fields!Month.Value,CountDistinct,"Region")
我需要的第二份报告是:
Second Report
我该怎么做才能向 运行 值添加逻辑,从而避免对 Sum(Amount) 为零的行进行编号?
我不确定您是否可以使用 RunningValue 执行此操作,其他人可能知道某种方法。
我所做的是将逻辑移至查询中。
我复制了一些数据以匹配您的最终报告编号(您的示例数据与示例报告输出不匹配)。
这是我使用的示例数据。
DECLARE @t TABLE(Region varchar(10), City varchar(10), MonthID int, Amount int)
INSERT INTO @t VALUES
('Asia', 'Tokyo', 4, 1000),
('Asia', 'Tokyo', 4, 500),
('Asia', 'Tokyo', 5, 2000),
('Asia', 'Tokyo', 5, -2000),
('Asia', 'Tokyo', 6, 1000),
('Asia', 'Tokyo', 6, -500),
('Asia', 'Bangkok', 4, 500),
('Asia', 'Bangkok', 4, 500),
('Asia', 'Bangkok', 5, 3000),
('Asia', 'Bangkok', 5, -500),
('Asia', 'Bangkok', 6, -750),
('Asia', 'Bangkok', 6, 750)
SELECT
*
, ROW_NUMBER() OVER(PARTITION BY Region, City ORDER BY MonthID) as RowN1
, ROW_NUMBER() OVER(PARTITION BY (CASE Amount WHEN 0 THEN 0 ELSE 1 END), Region, City ORDER BY MonthID) as RowN2
FROM
(
SELECT
Region, City, MonthID
, SUM(Amount) AS Amount
FROM @t
GROUP BY Region, City, MonthID
) x
ORDER BY Region, City DESC, MonthID
我使用 ROW_NUMBER 函数为两个报告分配行号。
第一个“RowN1”是城市内的简单行号
第二个“RowN2”做同样的事情,但它对任何零值进行分区,因此它们与其他数据不在同一分区中。
这为我们提供了以下数据集
现在您可以使用简单的 table 在第一个报告中使用 RowN1
显示结果在您的第二份报告中,使用 RowN2 和表达式
=IIF(Fields!Amount.Value=0, Nothing, Fields!RowN2.Value)
如果金额为零,这只会强制显示空白。
我这样做并得到了以下结果。
注意:我在数据中使用月份数字只是为了方便排序,在报告中我使用 =MonthName(Fields!MonthID.Value)
显示实际名称。