< návrat zpět

MS Excel


Téma: Power M a SQL dotazování (parametr z buňky) rss

Zaslal/a 27.11.2019 14:17

Dobrý den,

přes PowerQuery mám nastavený dotaz na SQL databázi (viz příloha), který obsahuje standardně příkazy SELECT, FROM a WHERE. Právě u příkazu WHERE by mě zajímalo, jestli jde nějakým způsobem změnit pevnou hodnotu (v mém případě "0001") za odkaz na buňku v daném sešitu?

Zkoušel jsem vytvořit dodatečnou tabulku o 1 buňce, tu potom pomocí Drill down rozpadnout pouze na jednoduchou hodnotu a na tuto tabulku se následně odkazovat u příkazu WHERE, akorát se mi nedaří kód napsat správně a Excel mi vždy vypisuje různé druhy chyb...

Poradil by někdo, prosím, jak má být kód správně napsaný? Podle chyb, které Excel vypisuje mám špatně deklarovanou hodnotu v dodatečné tabulce.

Děkuji.

Příloha: png45093_sql_powerm_prikaz.png.png (10kB, staženo 62x)
45093_sql_powerm_prikaz.png.png
Zaslat odpověď >

Strana:  1 2   další »
#045094
MePExG
Použiť PQ na select je zvláštne, keď sa dokáže konektnúť aj na SQL databázu. Ten dotaz ktorý drill-ne hodnotu z bunky, je potrebné prerobiť na funkciu, ktorá vráti hodnotu. Stačí na začiatok vložiť pred riadok let (x)=> a na dosadenie premennú, ktorá vráti hodnotu funkcie tj. pred Zdroj vložiť hodnota=názov dotazu funkcie(0), a potom Zdroj=Ole("..="&hodnota)citovat
#045096
avatar
Děkuji za rychlou odpověď. Bohužel se mi to ale stále nedaří... Nemohl bych Vás poprosit o sepsání kusu kódu, jak má být správně napsáno? Asi stále dělám někde nějakou chybu. Předělání dotazu na funkci nebyl problém, ale nevím si rady s tím, jak správně napsat tu část kódu před Zdroj...

Děkuji.citovat
#045100
MePExG
Funkcia hodn
(x)=>
let
Source = Excel.CurrentWorkbook(){[Name="hodn"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", Int64.Type}}),
Column1 = #"Changed Type"{0}[Column1]
in
Column1

Použitie vrátenej hodnoty v dotaze Table1
let
hodnota=hodn(0),
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"pc", Int64.Type}, {"h", Int64.Type}}),
#"Filtered Rows" = Table.SelectRows(#"Changed Type", each [h] = hodnota)
in
#"Filtered Rows"


Prikladám aj súbor
Příloha: xlsx45100_book1.xlsx (18kB, staženo 27x)
citovat
#045102
avatar
Lze použít různé přístupy.
mepexg doporučuje natáhnout celou tabulku a potom v pq ji filtrovat.

Lze ovšem také upravit sql dotaz:

(nechce se mi přepisovat obrázek, tak jen ten kousek:

let
zdroj = Obc.Query(........., "SELECT ... where = " & hodn() )
citovat
#045110
avatar
Děkuji za příspěvek, to je přesně to, co bych si přál vytvořit, akorát pořád dělám něco špatně. Editor vypisuje chybu, že očekává token comma v tučně vyznačené části kódu.

let
Zdroj = Odbc.Query("DRIVER=...(tato část kódu je OK)...WHERE#(lf)ONR = " & Tabulka2() "")
in
Zdroj


Funkci Tabulka2 mám napsanou takto:

(x)=>
let
Zdroj = Excel.CurrentWorkbook(){[Name="Tabulka2"]}[Content],
#"Změněný typ" = Table.TransformColumnTypes(Zdroj,{{"Sloupec1", Int64.Type}}),
Sloupec1 = #"Změněný typ"{0}[Sloupec1]
in
Sloupec1

...očividně stále dělám něco špatně a nepřipadá mi, že by mi tam někde chyběla čárka. Spíš bych řekl, že nějak špatně zapisuji tu Tabulku2 do kódu. Mohl by, prosím, někdo poradit, kde přesně dělám chybu? Já ji stále asi nevidím.

Děkuji.citovat
#045115
MePExG

Poseidon napsal/a:

let
Zdroj = Odbc.Query("DRIVER=...(tato část kódu je OK)...WHERE#(lf)ONR = " & Tabulka2(0) "")
in
Zdroj

... lebo funkcia očakáva parameter tj. hodnotu do xcitovat
#045119
avatar
Díky za upozornění na chybu. Nyní už mi to s čísly funguje. Děkuji mnohokrát.

Šlo by to ještě podobným způsobem použít i na text? Tzn. že bych do SQL dotazu po WHERE ONR2 LIKE " & Tabulka2(0) "") a ve funkci Tabulka2 změnil Int64.Type na Text Type?

...protože když to zkusím, tak mi to napíše chybu Column or global variable xxx not found (xxx = text zapsaný v buňce).citovat
#045124
MePExG
Je to zlá syntax lebo má byť, type text

Poseidon napsal/a:

(x)=>
let
Zdroj = Excel.CurrentWorkbook(){[Name="Tabulka2"]}[Content],
#"Změněný typ" = Table.TransformColumnTypes(Zdroj,{{"Sloupec1", type text}}),
Sloupec1 = #"Změněný typ"{0}[Sloupec1]
in
Sloupec1
citovat
#045125
avatar
Děkuji opět za rychlou odpověd. Syntax type text jsem měl ve svém kódu správně, napsal jsem jí špatně jen sem do příspěvku. Excel mi vypisuje chybu na obrázku v příloze (do buňky jsem zadal parametr BRNO).
Příloha: png45125_chyba.png.png (6kB, staženo 36x)
45125_chyba.png.png
citovat
#045132
MePExG
A práve preto som Vám doporučoval, aby ste hodnotu z funkcie dávali do dotazu cez premennú (lebo vyhodnotenie výrazu s funkciou nepreberie uvodzovky ako uzavretie textu).let
hodnota=Tabulka2(0),
Zdroj = Odbc.Query("DRIVER=...WHERE#(lf)ONR = " & hodnota)
in
Zdroj
citovat

Strana:  1 2   další »

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