2014-01-25 3 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 извинения - опечатка: используется используемое выражение 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 в значении столбцов в данных. Если я возьму ваш средний расчет и поставлю его в строке ниже, он вернет 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 отлично - этот дополнительный аргумент scope доступен для всех агрегатных функций? Одна вещь, которая немного странная - вы говорите (и я вам верю) «она действительно только суммирует себя, а затем делит на 10 и умножает на 2» .... если это правда, то, несомненно, мой отпечаток должен показать ** нет ** золотые ячейки? – whytheq

+0

Аргумент scope также доступен для других агрегатов. здесь [ссылка] (http://technet.microsoft.com/en-us/library/dd255275.aspx#CalculatingAggregates), где вы можете ее увидеть. Я уточнил свой ответ, чтобы быть более точным для решения второго вопроса. Он не суммирует только это число, он просто суммирует первый номер набора, с которым он сталкивается. – mmarie