Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / OLAP и DWH Новый топик    Ответить
 Фильтр при использовании mdx  [new]
Гость99
Guest
Подскажите, такой вопрос, есть куб, в нем отбираются продажи товаров по заданному свойству (тип товара), мне нужно увидеть товары, у которых было 0 продаж за заданный период времени , я добавляю :

CREATE MEMBER CURRENTCUBE.[Measures].[Количество]
AS iif( [Measures].[ПроданоКоличество] = null, 0, [Measures].[ПроданоКоличество] ),

он выдает мне все товары, забивая на мои фильтры в кубе и измерения..

Какое можно добавить условие, чтобы он показывал товары только те, которые я выбрал через фильтр (как например Тип товара)?
Подскажите пожалуйста.. Что-то не могу сообразить :(
20 окт 17, 14:59    [20886161]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр при использовании mdx  [new]
ShIgor
Member

Откуда: Нижний Новгород
Сообщений: 1963
Гость99,

а фильтр-то где?
20 окт 17, 16:17    [20886514]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр при использовании mdx  [new]
bideveloper
Member

Откуда:
Сообщений: 126
Гость99,

а если так: CREATE MEMBER CURRENTCUBE.[Measures].[Количество]
AS iif( [Measures].[ПроданоКоличество] = null, 0, null )
20 окт 17, 18:29    [20886978]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр при использовании mdx  [new]
Гость99
Guest
ShIgor,

Ну допустим, как то так: Есть куб, смотрю в нем продажи за последнюю неделю по товару яблоко, который удовлетворяет фильтру измерения: "Участвуют в акции",
выбираю все магазины, он показывает мне:
4 магазина - в каждом по несколько продаж за заданный период.

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

магазин 1 продано яблок 2
магазин 2 продано яблок 3
магазин 3 продано яблок 5
магазин 4 продано яблок 6
магазин 5 продано яблок 0
магазин 6 продано яблок 0

а он, при моем запросе показывает мне не яблоки, которые по акции, а вообще весь ассортимент..
Вот и вопрос, как сделать так, чтобы он показывал мне то что я выше написал, а не все товары :)
20 окт 17, 20:33    [20887230]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр при использовании mdx  [new]
Гость99
Guest
bideveloper,
выдало просто нули везде :(
20 окт 17, 20:44    [20887252]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр при использовании mdx  [new]
Гость99
Guest
т.е. вопрос в том, как заставить mdx показывать не все товары, а только те, которые входят в Тип товаров, выбранный мной, за указанные периоды, во всех магазинах..
20 окт 17, 21:06    [20887294]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр при использовании mdx  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 4666
Гость99,
isempty()
20 окт 17, 21:09    [20887300]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр при использовании mdx  [new]
Гость99
Guest
Дедушка,

можете написать, как запрос будет выглядеть? попытался накинуть на [Количество], выдает опять не то.. Не верно понимаю?
20 окт 17, 21:33    [20887338]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр при использовании mdx  [new]
Andy_OLAP
Member

Откуда: я знаю, что Зенит - чемпион
Сообщений: 1177
Гость99
т.е. вопрос в том, как заставить mdx показывать не все товары, а только те, которые входят в Тип товаров, выбранный мной, за указанные периоды, во всех магазинах..


Выбираете несколько SKU фильтром по измерению и считаете.
create hidden dynamic set [Только_выбранные_товары] as existing [Номенклатура].[SKU].[SKU] - где "SKU" есть название ключевого атрибута измерения.
Далее у Вас есть 2 меры.
CREATE MEMBER CURRENTCUBE.[Measures].[Кол-во проданных товаров в магазине] as
iif(
sum(existing [Только_выбранные_товары],iif([Measures].[Продажи руб]<>0,1,null))=0,null,
sum(existing [Только_выбранные_товары],iif([Measures].[Продажи руб]<>0,1,null))
),
FORMAT_STRING = "#,#",
VISIBLE = 1;
CREATE MEMBER CURRENTCUBE.[Measures].[Кол-во проданных товаров во всех выбранных магазинах] as
iif(

sum(existing [Только_выбранные_товары],iif(([Магазины].[Магазин].[(All)],Measures].[Продажи руб])<>0,1,null))=0,null,
sum(existing [Только_выбранные_товары],iif(([Магазины].[Магазин].[(All)],Measures].[Продажи руб])<>0,1,null))
),
FORMAT_STRING = "#,#",
VISIBLE = 1;
И получается, что в измерении номенклатуры 100 тысяч позиций, при выборе атрибута "тип товара" = "яблоки" остается виртуальных 150 SKU.
[Measures].[Кол-во проданных товаров в магазине] - где-то 5, где-то 6, где-то пустота (не было оборотов), где-то 4.
[Measures].[Кол-во проданных товаров во всех выбранных магазинах] - для любого магазина (только не ставьте фильтр на это измерение) - это 5+6+4 = 15 SKU.

А теперь выводите
CREATE MEMBER CURRENTCUBE.[Measures].[Кол-во проданных товаров за период] as
iif(
[Measures].[Кол-во проданных товаров во всех выбранных магазинах] = 0, null,
// вот этого конкретного яблока среди 150 возможных вариантов ни в одном из магазинов не было
// поэтому для него пустая строка в отчете
// если в отчете под магазинами в строки вытянут SKU из измерения номенклатуры
iif
(
[Measures].[Кол-во проданных товаров в магазине] =0, 0, [Measures].[Кол-во проданных товаров в магазине]
// если во всей сети не 0, а в выбранном пустота - тогда ставим железный 0, а не прячем строку в отчете
)
),
FORMAT_STRING = "#,#",
VISIBLE = 1;


Ну а сумму оборота в штуках и рублях еще проще, чем количество уникальных SKU считать. Мысль уловили?
20 окт 17, 21:56    [20887367]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр при использовании mdx  [new]
bideveloper
Member

Откуда:
Сообщений: 126
Гость99,

Делаете отдельную группу мер, где используете таблицу измерения Товары как таблицу фактов. Там делаете меру "Количество товаров", на основе вычисляемого поля, которое всегда равно 0.
Эту группу мер привязываете к магазинам/акциям через связь многие ко многим. Таким образом уже сможете вывести список всех товаров, которые участвуют в акции в определенных магазинах независимо от количества продаж.
Далее делаете меру "Количество" = "ПроданоКоличество" + "Количество товаров" и получите нужный результат.
21 окт 17, 05:36    [20887857]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр при использовании mdx  [new]
bideveloper
Member

Откуда:
Сообщений: 126
bideveloper
Гость99,

Делаете отдельную группу мер, где используете таблицу измерения Товары как таблицу фактов. Там делаете меру "Количество товаров", на основе вычисляемого поля, которое всегда равно 0.
Эту группу мер привязываете к магазинам/акциям через связь многие ко многим.

Не, немного не так.
Делаете таблицу/запрос вида магазин, акция, дата действия акции, товар. К ней привязываете измерения обычным образом. Далее как в предыдущем сообщении.
21 окт 17, 10:45    [20888139]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр при использовании mdx  [new]
Гость99
Guest
bideveloper,

Идея очень даже мне нравится, вопрос только, а как обойти следующее: дата акции идет с такого то числа по такое то, потому, как с этим быть?

а вообще, все сработало, когда я сделал вычисляемое измерение в обычную структуру фактов, но сработало в классификаторе до товара.., на товаре он ставит пусто.. Пробовал сделать в вычисляемом измерении isnull (0,0) - ноль реакции..


По остальным вариантам, смогу только в пн попробовать, спасибо большое, если есть еще идеи, буду рад :)
21 окт 17, 18:27    [20888734]     Ответить | Цитировать Сообщить модератору
 Re: Фильтр при использовании mdx  [new]
bideveloper
Member

Откуда:
Сообщений: 126
Гость99
bideveloper,

Идея очень даже мне нравится, вопрос только, а как обойти следующее: дата акции идет с такого то числа по такое то, потому, как с этим быть?

развернуть строчку с периодом на несколько строчек с датой на каждый день
т. е. было акция 1 с 03.10.2017 по 07.10.2017
а будет
акция 1 03.10.2017
акция 1 04.10.2017
...
акция 1 07.10.2017

это можно сделать, например, путем джойна с таблицей дат по условию дата с <= дата <= дата по
21 окт 17, 20:23    [20888864]     Ответить | Цитировать Сообщить модератору
Все форумы / OLAP и DWH Ответить