Преобразование json с помощью мощного запроса (сочетание списка и записи в одном столбце)

Я пытаюсь преобразовать данные json (я новичок в преобразовании запросов мощности). Наша цель - объединить и преобразовать несколько файлов json для создания отчета. Файлы json предоставляются другим фидом, предоставляемым нашим веб-приложением. В рамках обучения мы попытались преобразовать один файл json.

Но одно из полей в наших данных json распознается запросом мощности как сочетание типов записей и списков (один из столбцов в запросе мощности показывает сочетание списка и записи).

В этом случае я не могу получить значения этих позиций.

снимок экрана для запроса мощности

Любые указатели для решения этой проблемы были бы очень полезны.

заранее спасибо

Найдите образец json:

{
   "@timestamp": "27-11-2015   21:31:30 PM",    "thingstodo": [{
    "propCode": "foo1"
},
{
    "propCode": "foo2"
},
{
    "propCode": "foo3",
    "hours": [{
        "day": "Monday-Thursday",
        "time": "2:00PM - 1:00AM"
    },
    {
        "day": "Friday-Sunday",
        "time": "10:00AM - 2:00AM"
    }]
},
{

    "propCode": "foo4"
},
{


    "propCode": "foo5",
    "hours": [{
        "day": "Daily",
        "time": "24 Hours"
    }]
},
{


    "propCode": "foo6",
    "hours": [{
        "day": "10am - 4am",
        "time": "bar & lounge area"
    },
    {
        "day": "12pm - 4am",
        "time": "gaming area"
    }]
},
{
    "propCode": "foo7",


    "hours": [{
        "day": "Daily",
        "time": "11:00AM - 1:00AM"
    },
    {
        "day": "Happy Hour Daily",
        "time": "4:00PM - 6:00PM"
    }]
},
{
    "propCode": "foo8"
},
{
    "propCode": "foo9"


},
{
    "propCode": "foo10",
    "hours": [{
        "day": "Sun-Thu",
        "time": "10:00AM - 11:00PM"
    },
    {
        "day": "Fri & Sat",
        "time": "10:00AM - 12:00AM"
    }]
},
{
    "propCode": "foo11",
    "name": "Atlantic City Deals and Packages",
    "brand": "harrahs"
},
{
    "propCode": "foo12"
},
{


    "propCode": "foo13",
    "hours": [{
        "day": "Sun-Thu",
        "time": "11:00AM - 1:00AM"
    },
    {
        "day": "Fri-Sat",
        "time": "11:00AM - 2:00AM"
    }]
},
{
    "propCode": "foo8",


    "hours": [{
        "day": "Daily",
        "time": "11:00AM - 2:00AM"
    }]
},
{
    "propCode": "foo12"


},
{
    "propCode": "foo14"
},
{


    "propCode": "foo14",
    "hours": [{
        "day": "Daily",
        "time": "6:00AM - 6:00PM"
    }]
},
{


    "propCode": "foo12",
    "hours": [{
        "day": "Sunday-Thursday",
        "time": "8:00AM - 6:00PM"
    },
    {
        "day": "Friday-Saturday",
        "time": "8:00AM - 7:00PM<br>"
    },
    {
        "day": "<br>Adult Swim (21+)<br> Sunday-Thursday",
        "time": "5:00PM - 6:00PM"
    },
    {
        "day": "Friday-Saturday",
        "time": "5:00PM - 7:00PM"
    }]
},
{
    "propCode": "foo15",


    "hours": [{
        "day": "Mon-Thu ",
        "time": "9:00AM - 9:30PM
"
    },
    {
        "day": "Fri-Sun ",
        "time": "9:00AM - Midnight"
    }]
},
{


    "propCode": "foo16",
    "hours": [{
        "day": "Sun - Thurs:",
        "time": "9:00AM - 5:00PM"
    },
    {
        "day": "Fri - Sat:",
        "time": "9:00AM - 6:00PM"
    },
    {
        "day": "Slide",
        "time": "Closed for the season"
    }]
},
{
    "propCode": "foo17",


    "hours": [{
        "day": "Friday",
        "time": "10:30PM "
    },
    {
        "day": "Saturday",
        "time": "10:30PM "
    }]
},
{


    "propCode": "foo6"
},
{
    "propCode": "foo14",

    "hours": [{
        "day": "Sunday - Friday",
        "time": "9:00AM - 5:00PM"
    },
    {
        "day": "Saturday",
        "time": "9:00AM - 6:00PM"
    }]
},
{


    "propCode": "foo14",
    "hours": [{
        "day": "Closed for ",
        "time": "Winter Season"
    }]
},
{


    "propCode": "foo12",
    "hours": [["CLOSED"]]
},
{
    "propCode": "foo18",


    "hours": [{
        "day": "Box Office Tue-Sat",
        "time": "12:00PM - 8:00PM"
    }]
},
{
    "propCode": "foo19"
},
{


    "propCode": "foo20",
    "hours": [{
        "day": "Monday - Thursday",
        "time": "<br>12:00PM - 3:00AM"
    },
    {
        "day": "Friday - Sunday",
        "time": "<br>10:00AM - 3:00AM"
    },
    {
        "day": "Live Music",
        "time": ", 6:00PM - 10:00PM"
    }]
},
{


    "propCode": "foo6",
    "hours": [{
        "day": "Sunday:",
        "time": "5:00PM - 1:00AM "
    },
    {
        "day": "Monday - Thursday:",
        "time": "5:00PM - 1:00AM "
    },
    {
        "day": "Friday:",
        "time": "5:00PM - 2:00AM "
    },
    {
        "day": "Saturday:",
        "time": "5:00PM - 1:00AM "
    }]
},
{


    "propCode": "foo16",
    "hours": [{
        "day": "Daily",
        "time": "24 Hours"
    }]
},
{
    "propCode": "foo21",


    "hours": [{
        "day": "Mon-Sat",
        "time": "10:00AM - 2:00AM"
    },
    {
        "day": "Sun",
        "time": "12:00PM - 2:00AM"
    }]
},
{
    "propCode": "foo10"
},
{
    "propCode": "foo23",
    "hours": [{
        "day": "Open Daily <br>(Seasonally)",
        "time": "11:00AM - 6:00PM"
    }]
},
{
    "propCode": "foo22",
    "hours": [{
        "day": "Daily",
        "time": "11:00AM - 3:00AM"
    }]
},

   {
  "propCode": "foo23",

  "hours":       [
            {
      "day": "Sun - Thurs:",
      "time": "9:00AM - 5:00PM"
    },
            {
      "day": "Fri - Sat:",
      "time": "9:00AM - 6:00PM"
    },
            {
      "day": "Slide",
      "time": "Closed for the season"
    }
  ]
}

]

}

Примечание. Один объект в этом файле должен представлять строку в Excel.


person kallada    schedule 26.11.2015    source источник
comment
Соответствует ли список определенному полю записи? Вы можете добавить настраиваемый столбец, который преобразует список в запись и сохраняет записи в том виде, в каком они есть. Затем вы можете распаковать записи по своему усмотрению.   -  person Alejandro Lopez-Lago - MSFT    schedule 26.11.2015
comment
Если я нажимаю на список, он показывает строковое значение, в некоторых случаях он тоже пуст. Но для записи в ней есть два поля - день и время (оба содержат строковые значения). Список не соответствует какому-либо конкретному полю в записи.   -  person kallada    schedule 26.11.2015
comment
Не могли бы вы включить пример ввода JSON, который вы пытаетесь проанализировать, и выходную таблицу, в которую вы хотите его преобразовать?   -  person Carl Walsh    schedule 29.11.2015
comment
Найдите образец json:   -  person kallada    schedule 30.11.2015


Ответы (1)


Я хотел поделиться внешней ссылкой здесь (не уверен, нарушаю ли я какие-либо политики, пожалуйста, поправьте меня, если это так), чтобы кто-то другой также мог использовать эти знания при необходимости. Моя основная проблема была решена с помощью www.mrexcel.com/forum/power-bi . С помощью этого фрагмента я могу создать инструмент на основе Excel для подготовки набора данных для бизнеса путем объединения различных каналов. Найдите код, необходимый для этого (M, но очень специфичный для моего входного файла)

let
    source = Json.Document(File.Contents("d:\path\filename.json")),
    tabled = Table.FromRecords({source}),
    expandListField = Table.ExpandListColumn(tabled, "thingstodo"),
    expandRecField  = Table.ExpandRecordColumn(expandListField, "thingstodo", {"propCode", "hours"}, {"propCode", "hours"}),
    expandList2  = Table.ExpandListColumn(expandRecField, "hours"),
    fieldForRec  = Table.AddColumn(expandList2,"Rec",each if Value.Is([hours], type record) then [hours] else null,type record),
    fieldForList = Table.AddColumn(fieldForRec, "List",each if Value.Is([hours], type list) then [hours] else null,type list),
    removed = Table.RemoveColumns(fieldForList, {"hours"}),
    expandRecField2 = Table.ExpandRecordColumn(removed, "Rec", {"day", "time"}, {"day", "time"}),
    expandList3 = Table.ExpandListColumn(expandRecField2, "List")
in
    expandList3

Пожалуйста, найдите ссылку на этот форум ниже:

http://www.mrexcel.com/forum/power-bi/904936-transforming-json-power-query-mix-list-record-single-column-2.html

Спасибо

person kallada    schedule 30.11.2015
comment
Хотя эта ссылка может дать ответ на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если ссылка на страницу изменится. - Из отзыва - person Piotr Olaszewski; 01.12.2015
comment
@Piotr Olaszewski Я отредактировал свой ответ в соответствии с вашим предложением. Спасибо. - person kallada; 02.12.2015