【问题标题】:daily production report with opeing and closing fields with grouping每日生产报告,带有分组的打开和关闭字段
【发布时间】:2014-05-10 03:57:46
【问题描述】:

我必须在 SQL Server 2008 中为我的系统创建一个生产报告,其中包括按日期和按员工/按流程分组,以及发出/接收它的期初和期末数量/个。

这是我的 SQL Server 表结构:

CREATE TABLE [dbo].[PROD_SUM](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [TRANS_DATE] [date] NOT NULL,
    [TRANS_FLAG] [varchar](1) NULL,   // contains 'I'->Issue Or 'R' ->Receive
    [EMP_ID] [smallint] NULL,
    [PROC_ID] [smallint] NULL,
    [DEPT_ID] [smallint] NULL,
    [PCS] [smallint] NULL,
    [WEIGHT] [decimal](9, 3) NULL,
    [VALUE] [decimal](15, 2) NULL,
 CONSTRAINT [PK_PROD_SUM] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

这是一些虚拟数据。

INSERT INTO [PROD_SUM]
           ([TRANS_DATE]
           ,[TRANS_FLAG]
           ,[EMP_ID]
           ,[PROC_ID]
           ,[DEPT_ID]
           ,[PCS]
           ,[WEIGHT]
           ,[VALUE])
     VALUES
           ( '2014-May-01', 'R', 1, 1, 1, 10, 12.50, 100.00),
           ( '2014-May-01', 'I', 1, 1, 1, 05, 4.75, 24.00),
           ( '2014-May-02', 'R', 1, 1, 1, 14, 14.50, 140.00),
           ( '2014-May-02', 'I', 1, 1, 1, 02, 2.47, 12.00),
           ( '2014-May-03', 'R', 1, 1, 1, 01, 1.22, 10.00)
GO

现在有了上面的示例数据,我需要“2014 年 5 月 2 日”和“2014 年 5 月 3 日”期间的报告,开盘和收盘的日期列表如下。

                                     02-05-2014                        03-05-2014   
                         ----------------------------------   -------------------------------
Emp_Id | Proc_id | Unit | Opening  Receive  Issue  Closing | Opening  Receive  Issue  Closing    
---------------------------------------------------------------------------------------------
   1       1        Pcs       05       14      2      17        17        1      0      18
                    Wgt.    7.75     14.5   2.47   19.78     19.78     1.22      0   21.00
                    Val.   76.00   140.00  12.00  204.00    204.00    10.00      0  214.00

在这里您可以看到我在报告中添加了一个新列作为“单位”,其中包括 Pcs、Weight 和 value。并且第一个日期的开始列应该是计算开始值(例如,接收减去以前日期的问题(2014 年 5 月 2 日之前))。期末字段应该是Opening + receive - Issue,并且这个期末值应该在下一个日期作为期初值结转。

此表大约有 10k 行,因此在生成报告时必须考虑性能。我使用 SQL Server 2008 作为数据库,现在我没有使用它的报告服务。因此,如果报告服务中有更好的选择,请告诉我。因为我以前从未使用过报告服务。

谢谢。

【问题讨论】:

  • 到目前为止你尝试过什么?您在 TRANS_FLAG 中只有 I 和 R 标志,但在输出中有打开、接收、关闭和问题列。
  • @BoratSagdiyev,我想要按 TRANS_FLAG 字段分组的 Pcs、Weight 和 value 的总和,并且应该计算打开和关闭。开盘将是前几天的收盘(除了第一个日期,第一个日期应该是报告开始日期之前的字段总和),收盘将是开盘+接收问题。

标签: sql sql-server sql-server-2008 reporting-services cumulative-sum


【解决方案1】:

对于关闭,我会使用 SSRS RunningValue 函数,例如(假设您的最低级别 Row 组名为“Proc_Id”)

= RunningValue ( Fields!receive.Value - Fields!issue.Value , Sum , "Proc_Id" )

然后我将通过反转您的逻辑来计算开盘价,例如

= ReportItems!Closing.Value - ( Fields!receive.Value - Fields!issue.Value )

【讨论】:

    猜你喜欢
    • 2011-09-05
    • 1970-01-01
    • 2013-05-13
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 2018-10-11
    相关资源
    最近更新 更多