mdx первое значение периода

У меня есть куб с мерой «продажи», где у нас есть количество проданных единиц каждый день. У нас есть измерение времени с «Год > неделя > день».

Мне нужно иметь продажи за первый и последний день периода с непустыми продажами для вычисляемого поля. Я пробовал с OPENINGPERIOD и CLOSINGPERIOD, но они возвращаются в течение недели только в понедельник и воскресенье... проблема в том, что иногда понедельник выходной, а воскресенье всегда выходной, и я получаю пустые данные (у нас нет продаж в праздничные дни)... Здесь мой пример для последнего дня периода:

WITH
  MEMBER 
   [Measures].[sales end] AS 
      '((CLOSINGPERIOD([Time.Weeks].[Day],[Time.Weeks].CurrentMember)
       , [Measures].[sales]))'
SELECT 
    {[Measures].[sales], [Measures].[sales end]} ON COLUMNS, 
 NON EMPTY 
   ({[Time.Weeks].[Week].Members}) ON ROWS 
FROM [cubSales]

Мне нужно получить последний день с непустыми продажами в этот период... это должна быть пятница, но если пятница выходной, то это должен быть четверг... Я имею в виду последний день недели со значением показателя продаж ..


person jGofio    schedule 03.11.2014    source источник


Ответы (3)


Простым решением может быть просто исключение праздничных дней из измерения времени.

person FrankPl    schedule 04.11.2014
comment
Благодарность! это невозможно, потому что у нас несколько магазинов и день может быть выходным только для части, но не для остальных. - person jGofio; 05.11.2014

У Мондриана нет понятия праздников. Я бы реализовал свою собственную функцию многомерных выражений со встроенным списком праздников. Это гибкий подход, который можно расширить для поддержки разных праздников в разных странах.

person Luc    schedule 04.11.2014
comment
Привет, Люк, я действительно ищу первый и последний день периода с ненулевым значением показателя продаж, чтобы мы могли проверить календарь праздников или просто найти это ненулевое значение. Я думаю, вы говорите о настройке функции CLOSINGPERIOD... для этого мне нужно иметь [Time.Weeks].CurrentMember и показатель продаж... но я понятия не имею, как получить доступ к значениям показателей для этих дней.. , Не могли бы вы дать мне несколько первоначальных советов, пожалуйста?? - person jGofio; 05.11.2014

Проверено на нашем кубе, вроде работает нормально (про праздники ничего не сказано!)

SELECT 
  {
    [Measures].[sales]
  } ON COLUMNS
 ,NON EMPTY 
    Generate
    (
      [Time.Weeks].MEMBERS
     ,Tail
      (
        NonEmpty
        (
          [Time.Weeks].CurrentMember * [Time.Weeks].[Day].MEMBERS //<<I think .members is generally default but should do the same thing if we are explicit
         ,[Measures].[sales]
        )
      )
    ) ON ROWS
FROM [cubSales];
person whytheq    schedule 05.11.2014
comment
Привет спасибо! Я использую Pentaho 5.1, и когда я пытаюсь выполнить ваш запрос в JPivot, я получаю: Ошибка Мондриана: ни одна функция не соответствует подписи '‹Member› * ‹Level›'. Вы тоже используете Pentaho 5.1?? В чем может быть проблема? - person jGofio; 07.11.2014
comment
не уверен - я проверил вышеприведенное на Adventure Works в SQL-Server Management Studio, так что это действительно MDX. Полагаю, вам нужно перевести это на диалект Мондриана. Мы используем Pyramid, но я не участвую в его особой разновидности MDX: в настоящее время я использую standard MDX в хранимых процедурах SQL, используя функцию T-SQL OPENQUERY. Хотя попробуйте просто добавить .members после [Day] - я отредактировал ответ... - person whytheq; 08.11.2014