Показать элементы без данных в строках | SSAS, MDX

Инъекция зависимостей (DI) является частью практики принципа инверсии зависимостей (DIP), которая также называется Inversion of Control (IoC). В основном вам нужно сделать DIP, потому что вы хотите сделать свой код более модульным и единым тестируемым, а не только одной монолитной системой. Итак, вы начинаете идентифицировать части кода, которые можно отделить от класса и отвлечь. Теперь выполнение абстракции нужно вводить извне класса. Обычно это можно сделать с помощью конструктора. Таким образом, вы создаете конструктор, который принимает абстракцию как параметр, и это называется инъекцией зависимостей (через конструктор). Для получения дополнительных пояснений о контейнере DIP, DI и IoC вы можете прочитать Здесь

1
задан MoazRub 29 March 2019 в 04:00
поделиться

1 ответ

Предположим, что для Dimension1, attribute1 и атрибута «Значение 1» у вас ничего не было в Fact, поэтому это исключено из результата, теперь вы заставили 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

0
ответ дан MoazRub 29 March 2019 в 04:00
поделиться