Как я могу включить NULL в подсчет сводной таблицы через SSAS?

У меня есть представление, которое объединяет заказы с данными веб-отслеживания, которые используются в качестве таблицы фактов. У меня много нулей, потому что для заказов требуется некоторое время для получения информации веб-отслеживания. Как вы можете видеть, у меня есть общее количество строк 86432. Однако мое количество мер показывает 52 753 (простое количество строк при создании группы мер). (Использует точно такой же вид). введите здесь описание изображения

введите здесь описание изображения

Я считаю, что мои подсчеты будут неправильными из-за нулей в моих данных. Как я могу заставить SSAS правильно подсчитывать нулевые значения? (Я ограничен тем, что могу делать с исходной базой данных, поскольку у меня нет доступа для изменения основной структуры исходной системы).

введите здесь описание изображения

введите здесь описание изображения

Я понимаю, что вы говорите о подсчете поля по сравнению со всеми полями, однако, как вы можете видеть, создав новую меру в SSAS, у вас есть возможность подсчета строк исходной таблицы. Это поведение, которого я ожидал, и я ожидал бы того же количества, что и SELECT * в таблице, как показано на моих изображениях...


person jhowe    schedule 16.12.2016    source источник
comment
Как насчет использования более подходящего поля? Если поле Order содержит пустые значения, это не подходящее поле для подсчета того, что вы хотите подсчитать (возможно, клиентов?). Вместо этого используйте первичный ключ вашей таблицы.   -  person Panagiotis Kanavos    schedule 16.12.2016
comment
@PanagiotisKanavos это то, что он должен делать? Он должен просто считать строки? См. изображение выше... если я не ошибаюсь...   -  person jhowe    schedule 16.12.2016
comment
Нет, не должно. NULL не являются товарами или заказами. Они вообще ничто. Вы не ожидаете, что NULL повлияет на счетчик SQL, почему вы ожидаете, что он будет вести себя по-другому в службах SSAS? В любом случае, почему вы используете это поле для подсчета вхождений другого объекта?   -  person Panagiotis Kanavos    schedule 16.12.2016
comment
Обычно люди подсчитывают всю строку, предполагая, что вся строка не равна нулю, используя COUNT(*) вместо COUNT(someField), который может иметь значение NULL и, следовательно, не будет равняться ROWCOUNT. Или вы можете COUNT(COALESCE(YourField,1)) или что-то подобное для обработки NULL   -  person scsimon    schedule 16.12.2016
comment
он считает всю строку, не так ли??? если вы посмотрите на изображение со стороны... @scsimon   -  person jhowe    schedule 16.12.2016
comment
@PanagiotisKanavos, если вы посмотрите на изображение, насколько я понимаю, оно должно считать ROW, это то, что SSAS создает по умолчанию при создании группы мер. Я не понимаю, почему это не делается...   -  person jhowe    schedule 16.12.2016
comment
@jhowe это неправильно. Если вы запрашиваете количество поля, значения NULL исключаются как в SSAS, так и в SQL (в любой базе данных, совместимой со стандартами). Если я запрошу подсчет заказов в таблице из 1000 строк только с одним ненулевым значением, почему я должен получить что-то отличное от 1?   -  person Panagiotis Kanavos    schedule 16.12.2016
comment
@PanagiotisKanavos Я не знаю, знакомы ли вы со SSAS, посмотрите мое последнее изображение. Это должно учитывать ROW, а не отдельное поле... спасибо за вашу помощь.   -  person jhowe    schedule 16.12.2016
comment
Да, я. С 1997 года. Ни XMLA, ни MDX, ни схемы - ответить невозможно. Я не прошу скриншоты, хотя то, что вы опубликовали, показывает использование меры, а не используемую функцию.   -  person Panagiotis Kanavos    schedule 16.12.2016
comment
Другими словами, если бы такая фундаментальная вещь была сломана, люди бы заметили за последние 19 лет. С другой стороны, пользовательский интерфейс сводной таблицы иногда может сбить с толку даже опытных пользователей. Кубы также не являются таблицами, а меры — не строками.   -  person Panagiotis Kanavos    schedule 16.12.2016
comment
Есть ли в DimAd нулевая или нулевая строка AdKey? Я подозреваю, что это ваша проблема. Когда вы обрабатываете свой куб, вам нужно настроить параметры конфигурации ошибок, чтобы он не выдавал ошибку? Мне интересно, отбрасываются ли строки ключа нулевого измерения во время обработки.   -  person GregGalloway    schedule 17.12.2016
comment
@greggalloway Привет, Грег, как дела, давно не разговариваешь, поправь меня, если я ошибаюсь, я читал другой вопрос, если при разрезании меры, если мера присоединена к тусклости (даже если она не выбрана в браузере Excel или Cube) и есть нулевой ключ (без соединения), он не будет считать полную строку? Я думаю, что это моя проблема (и это было неожиданно, поскольку я выбирал только меру, а не затемнения). И да, мне пришлось изменить обработку ошибок, чтобы обработать таблицу фактов. Я просто хочу подтвердить точку, если в строке есть нулевое поле, не считает ли она строку в группе мер.   -  person jhowe    schedule 17.12.2016
comment
@jhowe во время запроса, если вы не нарезаете его по измерению, он не будет фильтроваться по нему. Но во время обработки вы удаляете строки. Так что этих строк даже не существует в кубе. Я напишу ответ.   -  person GregGalloway    schedule 17.12.2016


Ответы (2)


Я считаю, что DimAd не имеет нулевой или нулевой строки AdKey. И я считаю, что во время обработки вы должны изменить конфигурацию ошибки, чтобы она отбрасывала или игнорировала любые строки таблицы фактов, где внешний ключ равен нулю.

Моя главная рекомендация — изменить внешние ключи таблицы фактов, чтобы они не были нулевыми. Вам нужно будет создать ключ -1 в каждом измерении, а затем использовать его в таблице фактов вместо нуля, как описано здесь.

Если это невозможно, добавьте нулевые или нулевые строки AdKey в любое измерение, где внешний ключ таблицы фактов может быть нулевым. SSAS должен конвертировать Bulls в ноль, поэтому любой из них должен работать. Тогда во время обработки эти строки не будут удалены, потому что они соединяются нормально. И вам не придется менять конфигурацию ошибки во время обработки.

Если это невозможно или неприемлемо, вы можете включить Неизвестный элемент во всех измерениях, которые могут быть нулевыми. Затем на вкладке «Использование измерения» задайте для каждой связи откат к неизвестному члену. Этот процесс описан здесь.

person GregGalloway    schedule 17.12.2016

Чтобы получить истинное количество строк, вам нужно не считать столбец, а вместо этого использовать *.

COUNT(*) будет считать все строки, независимо от NULL

COUNT(Column) считает только NON-NULL значения

Тестовый пример

declare @table table (i int)
insert into @table (i) values
(1),(NULL),(NULL),(NULL)

select count(*) from @table --returns 4
select count(i) from @table --returns 1
person scsimon    schedule 16.12.2016
comment
это все еще не объясняет, почему моя мера говорит Source --> VWFactOrder (Row) и неправильно считает строки... - person jhowe; 16.12.2016
comment
Вы никогда не публиковали ни схему, ни запрос. Этот частичный скриншот вообще не помогает. Где находится определение поля? Какой запрос был выполнен? Мы не можем догадаться, что такое ваш источник и определение полей. В любом случае, этот комментарий на самом деле является вопросом о пользовательском интерфейсе сводной таблицы, на который лучше всего ответить, просмотрев справку Excel — поместите курсор в свойство и нажмите F1. - person Panagiotis Kanavos; 16.12.2016