如果系列表达式错误,SSRS总和

问题描述 投票:0回答:1

我正在使用Microsoft Dynamics GP,试图在SSRS的柱形图中显示一些数据。以下是我用来开始的查询

SELECT RTRIM(S.CUSTNMBR) 'Customer ID', RTRIM(C.CUSTNAME) 'Customer Name', S.SOPTYPE, 
CONVERT(varchar(4), YEAR(S.DOCDATE)) +' Q'+ convert(varchar(1), DATEPART("QUARTER",S.DOCDATE)) AS 'YEAR QUARTER',
S.DOCDATE, S.DOCID,SL.QUANTITY
FROM SOP30200 S INNER JOIN SOP30300 SL ON S.SOPNUMBE = SL.SOPNUMBE
INNER JOIN IV00101 IV ON SL.ITEMNMBR = IV.ITEMNMBR
INNER JOIN RM00101 C ON S.CUSTNMBR = C.CUSTNMBR
WHERE S.VOIDSTTS = 0 AND IV.ITMCLSCD NOT IN ('NON INV','TRAINING','LABOR')

在SSRS的系列属性中,我在值字段中添加了以下内容。

=SUM(iif(Fields!SOPTYPE.Value = 3 AND Fields!DOCID.Value = "INV" 
OR Fields!DOCID.Value = "RMAINV", Fields!QUANTITY.Value, 0))

当我预览报表时,图表中没有数据。对于图表我只是使用柱形图。有任何想法吗?

附加信息:澄清我的上述陈述。使用的表达式用于图表数据中的值。当我在设计模式中右键单击列时,我可以选择选择系列属性。

链接到我在图表上使用的数据点的图片。 Chart Image

用于确认表达式的查询:

SELECT RTRIM(S.CUSTNMBR) 'Customer ID', RTRIM(C.CUSTNAME) 'Customer Name', CONVERT(varchar(4), YEAR(S.DOCDATE)) +' Q'+ convert(varchar(1), DATEPART("QUARTER",S.DOCDATE)) AS 'YEAR QUARTER',
SUM(iif(S.SOPTYPE = 3 AND S.DOCID = 'INV' OR S.DOCID = 'RMAINV', SL.QUANTITY, 0)) 'QUANTITY'
FROM SOP30200 S INNER JOIN SOP30300 SL ON S.SOPNUMBE = SL.SOPNUMBE
INNER JOIN IV00101 IV ON SL.ITEMNMBR = IV.ITEMNMBR
INNER JOIN RM00101 C ON S.CUSTNMBR = C.CUSTNMBR
WHERE S.VOIDSTTS = 0 AND IV.ITMCLSCD NOT IN ('NON INV','TRAINING','LABOR')
GROUP BY S.CUSTNMBR, C.CUSTNAME, CONVERT(varchar(4),YEAR(S.DOCDATE)) +' Q'+ convert(varchar(1), DATEPART("QUARTER",S.DOCDATE))

编辑:格式代码

reporting-services expression microsoft-dynamics gp
1个回答
0
投票

在StevenWhite问了一些问题后,它开始让我对我的问题有不同的看法。 因此,仅仅依靠图表我添加了一个表来显示数据。它返回数据,但数据值为0.因此我没有在我的图表上返回任何值。我错误地认为没有价值,但是有一个零值。

在那之后,我分解了总和(if(...))表达式。事实证明,当我使用时

=SUM(iif(Fields!SOPTYPE.Value = 3, Fields!QUANTITY.Value, 0))

我收到了数据,但是当我使用时

=SUM(iif(Fields!DOCID.Value = "INV", Fields!QUANTITY.Value, 0))

我收到一条警告信息:

Severity    Code    Description Project File    Line    Suppression State    
Warning     [rsAggregateOfMixedDataTypes] The Y expression for the chart ‘Chart7’ 
uses an aggregate function on data of varying data types.  Aggregate functions other than 
First, Last, Previous, Count, and CountDistinct can only aggregate data of a single data type.  

在进行一些互联网搜索之后,由于数量中的返回数据类型而出现错误。所以我刚刚更新了sum(if(...))表达式以返回CInt。这解决了这个问题。

更新的表达式

=SUM(iif(Fields!SOPTYPE.Value = 3 AND Fields!DOCID.Value = "INV" 
OR Fields!DOCID.Value = "RMAINV", CInt(Fields!QUANTITY.Value), 0))

但是我仍然不确定一个字段如何返回不同的数据类型,除非我用于iif的else部分的0是与value字段不同的数据类型。

© www.soinside.com 2019 - 2024. All rights reserved.