Эффективно преобразовать фактические измерения в несколько единиц измерения - PullRequest
0 голосов
/ 09 октября 2019

У нас есть хранилище данных с несколькими таблицами фактов (финансы, цепочки поставок и т. Д.). Таблицы фактов содержат один «сырой» показатель из нашей ERP. В настоящее время мы используем UDF SQLCLR (для обеспечения параллелизма) для преобразования всех этих измерений на лету, а не для сохранения их в таблицах.

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

Недавно мы рассмотрели возможность обновления нашего хранилища данных с SQL 2014 до SQL 2017 и пытаемся использовать новый CCI,Это было здорово, за исключением того, что кажется, что функции теперь вернулись к тому, чтобы быть только однопоточными, таким образом нарушая любое повышение производительности от использования CCI.

Мой вопрос, должны ли мы хранить все преобразования показателей в таблице фактов (скороиспользовать кластерное хранилище столбцов), можем ли мы заставить UDF вернуться к параллелизму, или мы должны перейти к функциям с табличными значениями, где повторное использование кода и параллелизм могут использоваться за счет дополнительного CROSS APPLY, на наш взгляд.

Вот пример того, что мы сейчас делаем:

SELECT dbo.MyConversion(P1, P2, P3, QtyShippedRaw) as QtyShippedPounds
    , dbo.MyConversion(P1, P2, P3, QtyShippedRaw) as QtyShippedCans
    , dbo.MyConversion(P1, P2, P3, QtyOrderedRaw) as QtyOrderedPounds
    , dbo.MyConversion(P1, P2, P3, QtyOrderedRaw) as QtyOrderedxxx
    , dbo.xxxx
FROM MyFactTable
INNER JOIN MyProductDimension (retrieves p1,p2,p3)
...