Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / OLAP и DWH Новый топик    Ответить
 SSAS 2012. MDX. Неликвиды. Не продающиеся товары.  [new]
grAlex
Member

Откуда:
Сообщений: 88
Привет всем.

Куб:
Группа мер Движение товара/остатки (LastChild)
Группа мер - чеки
Измерения:
Товары
Точки
Необходимо в запросе получить объемы не продающихся товаров, общие товарные запасы, в разрезе точек.
Точек 160
Написал следующий запрос. Он работает только для небольшого числа точек в запросе (максимум до 30)
В других случаях работает больше часа и отваливается по часовому тайм ауту или с сообщением о том что "другой запрос закончился с ошибкой"
WITH
  SET [Точки] as {
//     [Dim Contractor Branch].[Contractor-Branch].[All].Children
   [Dim Contractor Branch].[Territory-Contractor].[Contractor ID].&[1788001]
	,[Dim Contractor Branch].[Territory-Contractor].[Contractor ID].&[1844701]
	,[Dim Contractor Branch].[Territory-Contractor].[Contractor ID].&[186801]
// .... еще 156 тоек...
  }

  SET [Сегодня] as Exists( [Calendar End].[Cdate].[Cdate], [Calendar End].[ISCURDATE].[ISCURDATE].&[1] )
  MEMBER [Calendar End].[ISCURDATE].[Текущая дата] as [Сегодня].Item(0).Item(0)
  MEMBER [Calendar End].[ISCURDATE].[Текущая дата-100] as [Сегодня].Item(0).Item(0).lag(100)
  SET [Дни] as {[Сегодня].Item(0).Item(0).lag(100) : [Сегодня].Item(0).Item(0)}

  SET [товары на начало] as {nonempty([Ref Goods].[Goods ID].[Goods ID].members, {([Точки], [Calendar End].[ISCURDATE].[Текущая дата-100], [Measures].[Balance Amount])})}
  SET [товары в наличии] as {nonempty([Точки]*[товары на начало], ([Calendar End].[ISCURDATE].[Текущая дата-100],[Measures].[Balance Amount]))}
  
  MEMBER [количество нелеквида] as sum(
    Exists([товары на начало], Exists([Dim Contractor Branch].[Contractor-Branch].CurrentMember *[товары на начало],[товары в наличии])),
    iif(SUM([Дни], [Measures].[Bill Amount]) = 0, 1, null))  
  
  MEMBER [Баланс нелеквида] as SUM(
    Exists([товары на начало], Exists([Dim Contractor Branch].[Contractor-Branch].CurrentMember *[товары на начало],[товары в наличии])) as [товары в точке] - 
      FILTER([товары в точке], SUM([Дни], [Measures].[Bill Amount]) > 0)
      ,[Measures].[Balance Amount] 
      )
  
  MEMBER [Баланс нелеквида2] as SUM(
    Exists([товары на начало], Exists([Dim Contractor Branch].[Contractor-Branch].CurrentMember *[товары на начало],[товары в наличии])),
    iif(SUM([Дни], [Measures].[Bill Amount]) = 0, [Measures].[Balance Amount], null)
      )
  
  MEMBER [Баланс нелеквида3] as SUM(
      FILTER(
      Exists([товары на начало], Exists([Dim Contractor Branch].[Contractor-Branch].CurrentMember *[товары на начало],[товары в наличии]))
      ,SUM([Дни], [Measures].[Bill Amount]) = 0)
      ,[Measures].[Balance Amount] 
      )
SELECT 
  {[Measures].[Balance Amount], [количество нелеквида]/*,  [Баланс нелеквида]*/,  [Баланс нелеквида2]/*,  [Баланс нелеквида3]*/} on 0,
  {[точки]} on 1
FROM [NETCENTER]


Если не получать остатка по "неликвиду", а только его количество - запрос отрабатывает для всех точек. В [количество нелеквида] от 300 до 1500 элементов (от точки к точке)

Что можно предпринять/переписать... для получения данных?
Спасибо.
26 окт 17, 14:23    [20902291]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. MDX. Неликвиды. Не продающиеся товары.  [new]
Andy_OLAP
Member

Откуда: я знаю, что Зенит - чемпион
Сообщений: 1190
grAlex
Привет всем.

Куб:
Группа мер Движение товара/остатки (LastChild)
Группа мер - чеки
Измерения:
Товары
Точки
Необходимо в запросе получить объемы не продающихся товаров, общие товарные запасы, в разрезе точек.
Точек 160
Написал следующий запрос. Он работает только для небольшого числа точек в запросе (максимум до 30)

Если не получать остатка по "неликвиду", а только его количество - запрос отрабатывает для всех точек. В [количество нелеквида] от 300 до 1500 элементов (от точки к точке)

Что можно предпринять/переписать... для получения данных?
Спасибо.

На стороне DataSource считать остатки на сегодня и остатки на дату 100 дней назад, физически добавить в куб 2 новыми группами мер. Эти новые остатки сделать мерой агрегирования SUM и использовать их в расчетах.
Все будет летать.
26 окт 17, 23:51    [20904561]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. MDX. Неликвиды. Не продающиеся товары.  [new]
Andy_OLAP
Member

Откуда: я знаю, что Зенит - чемпион
Сообщений: 1190
grAlex,
SET [товары в наличии] as {nonempty([Точки]*[товары на начало],
Вы считаете набор товаров в наличие по условию, что 100 дней назад они были. То есть неликвиды - это остатки, которые и тогда лежали, и сейчас не распроданы.
Посчитайте накопительный итог по движениям в разрезе измерений куба, к которым привязана "Группа мер Движение товара/остатки". Считать циклом по 1 числам месяца от начала времен, считываете 1 число прошлого, движения внутри прошлого и получаете начальный на 1 число текущего и записываете, потом сдвигаете в цикле на следующий месяц.
Когда дойдете до 4 месяцев назад - физически посчитаете "100 дней назад от сегодня", это первая новая группа мер, от них выберете сочетания точка-товар в отдельную таблицу.
Когда посчитаете 1 число текущего - физически посчитаете "остатки на сегодня для неликвида", наложив inner join по точка-товар, чтобы новые поступившие товары или открывшиеся точки не считать во вторую новую группу мер.
Лучше не класть расчеты в MDX - Вам же "крутить" это в разных разрезах, пусть физически лежит в кубе для быстрого анализа.
26 окт 17, 23:57    [20904581]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. MDX. Неликвиды. Не продающиеся товары.  [new]
grAlex
Member

Откуда:
Сообщений: 88
grAlex

Что можно предпринять/переписать... для получения данных?


Andy_OLAP - спасибо за предложения. Но, структурно, сейчас, не имелось возможности решить вопрос.

В итоге пришел к такому результату

WITH
  SET [Точки] as {
  [Dim Contractor Branch].[Contractor-Branch].[All].Children
  }
  SET [Сегодня] as Exists( [Calendar End].[Cdate].[Cdate], [Calendar End].[ISCURDATE].[ISCURDATE].&[1])
  MEMBER [Calendar End].[ISCURDATE].[Текущая дата-100] as [Сегодня].Item(0).Item(0).lag(100)
  MEMBER [Общий товарный запас] as ([Dim Contractor Branch].[Contractor-Branch].CurrentMember, [Ref Goods].[Goods ID].[All], [Measures].[Balance Amount])
  SET [товары на начало] as {nonempty([Ref Goods].[Goods ID].[Goods ID].members, {([Точки], [Calendar End].[ISCURDATE].[Текущая дата-100], [Measures].[Balance Amount])})}
  SET [товары в точке] as 
     {
      FILTER( 		  
      nonempty([Точки] * [товары на начало], {([Calendar End].[ISCURDATE].[Текущая дата-100], [Measures].[Balance Amount])}) 
	  , [Measures].[Max Transaction Date] < DATEVALUE(FORMAT(Now()-100,'yyyy-MM-dd')) AND [Measures].[Balance Amount] > 0
	  )
     }
SELECT 
  {[Measures].[Balance Amount], [Общий товарный запас]} on 0,
  {[Товары в точке]} on 1
FROM [NETCENTER]

Форма вывода другая...гораздо детальнее (10тки тысяч строк - что конечно излишне). Но этот запрос выполняется и довольно быстро (на "нашей мощности" - 12 минут)
Т.к. отчет готовится для вывода в SSRS то "пойдет"
Но вопрос остался...Первоначальный запрос был таким убогим, что не мог отработать...?
Если будут у кого еще какие предложения - буду рад услышать.
Спасибо
27 окт 17, 20:11    [20907837]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. MDX. Неликвиды. Не продающиеся товары.  [new]
grAlex
Member

Откуда:
Сообщений: 88
grAlex
grAlex
Что можно предпринять/переписать... для получения данных?


Andy_OLAP - спасибо за предложения. Но, структурно, сейчас, не имелось возможности решить вопрос.

В итоге пришел к такому результату

WITH
  SET [Точки] as {
  [Dim Contractor Branch].[Contractor-Branch].[All].Children
  }
  SET [Сегодня] as Exists( [Calendar End].[Cdate].[Cdate], [Calendar End].[ISCURDATE].[ISCURDATE].&[1])
  MEMBER [Calendar End].[ISCURDATE].[Текущая дата-100] as [Сегодня].Item(0).Item(0).lag(100)
  MEMBER [Общий товарный запас] as ([Dim Contractor Branch].[Contractor-Branch].CurrentMember, [Ref Goods].[Goods ID].[All], [Measures].[Balance Amount])
  SET [товары на начало] as {nonempty([Ref Goods].[Goods ID].[Goods ID].members, {([Точки], [Calendar End].[ISCURDATE].[Текущая дата-100], [Measures].[Balance Amount])})}
  SET [товары в точке] as 
     {
      FILTER( 		  
      nonempty([Точки] * [товары на начало], {([Calendar End].[ISCURDATE].[Текущая дата-100], [Measures].[Balance Amount])}) 
	  , [Measures].[Max Transaction Date] < DATEVALUE(FORMAT(Now()-100,'yyyy-MM-dd')) AND [Measures].[Balance Amount] > 0
	  )
     }
SELECT 
  {[Measures].[Balance Amount], [Общий товарный запас]} on 0,
  {[Товары в точке]} on 1
FROM [NETCENTER]

Форма вывода другая...гораздо детальнее (10тки тысяч строк - что конечно излишне). Но этот запрос выполняется и довольно быстро (на "нашей мощности" - 12 минут)
Т.к. отчет готовится для вывода в SSRS то "пойдет"
Но вопрос остался...Первоначальный запрос был таким убогим, что не мог отработать...?
Если будут у кого еще какие предложения - буду рад услышать.
Спасибо

P.S.
[Measures].[Max Transaction Date] в данном случае Мера Чеки - Дата продажи. Ее я тоже применял в большом запросе... эффекта не было.
27 окт 17, 20:33    [20907861]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. MDX. Неликвиды. Не продающиеся товары.  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 31372
Блог
grAlex,

вы что-то странное делаете,
исходя из бизнес целей вам нужно просто посчитать оборачиваемость и знать остаток
27 окт 17, 20:38    [20907866]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. MDX. Неликвиды. Не продающиеся товары.  [new]
Andy_OLAP
Member

Откуда: я знаю, что Зенит - чемпион
Сообщений: 1190
grAlex
[Measures].[Max Transaction Date] в данном случае Мера Чеки - Дата продажи. Ее я тоже применял в большом запросе... эффекта не было.

Ого, так у Вас это не физическая мера, а формула, которая преобразует атрибут Дата продажи из элемента измерения Чеки в расчетный показатель? А сколько элементов в измерении Чеки сейчас?
27 окт 17, 21:30    [20907988]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. MDX. Неликвиды. Не продающиеся товары.  [new]
grAlex
Member

Откуда:
Сообщений: 88
Andy_OLAP
grAlex
[Measures].[Max Transaction Date] в данном случае Мера Чеки - Дата продажи. Ее я тоже применял в большом запросе... эффекта не было.

Ого, так у Вас это не физическая мера, а формула, которая преобразует атрибут Дата продажи из элемента измерения Чеки в расчетный показатель? А сколько элементов в измерении Чеки сейчас?


[Measures].[Max Transaction Date] - эта физическая мера (агрегация MAX) по фактам продаж (Дата продажи) (порядка 90 млн.)
Она ничего не преобразует.
Измерения чеки - нет.
27 окт 17, 21:41    [20908003]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. MDX. Неликвиды. Не продающиеся товары.  [new]
grAlex
Member

Откуда:
Сообщений: 88
Критик
grAlex,

вы что-то странное делаете,
исходя из бизнес целей вам нужно просто посчитать оборачиваемость и знать остаток

В данном случае необходим был отчет о товарах не имеющих фактов продаж (по указанным точкам) за указный период (в данном примере 100 дней), которые в него "вошли".
27 окт 17, 21:46    [20908009]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. MDX. Неликвиды. Не продающиеся товары.  [new]
grAlex
Member

Откуда:
Сообщений: 88
grAlex
Andy_OLAP
пропущено...

Ого, так у Вас это не физическая мера, а формула, которая преобразует атрибут Дата продажи из элемента измерения Чеки в расчетный показатель? А сколько элементов в измерении Чеки сейчас?


[Measures].[Max Transaction Date] - эта физическая мера (агрегация MAX) по фактам продаж (Дата продажи) (порядка 90 млн.)
Она ничего не преобразует.
Измерения чеки - нет.


  MEMBER [Баланс нелеквида2] as SUM(
    Exists([товары на начало], Exists([Dim Contractor Branch].[Contractor-Branch].CurrentMember *[товары на начало],[товары в наличии])),
    --iif(SUM([Дни], [Measures].[Bill Amount]) = 0, [Measures].[Balance Amount], null)
    iif([Measures].[Max Transaction Date] < DATEVALUE(FORMAT(Now()-100,'yyyy-MM-dd'))
    , [Measures].[Balance Amount]
    , null)
      )
27 окт 17, 21:49    [20908017]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. MDX. Неликвиды. Не продающиеся товары.  [new]
grAlex
Member

Откуда:
Сообщений: 88
grAlex
Что можно предпринять/переписать... для получения данных?


Вот еще вариант.
WITH
  SET [Точки] as {
  [Dim Contractor Branch].[Contractor-Branch].[All].children
  }

  SET [Сегодня] as Exists( [Calendar End].[Cdate].[Cdate], [Calendar End].[ISCURDATE].[ISCURDATE].&[1] )
--  MEMBER [Calendar End].[ISCURDATE].[Текущая дата] as [Сегодня].Item(0).Item(0)
  MEMBER [Calendar End].[ISCURDATE].[Текущая дата-100] as [Сегодня].Item(0).Item(0).lag(100)
  
  member x as iif(NOT IsEmpty([Measures].[Balance Amount]) and
    ISEMPTY([Measures].[Bill Amount]) 
    and not isempty(([Calendar End].[ISCURDATE].[Текущая дата-100],[Measures].[Balance Amount])),1,null)
  MEMBER [нелеквид] AS iif(x=1,[Measures].[Balance Amount],null)
  MEMBER [колво нелеквид] AS iif(x=1,1,null)
    
  MEMBER [количество нелеквида] as sum(
   EXISTING [Ref Goods].[Goods ID].[Goods ID],
   [колво нелеквид]
   )
  
  MEMBER [Баланс нелеквида22] as sum(
   EXISTING [Ref Goods].[Goods ID].[Goods ID],
   [нелеквид]
   )  

SELECT 
  {[Measures].[Balance Amount], [количество нелеквида], [Баланс нелеквида22]} on 0,
  non empty{[точки]} on 1
FROM 
(
select 
{[Calendar End].[Cdate].&[20170721]:[Calendar End].[Cdate].&[20171029]} on 0
from [NETCENTER]
)


На машине (64битной) с памятью 13 Гб запрос без расчета [количество нелеквида] выполняется за 6 минут.
и полный запрос через 40 минут вываливается с ошибкой "Операция отменена, поскольку не хватает доступной памяти для приложения"
На машине (64битной) с памятью 40 Гб полный запрос выполняется за 3 с половиной минуты.
фактов движения 130 млн, чеков 92 млн, точек 160, товаров в измерении 80 тыш.

Есть ли способ получить результат запроса на машине с 13 Гб памяти? (процессоры одинаковые)
Спасибо
30 окт 17, 11:37    [20911317]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. MDX. Неликвиды. Не продающиеся товары.  [new]
Andy_OLAP
Member

Откуда: я знаю, что Зенит - чемпион
Сообщений: 1190
grAlex
На машине (64битной) с памятью 13 Гб запрос без расчета [количество нелеквида] выполняется за 6 минут.
и полный запрос через 40 минут вываливается с ошибкой "Операция отменена, поскольку не хватает доступной памяти для приложения"
На машине (64битной) с памятью 40 Гб полный запрос выполняется за 3 с половиной минуты.
фактов движения 130 млн, чеков 92 млн, точек 160, товаров в измерении 80 тыш.

Есть ли способ получить результат запроса на машине с 13 Гб памяти? (процессоры одинаковые)
Спасибо

Нет. Потому что в лучшем случае по измерению чеков на 100 миллионов элементов у Вас оперативной памяти потребуется под 15 Гб, а если Вы в дизайне агрегатов воспользовались подсказками Microsoft - то у Вас файлы в группе мер с чеками flex в несколько раз больше, чем исходные fact.data - делайте тестовый куб, вырезайте все Aggregation Design, обрабатывайте и считайте запрос - и сколько будет Peak Workin Set (Memory) на компьютере с 40 Гб. Если не перейдет за 12 - ну тогда пробуйте на компьютере с 13 Гб. Вообще наличие под 50 миллионов чеков - это уже обоснование ставить 24 Гб, 100 миллионов - 32 Гб и далее по нарастающей.
30 окт 17, 11:47    [20911355]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. MDX. Неликвиды. Не продающиеся товары.  [new]
grAlex
Member

Откуда:
Сообщений: 88
Andy_OLAP

Нет. Потому что в лучшем случае по измерению чеков на 100 миллионов элементов


У нас нет измерения "чеки"... или я что то не до понял. Есть факты - "Чеки" ([Measures].[Bill Amount] и т.п.)
30 окт 17, 11:56    [20911400]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. MDX. Неликвиды. Не продающиеся товары.  [new]
Andy_OLAP
Member

Откуда: я знаю, что Зенит - чемпион
Сообщений: 1190
grAlex
Andy_OLAP

Нет. Потому что в лучшем случае по измерению чеков на 100 миллионов элементов


У нас нет измерения "чеки"... или я что то не до понял. Есть факты - "Чеки" ([Measures].[Bill Amount] и т.п.)

160 точек - а самих элементов измерения "Dim Contractor Branch" сколько?
Я понял, что чеков как измерения у Вас нет. Значит, нужно определить, точки - это атрибут большого измерения (и не ключевой к тому же) или нет.
30 окт 17, 13:13    [20911727]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. MDX. Неликвиды. Не продающиеся товары.  [new]
grAlex
Member

Откуда:
Сообщений: 88
Andy_OLAP
grAlex
пропущено...

пропущено...


У нас нет измерения "чеки"... или я что то не до понял. Есть факты - "Чеки" ([Measures].[Bill Amount] и т.п.)

160 точек - а самих элементов измерения "Dim Contractor Branch" сколько?
Я понял, что чеков как измерения у Вас нет. Значит, нужно определить, точки - это атрибут большого измерения (и не ключевой к тому же) или нет.


160 точек и только у одной - 2 отдела.
Т.е. фактически измерение точки - 161 элемент
И, да, ключевой аттрибут - отдел.
Делал запрос и с ключевомым аттрибутом - результат так же.
Причем до первых 26 точек все практически быстро(на машине с малым количеством памяти).
Но стоит указать еще один элемент в наборе [точки]...всё. запрос не выполняется.
30 окт 17, 14:55    [20912226]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. MDX. Неликвиды. Не продающиеся товары.  [new]
Andy_OLAP
Member

Откуда: я знаю, что Зенит - чемпион
Сообщений: 1190
grAlex
Andy_OLAP
пропущено...

160 точек - а самих элементов измерения "Dim Contractor Branch" сколько?
Я понял, что чеков как измерения у Вас нет. Значит, нужно определить, точки - это атрибут большого измерения (и не ключевой к тому же) или нет.


160 точек и только у одной - 2 отдела.
Т.е. фактически измерение точки - 161 элемент
И, да, ключевой аттрибут - отдел.
Делал запрос и с ключевомым аттрибутом - результат так же.
Причем до первых 26 точек все практически быстро(на машине с малым количеством памяти).
Но стоит указать еще один элемент в наборе [точки]...всё. запрос не выполняется.

Я вот этого не понимаю в запросе "[Calendar End].[Cdate].&[20170721]:[Calendar End].[Cdate].&[20171029]" - Вы смотрите неликвиды на дату 29 октября, почему не она одна в фильтре, а диапазон дат?
30 окт 17, 15:04    [20912273]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. MDX. Неликвиды. Не продающиеся товары.  [new]
grAlex
Member

Откуда:
Сообщений: 88
Andy_OLAP
grAlex
пропущено...


160 точек и только у одной - 2 отдела.
Т.е. фактически измерение точки - 161 элемент
И, да, ключевой аттрибут - отдел.
Делал запрос и с ключевомым аттрибутом - результат так же.
Причем до первых 26 точек все практически быстро(на машине с малым количеством памяти).
Но стоит указать еще один элемент в наборе [точки]...всё. запрос не выполняется.

Я вот этого не понимаю в запросе "[Calendar End].[Cdate].&[20170721]:[Calendar End].[Cdate].&[20171029]" - Вы смотрите неликвиды на дату 29 октября, почему не она одна в фильтре, а диапазон дат?


Ограничил пространство куба анализируемым периодом. Чтоб не возиться с набором дат.
В данной нотации запрос исполняется (когда укороченый набор точек) наилучшим способом, не используя "поячеистого" расчета.
И если б не существующий объем памяти (этот вопрос будет решен) - в принципе, результат устраивает.
30 окт 17, 16:01    [20912524]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. MDX. Неликвиды. Не продающиеся товары.  [new]
Andy_OLAP
Member

Откуда: я знаю, что Зенит - чемпион
Сообщений: 1190
grAlex
Andy_OLAP
пропущено...

Я вот этого не понимаю в запросе "[Calendar End].[Cdate].&[20170721]:[Calendar End].[Cdate].&[20171029]" - Вы смотрите неликвиды на дату 29 октября, почему не она одна в фильтре, а диапазон дат?


Ограничил пространство куба анализируемым периодом. Чтоб не возиться с набором дат.
В данной нотации запрос исполняется (когда укороченый набор точек) наилучшим способом, не используя "поячеистого" расчета.
И если б не существующий объем памяти (этот вопрос будет решен) - в принципе, результат устраивает.

У Вас пересечение точек - выбранных из измерения в статическом наборе - и товаров.
Ну так используйте intersect(set_точек, set_товаров, [нужная мера]).
Определяете набор на начало периода (выбранная минус 100 дней) для точек и товаров и счетчик для пересечения. Определяете набор на выбранный день и счетчик для пересечения. Смотрите Aggregate по товарам и магазинам, если счетчик равен 1 и по первому набору, и по второму набору.
И не нужно вообще делать set [Сегодня] - называйте это set [ВыбранныеДаты].
Если у Вас атрибут ISCURDATE равен 1 только для одного элемента измерения - и он всегда внутри измерения меняется на текущую дату после ProcessUpdate - то зачем такая сложная формула. Делайте StrToMember("[Calendar End].[Cdate].[Cdate].&[20171030]") и такую же дату для 100 дней назад.
30 окт 17, 16:23    [20912640]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. MDX. Неликвиды. Не продающиеся товары.  [new]
grAlex
Member

Откуда:
Сообщений: 88
grAlex
Что можно предпринять/переписать... для получения данных?

В итоге остановившись на таком виде запроса
WITH
  SET [Точки] as {
  [Dim Contractor Branch].[Contractor-Branch].[All].children
  }
  --SET [Сегодня] as Exists( [Calendar End].[Cdate].[Cdate], [Calendar End].[ISCURDATE].[ISCURDATE].&[1] )
  --MEMBER [Calendar End].[ISCURDATE].[Текущая дата] as [Сегодня].Item(0).Item(0)
  --MEMBER [Calendar End].[ISCURDATE].[Текущая дата-100] as [Сегодня].Item(0).Item(0).lag(100)
  --SET [Дни] as {[Сегодня].Item(0).Item(0).lag(100) : [Сегодня].Item(0).Item(0)}

  MEMBER [нелеквид] as iif(
    ISEMPTY([Measures].[Bill Amount]) 
AND NOT ISEMPTY((STRTOMEMBER('[Calendar End].[Y-M-D].[Cdate].&['+FORMAT(Now(),'yyyyMMdd')+']', CONSTRAINED).Lag(101),[Measures].[Balance Amount])),
[Measures].[Balance Amount],null)
  MEMBER [количество нелеквида] as SUM(
   EXISTING [Ref Goods].[Goods ID].[Goods ID],
   iif([нелеквид]>0,1,null)
   )
  MEMBER [Баланс нелеквида] as SUM(
   EXISTING [Ref Goods].[Goods ID].[Goods ID],
   [нелеквид]
   )  
SELECT 
  {[Measures].[Balance Amount], [количество нелеквида], [Баланс нелеквида]} on 0,
  NON EMPTY{[точки]} on 1
FROM
(
SELECT 
{STRTOMEMBER('[Calendar End].[Y-M-D].[Cdate].&['+FORMAT(Now(),'yyyyMMdd')+']', CONSTRAINED).Lag(100):
STRTOMEMBER('[Calendar End].[Y-M-D].[Cdate].&['+FORMAT(Now(),'yyyyMMdd')+']', CONSTRAINED)} on 0
FROM [NETCENTER]
)

изучив эту темы
SSAS 2008 RS: Невозможность подключения из за нехваток памяти
и особенно эту
SSAS 2008R2: PropertyList.Format, пустые наборы и катастрофическое "отжирание" памяти
и проведя ревизию вычисляемых элементов добился времени исполнения запроса на сброшенном кэше, сервера с 13 Гб памяти, 6 минут.
1 ноя 17, 22:15    [20920403]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. MDX. Неликвиды. Не продающиеся товары.  [new]
Andy_OLAP
Member

Откуда: я знаю, что Зенит - чемпион
Сообщений: 1190
grAlex,
Now() у Вас меняется в том случае, если куб не пересчитывается, а наступает новая дата.
Но если каждый день рано утром он пересчитывается - Вы точно знаете ключ даты, которая ляжет в Now().
И можно теоретически делать dynamic sql запрос и execute(@string) at linked_server_on_OLAP.
А внутри делать alter xmla, где в формуле куба ставить жестко [Calendar End].[Y-M-D].[Cdate].&[20171102] и так далее.
Но это чревато, конечно, зато позволяет в явном виде обойтись без StrToMember.
2 ноя 17, 00:12    [20920634]     Ответить | Цитировать Сообщить модератору
Все форумы / OLAP и DWH Ответить