Подсчет количества фактов в ячейке в MDX - PullRequest
0 голосов
/ 28 февраля 2020

Вот простая схема с двумя измерениями и фактом с мерой.

CREATE TABLE DimThingType (
    ThingTypeID          int        NOT NULL PRIMARY KEY,
    ThingTypeDescription varchar(8) NOT NULL
)

CREATE TABLE DimThing (
    ThingID   int        NOT NULL PRIMARY KEY,
    ThingName varchar(8) NOT NULL
)

CREATE FactFacts (
    FactID      int NOT NULL PRIMARY KEY,
    ThingID     int NOT NULL,
    ThingTypeID int NOT NULL,
    Turnips     int NOT NULL
)

Теперь в MDX мы можем суммировать количество репы для каждого типа вещи .

SELECT 
    NON EMPTY { [Measures].[Trunips] } ON COLUMNS, 
    NON EMPTY { ([ThingType].MEMBERS) } ON ROWS 
FROM [Things]

Теперь, если в этой группе мер я создаю новую меру с именем [Count of Facts] со свойством Source.[Binding Type], установленным на [Row binding] и AggregateFunction, установленным на Count, тогда я могу также подсчитайте количество вещей каждого типа вещи .

SELECT 
    NON EMPTY { [Measures].[Trunips], [Measures].[Count of Facts] } ON COLUMNS, 
    NON EMPTY { ([ThingType].MEMBERS) } ON ROWS 
FROM [Incidents] 

Действительно ли мне нужно добавить эту новую меру? Число - это число фактов, которые использовались при вычислении значения в ячейке результата, поэтому я не могу получить это с помощью запроса? (Если бы мы группировали в SQL, то это было бы просто COUNT(*).)

Я абсолютно не могу заставить что-либо работать!

1 Ответ

2 голосов
/ 28 февраля 2020

Да, вам нужно было бы добавить новую меру (хотя их альтернатива тоже). Куб хранит значения фактов в N-мерной ячейке во время обработки. Таким образом, при запросе вы можете получить только то, что было сохранено. В отличие от sql куб не будет суммировать его во время выполнения. Он просто извлечет значение в этой ячейке.

Подробнее о том, как ваш запрос разрешен, читайте в статье.

SELECT 
    NON EMPTY { [Measures].[Trunips] } ON COLUMNS, 
    NON EMPTY { ([ThingType].MEMBERS) } ON ROWS  FROM [Things]

Запрос MDX разрешается по адресу N-мерной плоскости. В приведенном выше случае у вас есть два измерения, поэтому это адрес двухмерной плоскости.

Теперь вы проигнорировали одно измерение, а для второго измерения вы использовали все его возможные значения.

Таким образом, адрес ({d1:dn},{All},{Turnips}). Он читается как «Все значения первого измерения перечислены без группировки», «Все значения второго измерения сгруппированы», для этой ячейки возвращается «Измерить репу». Теперь в этой ячейке нет меры подсчета.

...