2016-03-25 6 views
2

konvertieren Ich habe einen Web-Service, der JSON produziert. Wir machen jQuery REST-Aufrufe und binden die Daten an Tabellen.Power Bi-Abfrage an Web-Service - Fehler: Expression.Error: Wir können den Wert nicht in den Datensatz

Der Service ist C# WebAPI mit Code wie folgt:

data = serializer.Serialize(rows); 
    return Request.CreateResponse(HttpStatusCode.OK, lstFilteredData, Configuration.Formatters.JsonFormatter); 

Es produziert JSON, dass wie folgt aus:

"[{\"School\":\"UM \",\"Students\":\"500\"},{\"School\":\"FIU \",\"Students\":\"700\"},{\"School\":\"UF \",\"Students\":\"600\"},{\"School\":\"GT \",\"Students\":\"300\"}]" 

Wir haben jQuery REST, die den Dienst erfolgreich wie diese verbraucht:

$.ajax({ 
     url: 'https://myservices')), 
     type: 'GET', 
     dataType: 'json', 
     cache: false, 
     crossDomain: true, 
     //async: false, 
     success: function (data){ onQuerySucceededWeb(data,true,param);} 
    }); 

Ich versuche, diese Daten mit Power Bi zu melden. Mein PowerBi Abfrage Skript ist:

Source = Json.Document(Web.Contents("https://mywebservices")), 
    #"Converted to Table" = Record.ToTable(Source), 
    #"Expanded Value" = Table.ExpandListColumn(#"Converted to Table", "Value"), 
    #"Expanded Value1" = Table.ExpandRecordColumn(#"Expanded Value", "Value", {"School", "Students"}, {"Value.School", "Value.Students"}) 

in 
    #"Expanded Value1" 

lassen ich diesen Fehler:

**Expression.Error: We cannot convert the value "[{"School":"UM  ..." to type Record.** 
Details: 
    Value=[{"School":"UM  ","Students":"500"},{"School":"FIU  ","Students":"700"},{"School":"UF  ","Students":"600"},{"School":"GT  ","Students":"300"}] 
    Type=Type 

enter image description here

+0

Was zeigt, wenn Sie = Text.FromBinary (Web.Contents ("https: // mywebservices")) verwenden ? –

+0

wo genau würde ich das setzen? Anstelle von meinem gesamten Abfrageskript? – o365spo

+0

gleich. Expression.Error: Wir können den Wert "[{\" School \ ": \" UM ... \ "nicht in Record umwandeln. – o365spo

Antwort

0

Möglicherweise ist auf Ihrem Server etwas kaputt gegangen, weil Ihr JSON eine JSON-Zeichenfolge eines Objekts ist. Ihre M Abfrage gearbeitet haben würde, wenn der Server den JSON Text nicht Zeichenfolge hatte, also produziert buchstäblich diesen Bytes:

[{"School":"UM ","Students":"500"},{"School":"FIU ","Students":"700"},{"School":"UF ","Students":"600"},{"School":"GT ","Students":"300"}] 

Wenn Sie nur Ihre M zu erhalten, wieder zu arbeiten, können Sie durch Doppelklick dekodieren die JSON:

= Json.Document(Json.Document(Web.Contents("https://mywebservices"))) 
+0

Ja, es stellte sich heraus, dass wir im Dienst doppelt codiert waren. – o365spo

0

Json.Document wird einen Textwert zurückkehrt, weil die JSON zurückgegeben wird ein String . Wenn Sie die Anführungszeichen entfernen, sollte Json.Document es als eine Liste von Objekten analysieren. Das sollte funktionieren:

let 
    Source = Web.Contents("https://mywebservices") 
    Custom1 = Text.Range(Source, 1, Text.Length(Source) - 2), 
    Custom2 = Json.Document(Custom1), 
    #"Converted to Table" = Table.FromList(Custom2, Splitter.SplitByNothing(), null, null, ExtraValues.Error), 
    #"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"School", "Students"}, {"School", "Students"}) 
in 
    #"Expanded Column1"` 

Dies würde fehlschlagen, wenn die Website jemals eine leere Zeichenfolge zurückgegeben.

+0

Diese Zeile: = Table.ExpandRecordColumn (# "In Tabelle konvertiert", "Column1", {"School", "Studenten"}, {"School", "Studenten"}) Dieser Fehler wurde erzeugt: Expression.Error : Wir können einen Wert vom Typ Binary nicht in den Typ Text konvertieren. Details: Wert = Binär Typ = Typ – o365spo

+0

Siehe tatsächlichen Screenshot von dem, was von dem Dienst in einem Browser zurückkommt. – o365spo

+0

Der Fehler ist tatsächlich auf dieser Zeile: = Text.Range (Quelle, 1, Text.Length (Quelle) - 2) – o365spo

Verwandte Themen