Динамический JSON SQL Server используется в службах Analysis Services?

Я пытаюсь понять, в каком направлении даже начать со следующего.

Изображение динамической формы (JSON), которую я храню в SQL Server 2016+. До сих пор я видел / пробовал пару динамических запросов, чтобы взять динамический JSON и сгладить в виде столбцов.

Учитывая «динамическую» природу, трудно «хранить» эти сглаженные данные. Я искал временные/временные таблицы/таблицы памяти для хранения этих динамических сглаженных данных в течение «относительно короткого периода» времени (скажем, час или два).

Меня также спросили, можно ли использовать динамические данные JSON при построении куба в службах Analysis Services. Опять же, учитывая динамическую природу этого, возможно ли что-то подобное?

Я думаю, мой вопрос двоякий:

  1. Указатели для выравнивания динамического JSON в SQL Server
  2. Можно ли взять динамический JSON, разбить на столбцы и каким-то образом использовать в службах Analysis Services? то есть в конечном итоге использовать внутри куба?

Поймите, что вышеизложенное немного расплывчато, но любые указатели, которые помогут мне двигаться в правильном направлении, будут оценены!

Большое спасибо.


person Dav.id    schedule 22.10.2019    source источник
comment
Извините, плохо/опечатка! Изображение динамической формы должно быть Представьте динамической формой :)   -  person Dav.id    schedule 22.10.2019


Ответы (1)


Динамическое преобразование JSON в столбцы может оказаться сложным. Особенно, если вы НЕ уверены в структуре. Тем не менее, рассматривали ли вы возможность преобразования JSON в иерархию через Recursive CTE?

Пример

declare @json varchar(max)='
[
  {
    "url": "https://www.google.com",
    "image-url": "https://www.google.com/imghp",
    "labels": [
                {
                  "source": "Bob, Inc",
                  "name": "Whips",
                  "info": "Ouch"
                },
                {
                  "source": "Weezles of Oregon",
                  "name": "Chains",
                  "info": "Let me go"
                }
              ],
    "Fact": "Fictional"
  }
]';


;with cte0 as (
   Select *
         ,[Level]=1 
         ,[Path]=convert(varchar(max),row_number() over(order by (select null)))
    From OpenJSON(@json,'$') 
   Union All
   Select R.*
         ,[Level]=p.[Level]+1 
         ,[Path]=concat(P.[Path],'\',row_number() over(order by (select null)))
    From  cte0 p 
    Cross Apply OpenJSON(p.value,'$') R
    Where P.[Type]>3
)
Select [Level]
      ,[Path]
      ,Title = replicate('|---',[Level]-1)+[Key]
      ,Item  = [Key]
      ,Value = case when [type]<4 then Value else null end 
 From cte0
 Order By [Path]

Возврат

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

person John Cappelletti    schedule 22.10.2019
comment
Если потребности анализа могут быть решены с помощью этого типа таблицы пар ключ/значение, то это будет самый простой подход, поскольку куб не должен изменяться при поступлении нового динамического ключа. Однако, по моему опыту, отчету часто приходится использовать фильтры «и», такие как «источник = Bob Inc. AND name = Whips». С таблицей ключ/значение это непросто, так как мультивыбор «Bob Inc, Whips» означает «Bob Inc OR Whips». Поэтому, если вам нужны сложные фильтры И, возможно, вам придется использовать табличную объектную модель (TOM) для автоматизации создания нового столбца в SSAS при появлении нового ключа в JSON. можно но сложно - person GregGalloway; 23.10.2019