Предположим, что для Dimension1, attribute1 и атрибута «Значение 1» у вас не было ничего в самом деле, поэтому это исключено из результата, теперь вы заставили Excel отобразить его, выбрав опцию. Когда вы добавляете атрибут другого измерения, скажем, Dimension2.Attribute1, так как «Value 1» не имеет ничего в Fact, поэтому Cube не поймет, какое значение Dimension2.Attribute1 должно отображаться перед Dimension1.Attribute1, поэтому он будет отображать все его значения. Таким образом, если у нас есть 3 значения в Dimension2, атрибут 1, тогда «Значение 1» будет повторяться три раза. Теперь с помощью Excel вы не можете решить эту проблему, однако можно просто написать работающий запрос MDX.
Редактировать: добавлен запрос.
Приведенный ниже пример запроса основан на AdventureWorks, первый пример показывает, что в результате есть несколько нулей, если я откомментирую «непустые» все нулевые значения исчезнут, попробуйте это.
select [Measures].[Internet Sales Amount] on columns,
--non empty
[Product].[Subcategory].[Subcategory]
on rows
from
[Adventure Works]
Результат без не пустых
Теперь давайте добавим еще одно измерение к запросу. Обратите внимание, что нулевое значение для первой строки (шорты Bib) теперь повторяется для всех значений второго измерения, поскольку куб не может определить, какое значение отображать.
select [Measures].[Internet Sales Amount] on columns,
--non empty
([Product].[Subcategory].[Subcategory],[Date].[Calendar Quarter of Year].[Calendar Quarter of Year])
on rows
from
[Adventure Works]
Результат
Теперь приведенный выше результат показывает проблему, с которой вы столкнулись. Теперь нам нужно всякий раз, когда есть нулевое значение, нам не нужны отдельные элементы второго измерения, а заполнитель для удовлетворения кортежа.
В приведенном ниже запросе у меня есть два кортежа
1) для ненулевых точек данных. Здесь мы отображаем фактический член второго измерения.
2) для нулевых точек данных здесь мы используем «.defaultmember», что в основном означает, что второе измерение будет вести себя так, как оно никогда не было выбрано. Присмотритесь ко второму измерению: «Весь период»
select [Measures].[Internet Sales Amount] on columns,
--non empty
{filter(([Product].[Subcategory].[Subcategory],[Date].[Calendar Quarter of Year].[Calendar Quarter of Year]),[Measures].[Internet Sales Amount]>0),
filter(([Product].[Subcategory].[Subcategory],[Date].[Calendar Quarter of Year].defaultmember),[Measures].[Internet Sales Amount]=null)
}
on rows
from
[Adventure Works]
Результат: