powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / SSAS 2012. MDX. Неликвиды. Не продающиеся товары.
20 сообщений из 20, страница 1 из 1
SSAS 2012. MDX. Неликвиды. Не продающиеся товары.
    #39542486
grAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем.

Куб:
Группа мер Движение товара/остатки (LastChild)
Группа мер - чеки
Измерения:
Товары
Точки
Необходимо в запросе получить объемы не продающихся товаров, общие товарные запасы, в разрезе точек.
Точек 160
Написал следующий запрос. Он работает только для небольшого числа точек в запросе (максимум до 30)
В других случаях работает больше часа и отваливается по часовому тайм ауту или с сообщением о том что "другой запрос закончился с ошибкой"
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
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 элементов (от точки к точке)

Что можно предпринять/переписать... для получения данных?
Спасибо.
...
Рейтинг: 0 / 0
SSAS 2012. MDX. Неликвиды. Не продающиеся товары.
    #39542916
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grAlexПривет всем.

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

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

Что можно предпринять/переписать... для получения данных?
Спасибо.
На стороне DataSource считать остатки на сегодня и остатки на дату 100 дней назад, физически добавить в куб 2 новыми группами мер. Эти новые остатки сделать мерой агрегирования SUM и использовать их в расчетах.
Все будет летать.
...
Рейтинг: 0 / 0
SSAS 2012. MDX. Неликвиды. Не продающиеся товары.
    #39542917
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grAlex,
SET [товары в наличии] as {nonempty([Точки]*[товары на начало],
Вы считаете набор товаров в наличие по условию, что 100 дней назад они были. То есть неликвиды - это остатки, которые и тогда лежали, и сейчас не распроданы.
Посчитайте накопительный итог по движениям в разрезе измерений куба, к которым привязана "Группа мер Движение товара/остатки". Считать циклом по 1 числам месяца от начала времен, считываете 1 число прошлого, движения внутри прошлого и получаете начальный на 1 число текущего и записываете, потом сдвигаете в цикле на следующий месяц.
Когда дойдете до 4 месяцев назад - физически посчитаете "100 дней назад от сегодня", это первая новая группа мер, от них выберете сочетания точка-товар в отдельную таблицу.
Когда посчитаете 1 число текущего - физически посчитаете "остатки на сегодня для неликвида", наложив inner join по точка-товар, чтобы новые поступившие товары или открывшиеся точки не считать во вторую новую группу мер.
Лучше не класть расчеты в MDX - Вам же "крутить" это в разных разрезах, пусть физически лежит в кубе для быстрого анализа.
...
Рейтинг: 0 / 0
SSAS 2012. MDX. Неликвиды. Не продающиеся товары.
    #39543530
grAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grAlex
Что можно предпринять/переписать... для получения данных?


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

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
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 то "пойдет"
Но вопрос остался...Первоначальный запрос был таким убогим, что не мог отработать...?
Если будут у кого еще какие предложения - буду рад услышать.
Спасибо
...
Рейтинг: 0 / 0
SSAS 2012. MDX. Неликвиды. Не продающиеся товары.
    #39543533
grAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grAlexgrAlexЧто можно предпринять/переписать... для получения данных?


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

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
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] в данном случае Мера Чеки - Дата продажи. Ее я тоже применял в большом запросе... эффекта не было.
...
Рейтинг: 0 / 0
SSAS 2012. MDX. Неликвиды. Не продающиеся товары.
    #39543534
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grAlex,

вы что-то странное делаете,
исходя из бизнес целей вам нужно просто посчитать оборачиваемость и знать остаток
...
Рейтинг: 0 / 0
SSAS 2012. MDX. Неликвиды. Не продающиеся товары.
    #39543548
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grAlex[Measures].[Max Transaction Date] в данном случае Мера Чеки - Дата продажи. Ее я тоже применял в большом запросе... эффекта не было.
Ого, так у Вас это не физическая мера, а формула, которая преобразует атрибут Дата продажи из элемента измерения Чеки в расчетный показатель? А сколько элементов в измерении Чеки сейчас?
...
Рейтинг: 0 / 0
SSAS 2012. MDX. Неликвиды. Не продающиеся товары.
    #39543549
grAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPgrAlex[Measures].[Max Transaction Date] в данном случае Мера Чеки - Дата продажи. Ее я тоже применял в большом запросе... эффекта не было.
Ого, так у Вас это не физическая мера, а формула, которая преобразует атрибут Дата продажи из элемента измерения Чеки в расчетный показатель? А сколько элементов в измерении Чеки сейчас?

[Measures].[Max Transaction Date] - эта физическая мера (агрегация MAX) по фактам продаж (Дата продажи) (порядка 90 млн.)
Она ничего не преобразует.
Измерения чеки - нет.
...
Рейтинг: 0 / 0
SSAS 2012. MDX. Неликвиды. Не продающиеся товары.
    #39543550
grAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КритикgrAlex,

вы что-то странное делаете,
исходя из бизнес целей вам нужно просто посчитать оборачиваемость и знать остаток
В данном случае необходим был отчет о товарах не имеющих фактов продаж (по указанным точкам) за указный период (в данном примере 100 дней), которые в него "вошли".
...
Рейтинг: 0 / 0
SSAS 2012. MDX. Неликвиды. Не продающиеся товары.
    #39543552
grAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grAlexAndy_OLAPпропущено...

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

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

Код: sql
1.
2.
3.
4.
5.
6.
7.
  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)
      )
...
Рейтинг: 0 / 0
SSAS 2012. MDX. Неликвиды. Не продающиеся товары.
    #39544268
grAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grAlexЧто можно предпринять/переписать... для получения данных?


Вот еще вариант.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
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 Гб памяти? (процессоры одинаковые)
Спасибо
...
Рейтинг: 0 / 0
SSAS 2012. MDX. Неликвиды. Не продающиеся товары.
    #39544282
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 Гб и далее по нарастающей.
...
Рейтинг: 0 / 0
SSAS 2012. MDX. Неликвиды. Не продающиеся товары.
    #39544297
grAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAP
Нет. Потому что в лучшем случае по измерению чеков на 100 миллионов элементов

У нас нет измерения "чеки"... или я что то не до понял. Есть факты - "Чеки" ([Measures].[Bill Amount] и т.п.)
...
Рейтинг: 0 / 0
SSAS 2012. MDX. Неликвиды. Не продающиеся товары.
    #39544376
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grAlexAndy_OLAP
Нет. Потому что в лучшем случае по измерению чеков на 100 миллионов элементов

У нас нет измерения "чеки"... или я что то не до понял. Есть факты - "Чеки" ([Measures].[Bill Amount] и т.п.)
160 точек - а самих элементов измерения "Dim Contractor Branch" сколько?
Я понял, что чеков как измерения у Вас нет. Значит, нужно определить, точки - это атрибут большого измерения (и не ключевой к тому же) или нет.
...
Рейтинг: 0 / 0
SSAS 2012. MDX. Неликвиды. Не продающиеся товары.
    #39544507
grAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPgrAlexпропущено...

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


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

160 точек и только у одной - 2 отдела.
Т.е. фактически измерение точки - 161 элемент
И, да, ключевой аттрибут - отдел.
Делал запрос и с ключевомым аттрибутом - результат так же.
Причем до первых 26 точек все практически быстро(на машине с малым количеством памяти).
Но стоит указать еще один элемент в наборе [точки]...всё. запрос не выполняется.
...
Рейтинг: 0 / 0
SSAS 2012. MDX. Неликвиды. Не продающиеся товары.
    #39544520
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grAlexAndy_OLAPпропущено...

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

160 точек и только у одной - 2 отдела.
Т.е. фактически измерение точки - 161 элемент
И, да, ключевой аттрибут - отдел.
Делал запрос и с ключевомым аттрибутом - результат так же.
Причем до первых 26 точек все практически быстро(на машине с малым количеством памяти).
Но стоит указать еще один элемент в наборе [точки]...всё. запрос не выполняется.
Я вот этого не понимаю в запросе "[Calendar End].[Cdate].&[20170721]:[Calendar End].[Cdate].&[20171029]" - Вы смотрите неликвиды на дату 29 октября, почему не она одна в фильтре, а диапазон дат?
...
Рейтинг: 0 / 0
SSAS 2012. MDX. Неликвиды. Не продающиеся товары.
    #39544590
grAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAPgrAlexпропущено...


160 точек и только у одной - 2 отдела.
Т.е. фактически измерение точки - 161 элемент
И, да, ключевой аттрибут - отдел.
Делал запрос и с ключевомым аттрибутом - результат так же.
Причем до первых 26 точек все практически быстро(на машине с малым количеством памяти).
Но стоит указать еще один элемент в наборе [точки]...всё. запрос не выполняется.
Я вот этого не понимаю в запросе "[Calendar End].[Cdate].&[20170721]:[Calendar End].[Cdate].&[20171029]" - Вы смотрите неликвиды на дату 29 октября, почему не она одна в фильтре, а диапазон дат?

Ограничил пространство куба анализируемым периодом. Чтоб не возиться с набором дат.
В данной нотации запрос исполняется (когда укороченый набор точек) наилучшим способом, не используя "поячеистого" расчета.
И если б не существующий объем памяти (этот вопрос будет решен) - в принципе, результат устраивает.
...
Рейтинг: 0 / 0
SSAS 2012. MDX. Неликвиды. Не продающиеся товары.
    #39544625
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grAlexAndy_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 дней назад.
...
Рейтинг: 0 / 0
SSAS 2012. MDX. Неликвиды. Не продающиеся товары.
    #39546427
grAlex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grAlexЧто можно предпринять/переписать... для получения данных?

В итоге остановившись на таком виде запроса
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
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 минут.
...
Рейтинг: 0 / 0
SSAS 2012. MDX. Неликвиды. Не продающиеся товары.
    #39546450
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grAlex,
Now() у Вас меняется в том случае, если куб не пересчитывается, а наступает новая дата.
Но если каждый день рано утром он пересчитывается - Вы точно знаете ключ даты, которая ляжет в Now().
И можно теоретически делать dynamic sql запрос и execute(@string) at linked_server_on_OLAP.
А внутри делать alter xmla, где в формуле куба ставить жестко [Calendar End].[Y-M-D].[Cdate].&[20171102] и так далее.
Но это чревато, конечно, зато позволяет в явном виде обойтись без StrToMember.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / SSAS 2012. MDX. Неликвиды. Не продающиеся товары.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]