Quantcast
Channel: SQL.ru: OLAP и DWH
Viewing all 1167 articles
Browse latest View live

SSAS Контроль отображения атрибута измерения по условию

$
0
0
Добрый день!

Пример:
Есть измерение Partners
У него есть атрибуты Name, Address и Region.
Есть различные меры, ну скажем с отображением суммы заказов за период и т.д.

В жизни же есть менеджеры, которые работают в том или ином регионе. Это пользователи, которые в Excel крутят-вертят сводные таблички на основе этого куба.

Нужно сделать так, чтобы менеджер видел все данные по "своему" региону, а по "чужим" регионам - не видел значения атрибутов Название и Адрес (точнее видел что-то в духе "N/A"), но видел продажи по ним.
Такое вообще возможно?
Пока единственная идея - это создать два похожих измерения(ну и два куба видимо). В первом кубе все совсем обезличенное, но с данными по всем регионам. А во втором с названиями и адресами, но ограничить доступ через роли только с своему региону.

Это для того, чтобы менеджер при уходе из организации не мог стащить всю базу клиентов, но пока он трудится - чтобы он мог сравнивать себя с другими и сохранялся "дух соревнования".

MDX SSAS 2012 проблема с запросом

$
0
0
Добрый день! Есть проблема с mdx запросом, который через некоторое время выполнения зависает и выдает ошибку о не хватит памяти. Сервак мощный и памяти на самом серваке прилично. Помогите разобраться в чем может быть проблема

SELECT
NON EMPTY { [Measures].[ТО ед], [Measures].[ТО],[Measures].[ТО USD],[Measures].[МРЖ]} ON COLUMNS,
NON EMPTY {


[Клиенты].[Клиент].[Клиент].ALLMEMBERS*
[Дата].[Год месяц день].[Дата].ALLMEMBERS*
[Товары и Услуги].[Наименование товара].[Наименование товара].ALLMEMBERS*
[Продажи].[№ документа].[№ документа].ALLMEMBERS

} DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS

FROM [Модель]
WHERE ([Дата].[Год кв мес нед день].[Год].&[2019].&[1].&[Январь].&[3].&[2019-01-16T00:00:00],
[Компания новая структура].[Структура компании].[Компания].&[ООО ""].&[Регион Украина].&[Южный регион].&[Ф-л ],
[Клиенты].[CustomerKey].&[42997],[Товары и Услуги].[Товары].[Направление].&[01. материалы].&[01.01. Л]
)
CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS

А если например убрать строку [Товары и Услуги].[Наименование товара].[Наименование товара].ALLMEMBERS* либо же [Продажи].[№ документа].[№ документа].ALLMEMBERS, то запрос отрабатывает за 2 секунды.
SELECT
NON EMPTY { [Measures].[ТО ед], [Measures].[ТО],[Measures].[ТО USD],[Measures].[МРЖ]} ON COLUMNS,
NON EMPTY {

[Клиенты].[Клиент].[Клиент].ALLMEMBERS*
[Дата].[Год месяц день].[Дата].ALLMEMBERS*
[Продажи].[№ документа].[№ документа].ALLMEMBERS

} DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS

FROM [Модель]
WHERE ([Дата].[Год кв мес нед день].[Год].&[2019].&[1].&[Январь].&[3].&[2019-01-16T00:00:00],
[Компания новая структура].[Структура компании].[Компания].&[ООО ""].&[Регион Украина].&[Южный регион].&[Ф-л ],
[Клиенты].[CustomerKey].&[42997],[Товары и Услуги].[Товары].[Направление].&[01. материалы].&[01.01. Л]
)
CELL PROPERTIES VALUE, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS
В чем может быть проблема, может нужно как то в определенной последовательности выводить данные?

SSAS like for like анализ

$
0
0
Добрый день!

Возможно ли как-то реализовать в OLAP кубе, через MDX запрос анализ Like for Like (точка к точке).
Что значит, отображать данные только по тем точкам, которые были в периоде (например сентябрь-октябрь) текущего года и таком же периоде (тоже сентябрь- октябрь) прошлого года
фильтровать еще по бренду, категории, сети и т.д.

Есть у кого-нибудь похожий пример (например в AdventureWorks)? Или может подскажите, какие MDX функции посмотреть?

Спасибо заранее!

Ошибка. Не удалось произвести чтение объекта хранилища

$
0
0
Здравствуйте!

Есть SQL-запрос
SELECT	
	CAST(F1."[Торговые точки].[Группа ТТ].[Группа ТТ].[MEMBER_CAPTION]" AS NVARCHAR(200)) AS [Группа ТТ]
OPENROWSET(
	'MSOLAP.7',
	'Provider=MSOLAP.7;Integrated Security=SSPI;Persist Security Info=True;
                 Initial Catalog=profit;Data Source=...;MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error',
	'SELECT
		[Measures].[Отгрузки шт] ON 0,
		[Торговые точки].[Группа ТТ].[Группа ТТ]  ON 1
	 FROM
                PROFIT'
	) AS F1

При выполнении и выдаче результата прерывается. Выдает сообщение "Не удалось произвести чтение объекта хранилища из поставщика OLE DB "MSOLAP.7" для связанного сервера "(null)", таблица "[MSOLAP.7]", столбец "[Торговые точки].[Группа ТТ].[Группа ТТ].[MEMBER_CAPTION]".". Прерывается из за поля [Группа ТТ] в одном обычном текстовом значении.

Не могу понять, почему не работает.

Как можно преобразование написать по другому?

Модератор: Тема перенесена из форума "Microsoft SQL Server".

New named calculation

$
0
0
Доброго времени суток! Могу ли я вставить в new named calculation таблицы фактов значение из связанного с ней по ID справочника?
Например:

SELECT Sector.Tract
FROM MovementCars
LEFT OUTER JOIN Sector ON MovementCars.IdCar = Sector.ID

где MovementCars - таблица фактов, а Sector - как видим, связанный с ней справочник?

Функция TOPCOUNT

$
0
0
Здравствуйте!

Нужно сделать выгрузку по ТТ+SKU так, чтобы для каждой ТТ отбиралось TOP 5 SKU за все 12 месяцев. По колонкам - месяцы. Написал такой MDX-запрос.
+MDX-запрос
SELECT
	[Measures].[Отгрузки шт]*[Время].[Месяц].[Месяц] ON 0,
NON EMPTY
	[Торговые точки].[Код ТТ].[Код ТТ]*
	TOPCOUNT(
		[SKU].[SKU].[SKU],
		5,
		[Measures].[Отгрузки шт])
ON 1
FROM (SELECT (
	{[Время].[Месяц].&[2018-01-01T00:00:00]:[Время].[Месяц].&[2018-12-01T00:00:00]},	
	[Торговые точки].[Тип клиента].&[2],	
	[Города].[Город].&[10],
	[Продукция].[Категория продукции].&[9],
	{SKU].[Общий бренд].&[5],
			[SKU].[Общий бренд].&[11],
			[SKU].[Общий бренд].&[18]
		}	
	) ON 0 FROM PROFIT)
Есть сомнение: правильно ли я написал MDX-запрос? В функции TOPCOUNTY в контексте учитывается ли период, заданный в субкубе? Будто что то не учел.

Необходимо изменить ключ в измерении

$
0
0
Всем доброго времени суток.

Имеется MS SSAS куб (мультидименшен).

Две таблицы фактов, связанные через одно из измерений (факты и планы. Факты по 30 млн записей на день. Данные за последние 3 месяца+на последний день предыдущих месяцев).

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

В планах поле, через которое они соотносятся с фактами, заполнено конкретным значением (на данный момент пока двумя уникальными. В будущем могут добавиться и другие значения).

В фактах это поле вычисляется через CASE (если условие такое и такое, то значение одно, иначе - значение другое). Тут теоретически могут быть несколько условий на каждый вариант CASE'а, ну и, соответственно, как и для планов могут появиться новые значения).

Измерение делается простым юнионом: select value1 union select value2.

Тут вдруг бизнес сказал, что в планах мы переименовали одно из описанных значений. Было value1, стало value1111

Вопрос: реально ли внести такие изменения в проект куба (через правку XML на стороне MS SSAS), чтобы не пересчитывать куб?

Пересчет одного дня фактов занимает около 35 минут и связано это с х....новой прокачкой по сети.
Влияния на локалку отсутствует.
Отдельного сервера (или инстанса) для организации синхронизации нет (разместить еще один куб такого размера негде)

BI 2018 Gartner Quadrant


Книги по теме "Построение витрин данных"

$
0
0
Привет. Нужны книги на русском, для того чтобы быстро въехать в тему построения витрин данных.

Из того что удалось найти в интернете:
1. https://www.cfin.ru/itm/olap/cons.shtml
2. https://www.intuit.ru/studies/courses/599/455/info
3. http://elib.fa.ru/fbook/tochilkina_1827.pdf/download/tochilkina_1827.pdf
4. http://elar.urfu.ru/bitstream/10995/42412/1/978-5-7996-1827-8_2016.pdf

Если кто-то может добавить ссылок на литературу, буду признателен.

Power BI. Pivot

$
0
0
Доброго времени суток, уважаемые коллеги.

Подскажите, пож-та, начинаю изучать Power BI, есть задача представить данные определенного поля (Поле Офис в исходной таблице) в виде столбцов (Офис 1, Офис 2, Офис 3, Офис 4, Офис 5 во второй таблице) и заполнить их определенным образом.

Из таблицы ниже

Наименование Год Офис Признак
A1 2018 Офис1 Да
A2 2018 Офис2 Нет
A2 2018 Офис3 Да
A3 2018 Офис4 Да
A3 2018 Офис5 Да


нужно получить таблицу

Наименование Год Офис1 Офис2 Офис3 Офис4 Офис5
A12018Да
A22018НетДа
A32018ДаДа



Сломал голову как это сделать, не подскажите?

ssas: несвязанная мера

$
0
0
Всем доброго дня.
Создал измерение и две группы мер, для одной группы мер нет связи с измерением.
Когда "набрасываю" меру, которая связана с измерением то все отображается корректно, с учетом выставленных фильтров:

продолжение вопроса

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

SSAS 2016 Особенности разогрева кеша

$
0
0
Добрый день.

Конфигурация SSAS-сервера: Windows 2012R2, MS SQL 2016 Enterprise - на сервере работает только SSAS.

Наблюдается такой эффект:
1. первый коннект после перезагрузки сервера/процессинга пользователем из группы Администратор ОС и Администратор SSAS.
Время выполнения первого запроса (по сути процесс кеширования) - около 10 мин.
2. Далее, запросы от пользователей , имеющих аналогичные права, - выполняются быстро. Т.е. кеш используется.
3. При выполнении аналогичного запроса пользователем, не являющимся Администраторм ОС (либо рядовой пользователь, либо администратор SSAS) первый запрос выполняется теже 10 мин. Т.е. происходит разогрев кеша для этого пользователя. Далее запросы от этого пользователя выполняются быстро.
4. Подключение нового пользователя и аналогичный запрос - снова кеширование.

Т.е. выглядит это так, как будто кеш "персональный" или на кеше присутствуют "права доступа владельца".
Т.е. если ты админ на ОС, кеш читать можешь, а если ты не админ ОС, то можешь читать только "свой кеш".

Понимаю, что выдвинутая гипотеза выглядит как минимум странно, но внешне это выглядит именно так.
Есть мысли, куда копать?

Да, Все тоже самое, но на Windows 2008R2 и MS SQL 2008R2 - такого эффекта не замечал. Если кеш разогрелся, то его используют все пользователя.

Не изменяются партиции в OLAP кубе

$
0
0
Коллеги, нужен совет.
Есть OLAP куб (MOLAP) на SSAS 2014 Developer.
В кубе есть партиции на остове таблиц фактов. На каждую партицию по 1 таблице.
Я захотел дополнительно разбить некоторые уже созданные партиции на несколько, по годам.
Выбираю партицию в Partition source - table binding меняю на query binding-в условии WHERE прописываю YEAR(Date)=2019
Нажимаю Check и получаю ошибку что такой таблицы нет см. скриншот.
Почему так происходит? В DSV эта таблица есть.
Спасибо.

Не работает функция InStr

$
0
0
Здравствуйте!

Нужно выгрузить те элементы атрибута, которые содержат "Иванов".
+Так не выгружает
SELECT
{} ON 0,
FILTER(
	[Торговые точки].[Клиент].[Клиент],//.Members,
	INSTR(
		[Торговые точки].[Клиент].CurrrentMember.Name,
		'Иванов'				
		)>0
) ON 1
FROM
	PROFIT
+И так не выгружает
SELECT
{} ON 0,
FILTER(
	[Торговые точки].[Клиент].[Клиент].Members,
	INSTR(
		[Торговые точки].[Клиент].CurrrentMember.Properties('Nаme'),
		'Иванов'
		)>0
) ON 1
FROM
	PROFIT
+И тут также не выгружает
WITH
SET [Сет] AS
FILTER(
	[Торговые точки].[Клиент].[Клиент].Members AS C,
	VBA!InStr(
		1,
		C.CurrrentMember.Name,
		'Иванов'
	)>0
)
SELECT
	{}
ON 0,
	[Сет]
ON 1
FROM
	PROFIT
То есть по всем трем вариантам возвращает ноль строк.

Поисковый элемент в атрибуте присутствует.

Почему так? Как правильно написать? Может у функции InStr есть условия? Или это зависит от того, как в самом кубе прописано?

тюннинг перформанс

$
0
0
Коллеги, привет!
Напомните пожалуйста, в чем различия в производительности следующей пары запросов, благодарю!




--1 

With 
    set [DM OLAP REP666 CD PRODUCT LEVEL.PARAMETER NM2]  as 'Filter({[DM OLAP REP666 CD PRODUCT LEVEL].[PARAMETER NM].[PARAMETER NM].AllMembers}, StrComp( [DM OLAP REP666 CD PRODUCT LEVEL].[PARAMETER NM].currentmember.name,"ключ") = 0)'
set [Axis1Set] as '{[DM OLAP REP666 CD PRODUCT LEVEL.PARAMETER NM2]}'
  
  
select 
  {[Measures].[M F AUM BALANCE AMT]} on columns,
  NONEMPTY({[Axis1Set]},{[Measures].[M F AUM BALANCE AMT]}) on rows 
from 
  [XYZ]



--2
With 
  member [Measures].[PARAMETER NM - Member KeyAnc] as '([DM OLAP REP666 CD PRODUCT LEVEL].[PARAMETER NM].Currentmember).properties("MEMBER_UNIQUE_NAME") '
    set [DM OLAP REP666 CD PRODUCT LEVEL.PARAMETER NM2]  as '{[DM OLAP REP666 CD PRODUCT LEVEL].[PARAMETER NM].&[ключ]}'
set [Axis1Set] as '{[DM OLAP REP666 CD PRODUCT LEVEL.PARAMETER NM2]}'
  
select 
  {[Measures].[PARAMETER NM - Member KeyAnc],[Measures].[M F AUM BALANCE AMT]} on columns,
  NONEMPTY({[Axis1Set]},{[Measures].[M F AUM BALANCE AMT]}) on rows 
from 
  [XYZ]






* -> *

OBI12 показатель на прошлую неделю

$
0
0
Добрый день.
Есть задача, которая сейчас реализована через Direct SQL, как решить ее через репозиторий BI?

Описание.
в отчет необходимо вывести два столбца (показатель "количество продаж") за выбранный понедельник и за предыдущий понедельник.
Причем, если предыдущий понедельник находится в прошлом месяце (относительно выбранного понедельника), то количество продаж надо брать на последний день прошлого месяца.

Т.е. простая ситуация - если текущий понедельник 24,12,18, то предыдущий понедельник это 17,12,2018 и "количество продаж" надо брать на эти даты.
Сложная ситуация - текущий понедельник 03,12,2018, предыдущий понедельник - это 26,11,2018 и "количество продаж" предыдущего понедельника надо отобразить на 30,11,2018.

Можно такое проделать без прямых селектов?

Как лучше всего подружить Power BI с облачным сервисом Azure ML (R) ?

$
0
0
Посоветуйте кто как поэффективней дружит Power BI с Azure ML (через параметризированный Web API) в живом режиме (интерактивный пользователь)?

Ясно что по расписанию можно Azure Data Factory / ADF данные в dataset-ы прокачивать (и Power BI работает с Imported DataSet например),
а вот на живой сессии в зависимости от постоянно выбираемых параметров уже как-то проблемно клеится,
в on-perm SQL Server версии было просто - вызов значения колонны функциями через sp_execute_external_script,
что можно было нормальную аналитику в direct_query/ROLAP считать, а в облаке уже извращения начинаются..

можно ещё наверное с Azure Functions попробовать, но в DataBricks точно не хотелось-бы лезть,
по идее текущему проекту ещё доступно Azure Batch - но хватает других забот чтобы с этим ещё попаться.

Есть такая таблица по поддержке ML (R)
И интегрированная среда Azure SQL DataBase с R - но она пока в стадии Preview (пока только месяц с лишним),
а нам (по Agile-классике, будь она..) релиз в продакшн через пару месяцев сдавать
так что не дождёмся (а как выйдет в GA - потом скорее всего переделывать будем)

Похожая проблема с Power BI и Azure Data Lake - Там либо через прослойки типа Azure SQL Data Base / Data Warehouse
или файлами (Data Lake Storage), т.е. с U-SQL запросами напрямую не очень получится :\

Egeria: новый многомерный табличный процессор

$
0
0
Здравствуйте!
Я разработчик и последние пару лет в свободное время работал над созданием многомерного табличного процессора (нечто среднее между Excel и Cognos TM1).

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

Демо системы можно найти на сайте https://egeria.rocks (egeria "точка" rocks). Я бы рекомендовал посмотреть короткие вводные видеоролики (к сожалению пока все только на английском), поскольку там все немного сложнее, чем в Excel.

Заранее спасибо за ваше мнение.

P.S. Если есть интерес в использовании системы, я мог бы провести демо через скайп и помочь с созданием ваших моделей.

Запрос MDX выборка элементов иерархии

$
0
0
Добрый день!
В кубе создана иерархия родитель-потомок( уровни формируются автоматически). Необходимо достать данные из куба по средствам MDX запроса. И вот не могу разбить уровни иерархии по колонкам.

  SELECT non empty ( [Measures].[Actual] ) on columns,
  non empty {([Com_TradeChannel для рассылки].[Com_TradeChannel для рассылки].[Level 02].MEMBERS,
  [Com_TradeChannel для рассылки].[Com_TradeChannel для рассылки].[Level 03].MEMBERS)}
   ON rows FROM [ComEx REP]


Данный запрос выдает ошибку: Query (2, 14) В функции Crossjoin иерархия Com_TradeChannel для рассылки используется более одного раза.

  SELECT non empty ( [Measures].[Actual] ) on columns,
  non empty {[Com_TradeChannel для рассылки].[Com_TradeChannel для рассылки].[Level 02].members,
  [Com_TradeChannel для рассылки].[Com_TradeChannel для рассылки].[Level 03].members}
   ON rows FROM [ComEx REP]


А такой запрос выдает результат, но все элементы выводит в одной колонке.
Viewing all 1167 articles
Browse latest View live