2013-03-11 2 views
4

enter image description hereсилы поворота отношения многие ко многим между двумя таблицами

Как вы можете видеть на картинке у меня есть один-ко-многим корабль между этими двумя таблицами. НО я хочу сделать так, чтобы это было много-ко многим. Я использую AssetID в качестве ключа для этих отношений. Любые идеи о том, как я мог бы создать это?

Причина, по которой это нужно как много-ко-многим, поскольку они используют это в powerview и используют заголовки столбцов в качестве ползунков. Например, если бы я должен был выбрать Windows 7 в слайдере tblOperatingSystem, то ползунок, который я использую для tblAssets, будет отображать только то, что имеет отношение к окнам 7, где, поскольку я хочу иметь возможность делать обратное и выбирать в tblAssets silder и будет отображаться только ОС, которая имеет значение в слайдере tblOperatingSystem

Я уже пытался создать новую таблицу, которая имеет только AssetID, а затем подключить к нему tblAssets и tblOperatingSystem, но этот метод не работает для ползунков.

Любые идеи вокруг этого?

+1

Не возражаете поделиться с нами, по крайней мере, важной частью ваших усилий - только в поддержку [Что вы пробовали?] (Http://whathaveyoutried.com/) –

+0

Можете ли вы добавить поля, от tblOperatingsystem до tblAssets в качестве вычисленных столбцов, используя выражение DAX, подобное '= related (tblOperatingsystem [OSID])'? – dnlbrky

ответ

1

Если я правильно понимаю проблему, это ограничивает ограничение PowerPivot (и табличной модели SSAS), в котором он не может правильно моделировать отношения «многие ко многим». Отношения могут применяться в одном направлении (как вы можете видеть в слайдере ОС), но не работают в другом направлении.

Способ, которым мне удалось обойти это в PowerPivot/PowerView в прошлом, - создать дополнительную, ненормированную таблицу, которая содержит все возможные комбинации ОС и Asset, с новым столбцом идентификации (или конкатенация OSID и AssetID) в качестве ключа. Настройте отношения «один ко многим» на tblOperatingSystem и tblAsset по мере необходимости.

Ключевой частью этого является включение столбцов данных здесь, используя функции DAX для заполнения значений. Затем вы можете использовать эту новую ненормированную таблицу в качестве источника для обоих ваших слайдеров (и скрыть оригиналы от клиента), которые будут автоматически фильтровать друг друга при выборе одного из них.

Example de-normalised table

Теперь, это не очень эффективным, поскольку есть много дублирования, так что если кто-то может предложить другой способ достижения этой цели, мне было бы интересно услышать это сам! Просто остерегайтесь использовать это с действительно большими моделями данных, так как это может замедлить работу.

В качестве альтернативы, я наткнулся на this article (который содержит хорошие ссылки на похожие посты Марко Руссо и Альберто Феррари), но я не пробовал, так что я не уверен, насколько хорошо он играет с PowerView, т.к. обе исходные статьи, предваряемые PV.

0

PowerPivot не поддерживает моделирование отношений «многие ко многим» nativly, но вы можете эмулировать его с помощью DAX. Все, что вам нужно сделать, это включить в список мер, связанных с таблицами «многие-ко-многим» в вашей статистике расчета.Например (из http://gbrueckl.wordpress.com/2012/05/08/resolving-many-to-many-relationships-leveraging-dax-cross-table-filtering/) дали схему как:

enter image description here

Затем написать меру на столе аудитории, которая подсчитывает количество строк, но принимает во внимание фильтрацию таблицы Targets можно было бы написать:

RowCount_M2M:=CALCULATE(
    [RowCount], 
    'Individuals', 
    'TargetsForIndividuals', 
    'Targets') 

Перечислив другие таблицы, их контексты фильтра будут перекрываться, и вы получите соединение, которое вы ищете.

Смежные вопросы