Добавить номер строки / ранг в табличную модель ssas - PullRequest
0 голосов
/ 05 февраля 2020

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

Я использую Visual Studio с расширением Microsoft Analysis Services Projects для развертывания модели в ssas и SSMS для отладки запросов. Но, похоже, существуют различия между запросами dax в SSMS и в определениях табличных моделей.

SSMS использует синтаксис evaluate и табличный конструктор = VAR RETURN. И, похоже, некоторые функции недоступны для табличных моделей. Кажется, что ADDCOLUMNS и RANKX недоступны для табличных моделей. Также , используется в качестве разделителя операндов в SSMS и ; в редакторе DAX модели (возможно из-за некоторых опций интернационализации на моем компьютере), что не очень удобно. Я не смог найти способ получить сообщение об ошибке для неверного запроса DAX для определения модели. Я вижу только неправильный запрос, который получил 0 записей во время развертывания модели, и если я пытаюсь выполнить какой-либо запрос к таблице после развертывания, я получаю сообщение об ошибке, что она пуста из-за неправильной конструкции, но без подробностей. Существует также возможность использовать вычисляемые столбцы при построении таблицы, но я не смог встроить функцию RANKX в формулу для них. Также я не знаю, как использовать MEASURE внутри функции построения. Подход фильтра из упомянутого вопроса stackoverflow был очень медленным на моем количестве данных. Я ждал около получаса и остановил развертывание.

Поскольку я не вижу ADDCOLUMNS работ, которые я пробовал GENERATE и SELECTCOLUMNS. Например:

=
VAR NewTable = GENERATE(BaseTable; ROW("RowNumber"; RANKX(BaseTable; BaseTable[SortName];;1)))
RETURN NewTable

Это хорошо работает в SSMS, но не может быть использовано для построения таблицы. Пока:

=
VAR NewTable = GENERATE(BaseTable; ROW("RowNumber"; 50))
RETURN NewTable

везде отлично работает. Поэтому я думаю, что RANKX не работает в определениях табличной модели.

Есть ли способ ранжировать или нумеровать строки в вычисляемой таблице ssas по некоторому столбцу сортировки?

1 Ответ

0 голосов
/ 07 февраля 2020

Добавление столбцов с большим количеством элементов, таких как столбец с индексным числом, как правило, не рекомендуется для таблиц в табличной модели, поскольку эти столбцы сжимаются очень сильно, что снижает производительность запросов. Особенно если стол большой. Но если вы должны это сделать, используйте метод , показанный здесь . Если вы не хотите добавлять вычисляемый столбец в существующую таблицу, вы можете заключить все в вызов ADDCOLUMNS:

= 
ADDCOLUMNS(
    BaseTable, 
    VAR CurrentSortName = BaseTable[SortName]
    RETURN
        COUNTROWS(
            FILTER(BaseTable, BaseTable[SortName] < CurrentSortName)
        ) + 1
)
...