2014-01-25 28 views
0

两次,我在报告中得到这个表达式:表达式更改背景颜色,如果10天的平均

=iif(
SUM(Fields!Amount.Value) > 
    (
    SUM(iif 
     (
     Fields!Date.Value >= DateAdd("d",-10,TODAY()) 
     ,Fields!Amount.Value 
     ,CDbl(0) 
     ))/10 
    )*2.0, 
"Gold", 
"Transparent" 
) 

它控制表的文本框的背景颜色。

我希望如果单元格的数量是该特定行的10天平均值的两倍或更多,它会将单元格更改为黄金。

该表显示了10天的数据,它使用的数据集有60天的数据,所以应该有10天的平均值。

表达式是否正确?

这就是它正在创建的 - 完全是橙色的两行显然不是我想要的。

enter image description here

+0

为什么你有DateAdd(“d”, - 30,TODAY())?我以为你只是将它与10天的平均值进行比较? – mmarie

+0

@mmarie apologies - typo:表达式使用说10。我已经结束了添加另一列TenDayAvg到我的'DataSet',因此简化这个表达式来比较那个列 - 现在的格式工作.....但我'米仍然有兴趣知道为什么上述失败。 – whytheq

回答

1

的问题是你在做创建你的平均总和。它实际上只是总结它遇到的第一个数字,然后除以10并乘以2.您需要将总和的范围更改为整个数据集。以下是我证明这一点的方式。

我把上表中第二行数字作为我的例子。这是我的查询。

SELECT  '1/15/14' AS dt, 1 AS value 
UNION 
SELECT  '1/16/14' AS dt, 7 AS value 
UNION 
SELECT  '1/17/14' AS dt, 5 AS value 
UNION 
SELECT  '1/18/14' AS dt, 6 AS value 
UNION 
SELECT  '1/19/14' AS dt, 4 AS value 
UNION 
SELECT  '1/20/14' AS dt, 5 AS value 
UNION 
SELECT  '1/21/14' AS dt, 5 AS value 
UNION 
SELECT  '1/22/14' AS dt, 5 AS value 
UNION 
SELECT  '1/23/14' AS dt, 6 AS value 
UNION 
SELECT  '1/24/14' AS dt, 6 AS value 

我在数据的列值中创建了一个带有dt的tablix。如果我将平均值计算并将其放在下面一行中,则每列将返回9.8。

我第一次使用你的填充表达式来确保我得到了和你一样的结果。然后,我改变它得到正确的答案:

=iif(Sum(Fields!value.Value) > 
(Sum(iif(Fields!dt.Value >= Dateadd("d",-10, today()), Fields!value.Value, CDbl(0)), "DataSet1")/10) * 2, 
"Gold","White") 

随着我有数据,无细胞应该转向黄金,这是我得到的结果。如果我将1/15的值更改为20,然后预览我的表格,那么该单元格会变成黄金,因为69/10 * 2 = 13.8和20> 13.8。

+0

+1优秀 - 这个额外范围参数是否可用于所有聚合函数?有一点有点奇怪 - 你说(我相信你)“它只是自我加总,然后除以10,再乘以2”......如果这是真的,那么我的屏幕打印应该显示** no **金细胞? – whytheq

+0

范围参数也可用于其他聚合。这里有一个[link](http://technet.microsoft.com/en-us/library/dd255275.aspx#CalculatingAggregates),你可以在这里看到它。我更新了我的答案,以更准确地解决第二个问题。它不仅仅是总结这个数字,它只是总结它遇到的第一个数字。 – mmarie