В прошлом я успешно подключал PBI к многомерным кубам без проблем. Чтобы убедиться в этом, я запустил PBI Desktop, чтобы проверить это. К моему удивлению, я столкнулся с той же проблемой. Я также хотел поделиться своим опытом.
Подключения:
Я пытался подключить PBI Desktop to my SSAS instance on Server 'GCOD039'
, DEV-сервер . К моему удивлению, я получил сообщение об ошибке (такое же сообщение об ошибке, как OP). В шоке я попытался подключить PBI Desktop to SSAS on Server 'GCOP039'
, PROD Server . Соединение 'GCOP039' установлено успешно. Затем я попытался Excel connection to 'GCOD039'
... это прекрасно работает. Итак, почему PBI не подключается?
Я представил этот сценарий своему коллеге (администратору SSAS), он проверил соединение на своем ПК с GCDO039, и оно сработало для него. Он предложил мне перезагрузить компьютер. Я сделал, и мое соединение с «GCOD039» все еще не удалось. В настоящее время мы оба в тупике.
Я работаю, чтобы найти ответ на вопрос, что может вызвать это ...
Видя Ваше редактирование, я думаю, что Вашим выяснением о является Сопоставление с образцом.
И отвечать на Ваш вопрос: Да, что-либо, что можно создать, можно также 'вскрыть противоречия' в использовании конструкторов. Например, Вы, вероятно, знакомы с этой формой сопоставления с образцом:
head :: [a] -> a
head (x:xs) = x
head [] = error "Can't take head of empty list"
Однако существует больше мест, где можно использовать сопоставление с образцом, другие действительные нотации:
head xs = case xs of
(y:ys) -> y
[] -> error "Can't take head of empty list"
head xs = let (y:ys) = xs
in y
head xs = y
where
(y:ys) = xs
Обратите внимание, что последние два примера несколько отличаются сначала от того, потому что они дают различные сообщения об ошибках, когда Вы называете их с пустым списком.
Хотя эти примеры характерны для списков, можно сделать то же с другими типами данных, как так:
first :: (a, b) -> a
first tuple = x
where
(x, y) = tuple
second :: (a, b) -> b
second tuple = let (x, y) = tuple
in y
fromJust :: Maybe a -> a
fromJust ma = x
where
(Just x) = ma
Снова, последняя функция также откажет при вызове ее с Nothing
.
Подводя итоги; если можно создать что-то с помощью конструкторов (как (:)
и []
для списков, или (,)
для кортежей, или Nothing
и Just
для, Возможно), можно использовать тех тех же конструкторов, чтобы сделать сопоставление с образцом во множестве путей.
Другим способом посмотреть на него является тот код как это
x where x = 3
примерно эквивалентно
let x = 3 in x
Действительно ли я прав относительно этого поведения?
Да. Имена существуют только в блоке, где Вы определили их, все же. В Вашем случае это означает логическую единицу что Ваш where
к пункту относятся, т.е. выражение внутри fList
.
Да, Вы правы. Имена связали в, где пункт видим к полному объявлению, предшествующему где пункт. В Вашем случае те имена f
и bar
.
(Одна из твердых вещей об изучении Haskell - то, что оно только разрешено, но распространено для использования переменных в исходном коде в местоположениях, которые предшествуют местоположениям, где те переменные определяются.)
Место для чтения больше о том, где пункты находится в Отчете о Haskell 98 или в одном из многих прекрасных учебных руководств, которые будут найдены в haskell.org
.