2016-11-10 6 views
0

Я пытаюсь написать запрос MDX, чтобы вернуть некоторую информацию об условиях опроса. Я хочу, чтобы в моих результатах был средний ответ и итоговые ответы. У меня есть два типа вопросов. Один тип вопроса имеет один ответ. Другой тип вопроса может содержать несколько ответов (выберите все, что применимо). Каждый вопрос связан с идентификатором вопроса и идентификатором респондента. Следующий запрос работает (несколько)Как получить количество отличительных значений размера в запросе SSAS MDX

Select NON EMPTY 
    { 
    [Measures].[Average Response], [Measures].[Total Count] 
    } ON 0 
, NON EMPTY 
    { 
    ([Question].[Question ID].[Question ID].ALLMEMBERS) 
    } ON 1 
From [Cube] 

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

[Measures].[Average Response], [Measures].[Total Count], DISTINCTCOUNT([Respondent].[Respondent ID]) 

Ну, это не работает, и я действительно этого не ожидал. Я получил «Функция ожидает выражения набора кортежей для аргумента 3. Используется строковое или числовое выражение»., который быстро становится моим любимым сообщением об ошибке SSAS. Я все еще зеленый, и я думаю, что я все еще думаю о SQL. Как я могу получить среднее количество ответов и количество отдельных значений измерения в одном запросе. BTW, у моего запроса есть slicer, и я мог бы предоставить это, если это необходимо, но я не думаю, что это имеет значение, поскольку я получаю те же проблемы с или без slicer.

ответ

0

При работе с функцией MDX DistinctCount он возвращает счетчик различных, непустых кортежей заданного набора данных. Может быть, попробовать сделать что-то вроде

DistinctCount({[Respondent].[Respondent ID].members * [Measures].[Total Count]})

так что, как вы работаете с набором (например {...}) данных.

Если вы работаете с большим набором данных, вы можете захотеть создать показатель «Разный счетчик». Сама функция DistinctCount является запросом на запрос формулы SSAS, а использование Distinct Count measure позволит аналитическим службам использовать как механизм хранения, так и двигатель формулы. Для получения дополнительной информации см. Analysis Services Distinct Count Optimization.

+0

Я пробовал то, что вы положили, и я получаю мое любимое сообщение _ «Функция ожидает выражения набора кортежей для аргумента 1. Было использовано строковое или числовое выражение». _ Также, если я попытаюсь использовать его вместе со средним Я получаю _ «Члены, кортежи или наборы должны использовать одни и те же иерархии в функции». _ Отвратительная часть - я точно знаю, как это сделать в SQL. –

+0

Я могу сопереживать - я до сих пор довольно паршиво отношусь к MDX и уже много лет занимаюсь SSAS ;-). Говоря об этом, когда вы запускаете функцию 'distinctcount', что происходит, когда вы вручную создаете набор, например. 'с установкой myset как '{[Ответчик]. [Идентификатор респондента]. & [Q1], [Ответчик]. [Идентификатор респондента]. & [Q2], [Ответчик]. [Идентификатор респондента]. & [Q3]}' '(обновите участников вопроса в зависимости от ситуации) и посмотрите, сможете ли вы вернуть ответ? –