Показать элементы без данных в строках | SSAS, MDX - PullRequest
0 голосов
/ 16 января 2019

Работа над задачей, требующей переноса всех данных измерения в сводную таблицу (лист Excel), даже если они не связаны с фактом.

Сначала я смог сделать это, используя опцию «Параметры сводной таблицы» -> «Показать» -> «Показывать элементы без данных в строках» из Excel. Проблема здесь заключается в том, что использование этого параметра повлияет на другие измерения, и требование состоит в том, чтобы эта работа выполнялась только для измерения «Студент», а пользователь не хочет каждый раз изменять значение параметра. затем я нашел это решение, используя SCOPE, ниже, но точно так же, как и выше, я не смог найти место, где бы область просто игнорировала логику, если добавлено какое-либо другое измерение, чтобы данные не дублировались.

SCOPE ([Program].[Program Hierarchy].MEMBERS, [Measures].[Number of Students]); 
THIS = IIF(ISEMPTY([Measures].[Number of Students]), 0, ([Measures].[Number of Students])); 
END SCOPE; 

Так есть ли что-то, что я мог бы добавить выше ОБЛАСТЬ, чтобы просто работать в измерении программы и получить игнорирование / пропуск и работать как обычно, если любое другое измерение добавлено в сводную таблицу?

Любое предложение будет оценено.

1 Ответ

0 голосов
/ 16 января 2019

Предположим, что для 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]

Результат без не пустых enter image description here

Теперь давайте добавим еще одно измерение к запросу. Обратите внимание, что нулевое значение для первой строки (шорты 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]

Результат enter image description here

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

В приведенном ниже запросе у меня есть два кортежа 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]

Результат:

enter image description here

...