#sql-server #ssas #mdx
#sql-server #ssas #многомерное число
Вопрос:
В службах SQL Server Analysis Services я создал куб для анализа спортивных игр. Таблица фактов содержит информацию об игре, такую как Date, HomeTeamId, AwayTeamId, HomeTeamResult, AwayTeamResult и т.д.
Для двух команд (HomeTeamId и AwayTeamId) я создал отношение «многие ко многим», как описано здесь: https://learn.microsoft.com/en-us/sql/analysis-services/lesson-5-3-defining-a-many-to-many-relationship
В настоящее время я могу запрашивать игры, в которые играет команда, с помощью этого многомерного запроса:
SELECT { [Measures].[Game Count] } ON 0,
{[Team].[Team Id].[Team Id]} ON 1
FROM [Apps Swiss Ice Hockey]
это возвращает результат:
--------- ------------
| Team Id | Game Count |
--------- ------------
| 1 | 27 |
| 2 | 21 |
| 3 | 34 |
--------- ------------
пока все хорошо.
Теперь я хочу создать запрос для анализа количества сыгранных игр для всех возможных командных пар. Результат должен выглядеть примерно так:
----------- ----------- ------------
| Team 1 Id | Team 2 Id | Game Count |
----------- ----------- ------------
| 1 | 2 | 7 |
| 1 | 3 | 20 |
| 2 | 3 | 14 |
----------- ----------- ------------
Я попытался получить этот результат, скрестив измерение team следующим образом:
SELECT { [Measures].[Game Count] } ON 0,
{[Team].[Team Id].[Team Id]} * {[Team].[Team Id].[Team Id]} ON 1
FROM [Apps Swiss Ice Hockey]
но это приводит к ошибке:
Иерархия идентификаторов команды используется более одного раза в функции перекрестного соединения.
Возможно ли достичь описанного результата с помощью многомерного запроса?
Ответ №1:
Вы не можете перекрестно соединить одну и ту же иерархию, вы можете только создать другую иерархию (такую же, как существующая) того же измерения Team, и тогда вы сможете использовать функцию перекрестного соединения.
Crossjoin(
{[Team Dimension].[Team Hierarchy 1].members}
,{[Team Dimension].[Team Hierarchy 2].members}
)
Комментарии:
1. Спасибо! выглядит многообещающе, теперь я могу перекрестно соединить измерение team, но в результате я всегда получаю одно и то же значение в столбцах «Идентификатор команды 1» и «Идентификатор команды 2». Есть ли что-нибудь еще, что мне нужно сделать?
2. Я думаю, вам следует создать одну иерархию над HomeTeamId и другую иерархию над AwayTeamId, а затем соединить их. Возможно, теперь обе иерархии просматривают один и тот же столбец (скажем, HomeTeamId), и у вас нет никакой другой комбинации, кроме комбинаций, где оба значения равны.