< návrat zpět

MS Excel


Téma: PowerQuery - zdroj SQL. trabl s funkcí rss

Zaslal/a 18.2.2021 15:56

Ahoj,
potřebuji v PowerQuery použít jako zdroj SQL dotaz a v dotazu udělat "předfiltr" pomocí WHERE.
Potřebuji to ve dvou verzích jednou jde o sloupec typu Integer a podruhé o DateTime. Níže popisuji pouze variantu pro Inteager, u DateTime mi to píše stejný problém.
Pokusil jsem se to udělat takto:
Vytvořit funkci se stejným DATE type jako má daný sloupec a tu dosadit místo proměnné ve WHERE v SELECTU.
U "nadějnějších pokusů" to píše jen, že nemůže konvertovat VARCHAR value z funkce "hodnota" na typ Int. V ostatních případech to hlásí chybu syntaxe.
Nemáte s tím někdo zkušenosti?
Níže posílám ukázku Funkce, Zápisu zdroje a Chybovou hlášku.

Funkce:
= (XXA as number)=>
let
Zdroj = Excel.CurrentWorkbook(){[Name="Tabulka2"]}[Content],
#"Změněný typ" = Table.TransformColumnTypes(Zdroj,{{"Osobní číslo", Int64.Type}}),
#"Osobní číslo" = #"Změněný typ"{0}[Osobní číslo]
in
#"Osobní číslo"

Zdroj:

hodnota = Osobni_cislo_Rov(1),
Zdroj = Odbc.Query("……..část kodu která funguje…….Where personalnumber ="&" 'hodnota' "),
//zkoušel jsem to taky takto:
Where personalnumber ='&hodnota' ")

Píše to toto chybové hlášení:
DataSource.Error: ODBC: ERROR [22018] [Microsoft][ODBC SQL Server Driver][SQL Server]Conversion failed when converting the varchar value 'hodnota' to data type int.
Podrobnosti:
DataSourceKind=Odbc
DataSourcePath=dsn=10.234.134.120
OdbcErrors=[Table]

Zaslat odpověď >

#049903
avatar
1. skládáš sql dotaz, tj. textový řetězec.
2. když si dotaz (vhodně upravíš a) odkrokuješ, můžeš se podívat co serveru posíláš
3. Celý dotaz v jednom kuse obvykle neskládám, rozdělím si to na vhodné kousky. Např. základní select (to co funguje) a where ... zvlášť. Manupulace s různými výběry je pak jednodušší.
4. Nejspíš bych skládal něco jako
"where personalnumber = '" & hodnota & "' "citovat
#049905
avatar
Ahoj,
základní select mi funguje, Where také pokud tam místo funkce napíšu číslo.
Zkusil jsem zápis podle rady od @Lubo a chybová hláška se změnila na:
Expression.Error: Hodnotu null nemůžeme převést na typ Text.
Podrobnosti:
Value=
Type=[Type]

Ještě mě napadlo ve funkci změnit:
= (XXA as number)=>
na:
(XXA as text)=> --- jen se změní hláška na: Hodnotu 1 nemůžeme převést na typ Text (Value=1; Type=[Type])
pak jsem zkusil upravit funkci na:
(XXA)=> ---- i v tomto případě to hlásí chybu.

Není to něco známého s čím byste někdo uměl poradit?citovat
#049906
avatar
Z ukázek vůbec není jasné co děláš.

Pokud máš problém s tou anonymní funkcí, tak funkce se volá s parametrem XXA, který
a) musí být zadán
b) musí být číslo
c) nesmí být null
d) ve funkci není použit.

Nepředvedl jsi, jak funkci voláš.

K čemu to má sloužit víš jen ty sám.citovat
#049907
avatar
Pardon mě nenapadlo, že z těch kusů kódu, které sem dávám není poznat jak volám funkci:(.

Funkce se jmenuje "Osobni_cislo_Rov"
Volám to zde na prvním řádku:
hodnota = Osobni_cislo_Rov(1),
Zdroj = Odbc.Query("……..část kodu která funguje…….Where personalnumber ='" & hodnota & "' ")
citovat
#049908
avatar
Vypadá to, že mícháš datové typy v power query a v SQL serveru a/nebo typ parametru funkce s typem vrácené hodnoty.

Dotaz na server je TEXT. Datový typ v sql databázi ovlivňuje syntaxi dotazu, tj. jestli osobní číslo je dotazu jako číslo nebo je obalené uvozovkami.

"hodnota" by v každém případě měla být textem.

Pokud je personalnumber v db číslo, pak něco takového:


Osobni_cislo_Rov = (XXA as number) =>

let
Zdroj = Excel.CurrentWorkbook(){[Name="Tabulka2"]}[Content],

#"Změněný typ" = Table.TransformColumnTypes(Zdroj,{{"Osobní číslo", Int64.Type}}),

OC = #"Změněný typ"{0}[Osobní číslo],

// Když se to převede na text tady, je to dál jednodušší,
// může se také případně ošetřit chybějící hodnota, ...

#"Osobní číslo" = Text.From(OC)
in
#"Osobní číslo",

hodnota = Osobni_cislo_Rov(1),
// co to v tomto kroku ukazuje - je do správně????

// tady se skládá text dotazu
where = "Where personalnumber = " & hodnota & " "
// co to vrací tady? - je to správně (hodnota, syntaxe sql dotazu)?
citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje