2015-02-25 3 views
0

Я пытаюсь собрать инструкцию SQL, которая возвращает SUM значения по годам в течение нескольких выбранных лет, но с годами по дате. Другими словами, запустив отчет, выбрав годы, мне нужно значение для выбранных лет в зависимости от года. Это может быть примерно так: выбрав годы 2015, 2014 до 2010 года, отчет должен дать значение 2015 года ytd от 25.02.2015, 2014 ytd от 25.02.2014 и т. Д.SUM of YTD-значение по годам за несколько выбранных лет

Но я только выяснил, как выбрать Даты для каждого года на сегодняшний день значение вручную., Но ясно, что я думал. Тем не менее, я надеялся, что некоторые из этих работ будут обработаны с моим SQL-заявлением, используя выбранные годы Параметр, и каким-то образом добавьте месяц и день.

Кто-нибудь когда-либо занимался этим типом проблемы с помощью оператора SQL, и если да, то какой трюк у меня отсутствует?

Мой текущий оператор SQL для YTD данных аналогичен следующему: ВЫБРАТЬ непустой {. [Measures] [торгового оборота с начала года], [Measures] [Заказ Впускной Наивысший].} ON COLUMNS FROM (SELECT (StrToSet (@DateDate, ПРЕПЯТСТВОВАЛИ)

Это отлично работает на один год, но до сих пор я ищу решение в течение нескольких лет

Как описано выше моего желаемого результата будет:. после выбора нескольких финансовых лет (например, 2010- 2015) Я буду получать следующие значения: 2015 Оборот продаж YTD Order Intay YTD на сегодня сегодня 2014 Оборот продаж YTD Order Intay YTD на дату сегодня один год назад и так далее ..

+0

Вы хотите MDX или SQL-код для этого? – SouravA

+0

Я обычно создаю свои отчеты с помощью сборщика отчетов, поэтому я думаю, что это SQL. Если возможно, я предпочел бы SQL-решение, но решение mdx тоже сработало бы. –

ответ

1

Вот скрипт против AdvWrks, который вычисляет эквивалентные суммы с начала года по каждому из года НА РЯДОВ:

WITH 
    SET [NonEmptyDates] AS 
    NonEmpty([Date].[Calendar].[Date].MEMBERS) 
    SET [LastNonEmptyDate] AS 
    Tail([NonEmptyDates]) 
    SET [SetDaysInCurrentYear] AS 
    Descendants 
    (
     Exists 
     (
     [Date].[Calendar].[Calendar Year] 
     ,[LastNonEmptyDate].Item(0).Item(0) 
    ).Item(0) 
    ,[Date].[Calendar].[Date] 
    ) 
    MEMBER [Measures].[NumDaysInCurrentYear] AS 
    Rank 
    (
     [LastNonEmptyDate].Item(0) 
    ,[SetDaysInCurrentYear] 
    ) 
    MEMBER [Measures].[EquivYTD] AS 
    Aggregate 
    (
     Head 
     (
     Descendants 
     (
      [Date].[Calendar].CurrentMember 
     ,[Date].[Calendar].[Date] 
     ) 
     ,[Measures].[NumDaysInCurrentYear] 
    ) 
    ,[Measures].[Internet Sales Amount] 
    ) 
SELECT 
    { 
    [Measures].[Internet Sales Amount] 
    ,[Measures].[EquivYTD] 
    } ON 0 
,[Date].[Calendar].[Calendar Year] ON 1 
FROM [Adventure Works]; 
+0

Черт, это не сработало. Я получил ваш, я думаю, это работает, но я всегда получаю это сообщение: «Слишком много аргументов передано функции« Агрегат ». Разрешено не более двух аргументов». –

+0

@SimonPrestel - где вы пытаетесь протестировать этот скрипт? SSRS? – whytheq

+0

Да, я использую в SSRS для создания и тестирования отчетов. –