使用强力查询转换 json(在单个列中混合列表和记录)

Transforming json with power query (mix of list and record in a single column)

我正在尝试转换(我是幂查询转换方面的新手)json 数据。我们的目标是合并和转换几个 json 文件以创建报告。 json 文件由我们的网络应用程序公开的不同提要提供。作为学习的一部分,我们尝试转换单个 json 文件。

但是我们 json 数据中的一个字段是 被 power query 识别为记录和列表类型的混合(电源查询中的一列显示列表和记录的混合)。

在这种情况下,我无法获取这些订单项的值。

任何解决此问题的建议都会非常有帮助

提前致谢

请查找样本 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 中的一行。

我想在这里分享一个外部link(不确定我是否违反任何政策,如果是这样请纠正我)以便其他人也可以在需要时使用这些知识。 我的核心问题在 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

请在下面找一个link到这个论坛:

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

谢谢