Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Вопрос. Строка подключения  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
Здравствуйте!

На компе установлен Microsoft SQL Server Express 2012.

Есть SQL-запрос, который обращается к OLAP. Не обращайте внимание на то, что запрос делается к SSAS. Запрос примитивен, для примера.
+SQL-запрос
USE SM

GO

	SELECT		
		CAST(F1."[Города].[Город].[Город].[MEMBER_CAPTION]" AS NVARCHAR(50))AS [Город],
		CAST(F1."[Measures].[Отгрузки шт]" AS DECIMAL (12,0)) AS [Отгрузки шт]
	FROM OPENROWSET(
		'MSOLAP',
		'Provider=MSOLAP.3;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=profit;Data Source=xxx.yyy.ru;MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error',
		'SELECT
			[Measures].[Отгрузки шт]
		ON 0,
			[Города].[Город].[Город]
		ON 1
		FROM 
			(SELECT [Время].[Месяц].&[2018-05-01T00:00:00] ON 0 FROM PROFIT)'
				) AS F1
Нужно этот запрос запускать из Excel и выводить на результат.

Если запустить SQL-запрос с OPENROWSET, то результат запроса будет выложен на лист в качестве умной таблицы и в строке подключения будет такая запись:
Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=SM;Data Source=...\SQLEXPRESS;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=...;Use Encryption for Data=False;Tag with column collation when possible=False

Скажите, какая должна быть запись, чтобы этот запрос запускался у других пользователей? У других пользователей есть доступ к OLAP. Ведь запрос запускался через локальный сервер ...\SQLEXPRESS. Можно ли как то обойти название сервера в строке подключения?

К сообщению приложен файл. Размер - 42Kb
20 июн 18, 14:05    [21506712]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос. Строка подключения  [new]
komrad
Member

Откуда:
Сообщений: 5244
ferzmikk,
если Вы так хотите пропускать всех пользователей через ваш сиквел, то смотри ниже:
1) в строке подключения указать вместо ... имя вашего хоста
2) включить протокол TCP для вашего сиквела (у Экспресса он выключен по умолчанию)
3) рестартовать сиквел и проверить, что он слушает по сети (сейчас у вас все подключения локальные)
4) проверить доступ "других пользователей" к вашему серверу и базе (доступ отсутствует, вероятнее всего)
5) выдать необходимые права на уровне сервера и базы
6) если OLAP находится на другом хосте, столкнуться с проблемой KERBEROS authentication & delegation и мужественно её решить

это на вскидку
20 июн 18, 14:22    [21506776]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос. Строка подключения  [new]
komrad
Member

Откуда:
Сообщений: 5244
komrad
ferzmikk,
3) рестартовать сиквел и проверить, что он слушает по сети (сейчас у вас все подключения локальные)


тут еще проверить не активен ли на хосте firewall и, при необходимости, "прокопать" нужные дырки для сиквела и SQL Browser
20 июн 18, 14:31    [21506807]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос. Строка подключения  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
komrad
если Вы так хотите пропускать всех пользователей через ваш сиквел, то смотри ниже:
Я правильно понимаю, что предложенный Вами вариант подразумевает, что другие пользователи из своих excel-их файлов с помощью обновления отправляют sql-запросы к моему компу?
20 июн 18, 14:41    [21506836]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос. Строка подключения  [new]
komrad
Member

Откуда:
Сообщений: 5244
ferzmikk
komrad
если Вы так хотите пропускать всех пользователей через ваш сиквел, то смотри ниже:
Я правильно понимаю, что предложенный Вами вариант подразумевает, что другие пользователи из своих excel-их файлов с помощью обновления отправляют sql-запросы к моему компу?

Я принял это за вводные данные в вопросе

ferzmikk
Если запустить SQL-запрос с OPENROWSET, то результат запроса будет выложен на лист в качестве умной таблицы и в строке подключения будет такая запись:
Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=SM;Data Source=...\SQLEXPRESS;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=...;Use Encryption for Data=False;Tag with column collation when possible=False

Скажите, какая должна быть запись, чтобы этот запрос запускался у других пользователей? У других пользователей есть доступ к OLAP. Ведь запрос запускался через локальный сервер ...\SQLEXPRESS. Можно ли как то обойти название сервера в строке подключения?


Вы используете локальный сиквел для доступа в ОЛАП базу (Openrowset).
Другие пользователи либо напрямую к ОЛАП-у подсоединяются, либо так же как и Вы.
В втором случае, через какой сиквел они должны это делать?
20 июн 18, 14:49    [21506875]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос. Строка подключения  [new]
komrad
Member

Откуда:
Сообщений: 5244
ferzmikk
Можно ли как то обойти название сервера в строке подключения?


для подключения напрямую к OLAP используйте следующие строки подключения :
https://www.connectionstrings.com/olap-analysis-services/
20 июн 18, 14:56    [21506932]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос. Строка подключения  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
komrad
Вы используете локальный сиквел для доступа в ОЛАП базу (Openrowset).
Другие пользователи либо напрямую к ОЛАП-у подсоединяются, либо так же как и Вы.
В втором случае, через какой сиквел они должны это делать?
Я правильно понимаю, что у них должен быть доступ к некому SQL-серверу, чтобы через него запускать SQL?
20 июн 18, 14:59    [21506960]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос. Строка подключения  [new]
komrad
Member

Откуда:
Сообщений: 5244
ferzmikk
komrad
Вы используете локальный сиквел для доступа в ОЛАП базу (Openrowset).
Другие пользователи либо напрямую к ОЛАП-у подсоединяются, либо так же как и Вы.
В втором случае, через какой сиквел они должны это делать?
Я правильно понимаю, что у них должен быть доступ к некому SQL-серверу, чтобы через него запускать SQL?

тут два варианта:
1) с сиквелом посередине (между пользователем и OLAP) и, тогда ДА + запрос не меняется
2) без сиквела посередине (прямое подключение к OLAP) и, тогда, НЕТ + запрос надо изменять
20 июн 18, 15:05    [21507005]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос. Строка подключения  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
komrad
для подключения напрямую к OLAP используйте следующие строки подключения :
https://www.connectionstrings.com/olap-analysis-services/
komrad
тут два варианта:
1) с сиквелом посередине (между пользователем и OLAP) и, тогда ДА + запрос не меняется
2) без сиквела посередине (прямое подключение к OLAP) и, тогда, НЕТ + запрос надо изменять
Прямое подключение к OLAP Вы имеете ввиду MDX-запрос?

+Хотя в самом SQL используется такое подключение к OLAP.
USE SM

GO

	SELECT		
		CAST(F1."[Города].[Город].[Город].[MEMBER_CAPTION]" AS NVARCHAR(50))AS [Город],
		CAST(F1."[Measures].[Отгрузки шт]" AS DECIMAL (12,0)) AS [Отгрузки шт]
	FROM OPENROWSET(
		'MSOLAP',
		'Provider=MSOLAP.3;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=profit;Data Source=xxx.yyy.ru;MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error',
		'SELECT
			[Measures].[Отгрузки шт]
		ON 0,
			[Города].[Город].[Город]
		ON 1
		FROM 
			(SELECT [Время].[Месяц].&[2018-05-01T00:00:00] ON 0 FROM PROFIT)'
				) AS F1
20 июн 18, 15:27    [21507081]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос. Строка подключения  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
+ SQL-запрос, который запускается из excel
USE SM

GO

	SELECT		
		CAST(F1."[Города].[Город].[Город].[MEMBER_CAPTION]" AS NVARCHAR(50))AS [Город],
		CAST(F1."[Measures].[Отгрузки шт]" AS DECIMAL (12,0)) AS [Отгрузки шт]
	FROM OPENROWSET(
		'MSOLAP',
		'Provider=MSOLAP.3;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=profit;Data Source=xxx.yyy.ru;MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error',
		'SELECT
			[Measures].[Отгрузки шт]
		ON 0,
			[Города].[Город].[Город]
		ON 1
		FROM 
			(SELECT [Время].[Месяц].&[2018-05-01T00:00:00] ON 0 FROM PROFIT)'
				) AS F1
+SQL-запрос, который не запускается из excel, но запускается из студии
//USE SM

//GO

if exists (SELECT * FROM tempdb.dbo.sysobjects o WHERE o.xtype in ('U') AND o.id = object_id(N'tempdb..#Выгрузка')) BEGIN DROP TABLE #Выгрузка; END;

DECLARE @TabletableOfNovelties table ([Код продукции] nvarchar(50));
INSERT INTO @TabletableOfNovelties VALUES ('11801'), ('11745'), ('11800'), ('11731'), ('11747'), ('11754');

WITH
	ТаблицаИзOLAP1 AS (
            CAST(F1."[Продукция].[Код продукции].[Код продукции].[MEMBER_CAPTION]" AS NVARCHAR(20)) AS [Код продукции],
        ...	
	FROM OPENROWSET(
		'MSOLAP',
		'Provider=MSOLAP.3;...',
		'SELECT
			...'
				) AS F1
	),

	ТаблицаИзOLAP2 AS (
	SELECT
		F1."[Measures].[Отгрузки шт]" AS [Отгрузки шт],
		...	
	FROM OPENROWSET(
		'MSOLAP',
		'Provider=MSOLAP.3...',
		'SELECT
			...') AS F1
	),

Список AS (
	SELECT DISTINCT
        ...	
		FROM
			ТаблицаИзOLAP2),

Выгрузка AS (
SELECT	
	...
)
Select * INTO #Выгрузка FROM Выгрузка
CREATE /*CLUSTERED*/ INDEX i1 ON #Выгрузка([Поле1], [Поле2], [Поле3], [Поле4], [Поле5]); 

WITH
Выгрузка2 AS (
	SELECT
		...
),

Выгрузка3 AS (
	SELECT
		...
),

Выгрузка4 AS (
	SELECT
		...
	FROM
		Выгрузка3 Таб1
	OUTER APPLY
		...) Таб2
)
SELECT
	*
FROM
	Выгрузка4
ORDER BY
	[Город],
	[Клиент],
	[Код ТТ]	

DROP table #Выгрузка;
Появляется сообщение об ошибке. См. скриншот

Почему не запускается?

К сообщению приложен файл. Размер - 42Kb
21 июн 18, 15:53    [21510086]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос. Строка подключения  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
Может из за временной таблицы?
21 июн 18, 15:58    [21510106]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос. Строка подключения  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
Провожу эксперимент. Если запустить SQL-запрос без выделенного кода в Excel, то работает. Если с выделенным кодом, то не работает, а в студии работает.
+SQL-запрос
DECLARE @TabletableOfNovelties table ([Код продукции] nvarchar(50));
INSERT INTO @TabletableOfNovelties VALUES ('11801'), ('11745'), ('11800'), ('11731'), ('11747'), ('11754');

WITH
	ТаблицаИзOLAP1 AS (
            CAST(F1."[Продукция].[Код продукции].[Код продукции].[MEMBER_CAPTION]" AS NVARCHAR(20)) AS [Код продукции],
        ...	
	FROM OPENROWSET(
		'MSOLAP',
		'Provider=MSOLAP.3;...',
		'SELECT
			...'
				) AS F1
	)
SELECT * FROM ТаблицаИзOLAP1
Почему не работает? Как правильно написать?
22 июн 18, 07:13    [21511464]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос. Строка подключения  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
ferzmikk
Почему не работает? Как правильно написать?
Это ограничение в Excel? Или в коде надо что то дописать?
22 июн 18, 10:41    [21512107]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос. Строка подключения  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
плин нафига такой изврат то ? Пивот тейбл прекрастно у мееет браузить кубы в екселе,зачем вы страдаете таким - непонятно. А ваши две агрегации ето просто calculated member в кубе
22 июн 18, 10:45    [21512134]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос. Строка подключения  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
Maxx
плин нафига такой изврат то ? Пивот тейбл прекрастно у мееет браузить кубы в екселе,зачем вы страдаете таким - непонятно. А ваши две агрегации ето просто calculated member в кубе
Потому что, выгружаются две таблицы из OLAP, плюс третья таблица справочная, которая сидит как Declare table в SQL, потом идет обработка данных так как надо. Pivot table так не может. Приходится таким способом идти.
22 июн 18, 10:52    [21512194]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос. Строка подключения  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
плин ну так сделайте процедуру на скл которая вренет вам нужній рекорсед и візівайте ее из екселя
хотя что мешает из вашей декларе таблиці сделать еще один дименшин ,лично мне не понятно
22 июн 18, 10:59    [21512226]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос. Строка подключения  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
Maxx
плин ну так сделайте процедуру на скл которая вренет вам нужній рекорсед и візівайте ее из екселя
Создал процедуру. В студии работает, вот из экселя также не работает.

Почему не работает?

К сообщению приложен файл. Размер - 53Kb
22 июн 18, 12:00    [21512540]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос. Строка подключения  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
а шо говорит то ?
22 июн 18, 12:32    [21512723]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос. Строка подключения  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Шось таке
22 июн 18, 12:33    [21512729]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос. Строка подключения  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Maxx,

чи таке
22 июн 18, 12:35    [21512739]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос. Строка подключения  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
Maxx
а шо говорит то ?
21510086
22 июн 18, 12:35    [21512741]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос. Строка подключения  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
ferzmikk
Maxx
а шо говорит то ?
21510086

а он вообще выполнять что-то пытаеться ?? Профайлер что говорит , да и гляньте ссыки
22 июн 18, 12:37    [21512752]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос. Строка подключения  [new]
ferzmikk
Member

Откуда:
Сообщений: 2059
Maxx
Maxx,

чи таке
Не рабочая ссылка
22 июн 18, 12:38    [21512757]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос. Строка подключения  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
скриншот показать ? ссылоки :))
https://www.sqlservercentral.com/Forums/Topic1483454-2799-1.aspx
22 июн 18, 12:39    [21512763]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос. Строка подключения  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
по шагам (тока шо проверил)
1. datasource MSSQL
2. Прописывате все /(только даст выбрать таблицу или вью,выбераейте что удобнее)
3. Открываете проперти конекшина ,меняете ти на СКЛ ,команд на exec ваша_схема.ваша_процедура

работает
22 июн 18, 12:51    [21512813]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить