none
Reporting services - problém s parametry

    Dotaz

  • Dobrý den,
    mám problém s reporting services.
    1) Potřebuji zobrazit výsledek store procedury. Jako parametr se ji posilaji ruzne hodnoty.
    2) mám spoustu tabulek, které obsahují id kód a například název služby.
    3) mám proceduru, která podle parametru z téhle spousty tabulek vybere hodnotu a id kód.
    4) tyto hodnoty se předávají jako parametr store proceduře v bodě jedna.

    Ovšem... když chci dát jako parametr například typ služny, který vychází z tabulky ( bod 2) a vybírám to procedurou ( bod 3) visual studio mi vrátí PRVNI select na který v té proceduře ( bod 3) narazí. Naprosto bez ohledu nato jaký je parametr...
    Když tvořím data source ve visual studiu, a dam provést příkaz, návratové hodnoty jsou správně, i sloupce počet atd. Ovšem když to chci zadat jako možné hodnoty toho comboboxu ( parametr pro bod 1) tak mi to hodí právě onen první select procedury (bod 3). Nesetkal jste se s tím někdo? Doufam že jsem to nenapsal moc krkolomně... snažil jsem se to napsat pochopitelně.


    26. května 2008 12:25

Odpovědi

  • Okej, takže stačí napsat do datasetu

    Code Snippet
    SET FMTONLY OFF;  EXEC ....procedura.... a je to v pořádku :-)



    11. června 2008 7:31
  • ...tak, snad už budou fóra fungovat, snažil jsem se několikrát marně odpovědět.

     

    Nechce se mi věřit, že by Vám storka ignorovala IF podmínky, to je poměrně nemyslitelné.

    Zkuste si Profilerem odchytit, co přesně se Vám tam posílá za dotaz a uvidíte, co jde jako vstupní parametr. Buď se Vám tam dostává "FCH", nebo nic a máte to "FCH" jako default hodnotu vstupního parametru. A nebo máte chybu v té storce.

    31. května 2008 20:38
    Moderátor
  •  

    Já tuším, jestli nemáte problém s definicí té storky (bod 3).

    Ono totiž výsledkem storky je tzv. "result set", který může být tvořen více tabulkami. Do tohoto RS se dostávají všechny výsledky "volných" SELECTů, které ve storce máte, tj. těch, které si neukládají výsledky jinam (např. do lokálních proměnných, do temporary tabulek, atp.).

     

    Jak píšete, Vaše storka má košatý result-set, tedy vrací více tabulek najednou. To není úplně typická situace a mnoho nástrojů si s tím neumí poradit, proto Vám do comboboxu padají hodnoty z první tabulky té storky. S určitým vypětím byste mohl asi přemluvit to combo, aby bralo data z některé z dalších tabulek, nicméně to není typický postup a spíše byste měl tu storku rozdělit na více samostatných, které by Vám každá vracela jen jednu potřebnou tabulku, to je result-set storky by obsahoval jen jednu tabulku (a ta bude první).

    26. května 2008 19:53
    Moderátor

Všechny reakce

  •  

    Já tuším, jestli nemáte problém s definicí té storky (bod 3).

    Ono totiž výsledkem storky je tzv. "result set", který může být tvořen více tabulkami. Do tohoto RS se dostávají všechny výsledky "volných" SELECTů, které ve storce máte, tj. těch, které si neukládají výsledky jinam (např. do lokálních proměnných, do temporary tabulek, atp.).

     

    Jak píšete, Vaše storka má košatý result-set, tedy vrací více tabulek najednou. To není úplně typická situace a mnoho nástrojů si s tím neumí poradit, proto Vám do comboboxu padají hodnoty z první tabulky té storky. S určitým vypětím byste mohl asi přemluvit to combo, aby bralo data z některé z dalších tabulek, nicméně to není typický postup a spíše byste měl tu storku rozdělit na více samostatných, které by Vám každá vracela jen jednu potřebnou tabulku, to je result-set storky by obsahoval jen jednu tabulku (a ta bude první).

    26. května 2008 19:53
    Moderátor
  • No problém právě že není v tom že by procedura vracela více resultsetů, vrátí jen jeden... Nemohu postovat firemni proceduru ale uvedu obdobny příklad :

    create procedure procedura_moje_procedura
    @type_of_result VARCHAR(5)
    AS
    IF @type_of_result='FCH'
    BEGIN
    SELECT        fch_code AS 'filechange code',
    fch_name AS 'filechange name',
    fch_date AS 'date'
    FROM           table1
    END
    IF @type_of_result='db'
    BEGIN
    SELECT       db_code AS 'database code',
             db_name AS 'database name '
    FROM          table2
    END

    no a dataset v reportservices dam EXEC procedura_moje_procedura 'db'
    dam run, proběhne v pořádku vrátí mi to výsledek druhého selectu.
    Ovšem když zvolím jako zdroj parametru reportu tento dataset,
    dostanu sloupečky 'filechange code','date' a 'filechange name'.
    Ty aliasy tam jinak nejsou, to je jen pro zpřehlednění aby sem furt nepsal ten a ten sloupecek z toho a toho selectu.
    Ta procedura procedura_moje_procedura je jako by ten bod 3. Nic jineho v te procedure neni, nez podminka, a co se ma selectit. Zadne zdvojene resultsety. A dělá to tak u všech procedur co jsem takhle zkoušel. Jinak běžím na win2003 serverech a 2005 sql databázi.

    Mam takovychle tabulek s popiskama v databazi strašný kvantum, a dělat na každou tabulku zvlášť proceduru by bylo naprosto neadekvátní, nepřehledné a bylo by jich hrozně moc.

    EDIT: prostě to ignoruje podmínky a bere první select co v proceduře je.
    27. května 2008 6:14
  • ...tak, snad už budou fóra fungovat, snažil jsem se několikrát marně odpovědět.

     

    Nechce se mi věřit, že by Vám storka ignorovala IF podmínky, to je poměrně nemyslitelné.

    Zkuste si Profilerem odchytit, co přesně se Vám tam posílá za dotaz a uvidíte, co jde jako vstupní parametr. Buď se Vám tam dostává "FCH", nebo nic a máte to "FCH" jako default hodnotu vstupního parametru. A nebo máte chybu v té storce.

    31. května 2008 20:38
    Moderátor
  • set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go

    ALTER    PROCEDURE [dbo].[S_RET_reference_tables]

        @ref_table    CHAR(3)

    AS
    BEGIN

        IF @ref_table = 'AGE'
            SELECT    agency_id,
                cus_code,
                cad_code,
                agency_label,
                age_address,
                age_town,
                age_zip,
                age_email,
                age_close_date,
                age_selling,
                export_data_path           
            FROM    T_AGE_agency
            ORDER BY agency_id   

        IF @ref_table = 'ADV'
            SELECT    adv_code,
                adv_name
            FROM    T_ADV_advisor
            ORDER BY adv_name

        IF @ref_table = 'BAC'
            SELECT    bnk_code,
                bac_sort_code,
                bac_account_num,
                bac_acc_check_key,
                bac_voucher_year,
                vou_code,
                reg_code
            FROM    T_BAC_bank_account
            ORDER BY vou_code,bac_voucher_year

        IF @ref_table = 'BNK'
            SELECT    bnk_code,
                bnk_bank_name,
                bnk_swift
            FROM    T_BNK_banks
            ORDER BY bnk_code

        IF @ref_table = 'BOX'                       -- OVEN 05.05.2003
            SELECT    BOX.box_code,
                BOX.box_label,
                BOX.vou_code,
                BDE.bde_vou_qty,
                BOX.uty_code,
                BOX.box_unit_qty,
                BOX.box_unit_amount,
                BOX.box_total_vou_qty,
                BOX.box_separator,
                BOX.fv,
                BOX.box_end_date,
                BOX.box_packet_qty        -- JFL 2007-12-12    Books(blocks), Sheets
            FROM    T_BOX_box BOX,
                T_BDE_box_unit_details BDE
            WHERE    BOX.box_code = BDE.box_code
            AND    BOX.box_end_date IS NULL
            ORDER BY BOX.box_code

        IF @ref_table = 'BUD'
            SELECT    bud_month,
                vou_code,
                bud_inv_vou_qty,
                bud_inv_fv_amount,
                bud_inv_comm_amount,
                bud_inv_car_amount,
                bud_crn_fv_amount,
                bud_crn_comm_amount,
                bud_crn_car_amount,
                bud_avg_fv,
                bud_vou_issued_day,
                bud_stl_vou_qty,
                bud_stl_fv_amount,
                bud_lst_vou_qty,
                bud_lst_fv_amount,
                bud_rtn_vou_qty,
                bud_rtn_fv_amount,
                bud_pyd_vou_qty,
                bud_pyd_fv_amount,
                bud_pyd_comm_amount
            FROM    T_BUD_budget
            ORDER BY vou_code,bud_month

        IF @ref_table = 'BUR'                       -- OVEN - 03.04.2002
            SELECT    bur_code,
                bur_label
            FROM    T_BUR_business_register
            ORDER BY bur_code

        IF @ref_table = 'CAC'
            SELECT    cac_code,
                cac_label
            FROM    T_CAC_charge_account
            ORDER BY cac_label

        IF @ref_table = 'CAL'
            SELECT    cal_date,
                cal_descrip
            FROM    T_CAL_calendar
            ORDER BY cal_date

        IF @ref_table = 'CAR'
            SELECT    car_code,
                tmo_code,
                car_name
            FROM    T_CAR_carrier
            ORDER BY tmo_code, car_name

        IF @ref_table = 'CDD'
            SELECT    cdd_code,
                cdd_name,
                car_code
            FROM    T_CDD_carrier_delivery_detail
            ORDER BY cdd_code

        IF @ref_table = 'CRE'                       -- HONY 22/11/2002
            SELECT    cre_code,
                cre_label
            FROM    T_CRE_close_reason
            ORDER BY cre_code

        IF @ref_table = 'CTY'
            SELECT    cty_code,
                cty_label,
                cty_format
            FROM    T_CTY_comm_type
            ORDER BY cty_code

        IF @ref_table = 'DCC'
            SELECT    dcc_code,
                dcc_amount,
                dcc_label
            FROM    T_DCC_dad_car_cost
            ORDER BY dcc_code

        IF @ref_table = 'DOC'
            SELECT    doc_code,
                doc_label,
                doc_report
            FROM    T_DOC_document
            ORDER BY doc_label

        IF @ref_table = 'DRS'
            SELECT    drs_code,
                drs_district,
                drs_region,
                drs_state
            FROM    T_DRS_district_region_state
            ORDER BY drs_code

        IF @ref_table = 'ENT'
            SELECT    ent_code,
                ent_name
            FROM    T_ENT_envelope_type
            ORDER BY ent_code

        IF @ref_table = 'EPL'                -- OVEN 10.08.2005
            SELECT    epl_id,
                vrp_code,
                epl_name,
                epl_standard_unit_price,
                epl_variable_unit_price,
                epl_personalized_unit_price
            FROM    T_EPL_envelope_pricing_list
            WHERE    epl_active = 1
            ORDER BY epl_id

        IF @ref_table = 'FCH'
            SELECT    fch_code,
                fch_local_comment
            FROM    T_FCH_field_change
            ORDER BY fch_code

        IF @ref_table = 'FVB'                       -- ELA 07/02/2003
            SELECT    VOU_code,
                Fvb_minimum_value,
                Fvb_maximum_value    
            FROM    T_FVB_face_value_boundaries
            ORDER BY vou_code

        IF @ref_table = 'GRG'
            SELECT    grg_code,
                grg_label
            FROM    T_GRG_grouping
            ORDER BY grg_label

        IF @ref_table = 'INC'
            SELECT    inc_code,
                inc_label
            FROM    T_INC_incident
            ORDER BY inc_label

        IF @ref_table = 'LAN'
            SELECT    lan_number,
                lan_label
            FROM    T_LAN_lane
            ORDER BY lan_label

        IF @ref_table = 'LEC'
            SELECT    chq_code,
                lec_line1,
                lec_line2,
                lec_line3,
                lec_line4,
                lec_line5,
                lec_line6,
                lec_line7,
                lec_line8,
                lec_line9,
                lec_line10
            FROM    T_LEC_letter_cheque
            ORDER BY chq_code

        IF @ref_table = 'LOG'
            SELECT    log_code,
                log_type,
                log_label,
                log_logo
            FROM    T_LOG_logo
            ORDER BY log_type,log_label

        IF @ref_table = 'MES'
            SELECT    mes_code,
                mes_text,
                mes_type,
                mes_title
            FROM    T_MES_messages
            ORDER BY mes_code

        --JFL 2008-04-14 Notification interface
        IF @ref_table = 'NOT'
            SELECT     not_code,
                not_label
            FROM T_NOT_notification_type    

        IF @ref_table = 'PAC'
            SELECT    pac_code,
                pac_type,
                pac_label,
                pac_fill
            FROM    T_PAC_packing
            ORDER BY pac_type, pac_label

        IF @ref_table = 'PAM'
            SELECT    pam_code,
                pam_label
            FROM    T_PAM_payment_method
            ORDER BY pam_label

        IF @ref_table = 'PRB'
            SELECT    vrp_code,
                prb_upper_am,
                prb_rate
            FROM    T_PRB_price_bands
            ORDER BY vrp_code,prb_upper_am

        IF @ref_table = 'PTE'
            SELECT    pte_code,
                pte_label,
                pte_value
            FROM    T_PTE_pay_term
            ORDER BY pte_value

        IF @ref_table = 'REA'
            SELECT    rea_code,
                rea_label
            FROM    T_REA_reason
            ORDER BY rea_label

        IF @ref_table = 'REG'
            SELECT    reg_code,
                reg_label
            FROM    T_REG_region
            ORDER BY reg_label

        IF @ref_table = 'SCV'
            SELECT    ser_code, cty_code, vrp_code
            FROM    T_SCV_ser_cty_vrp
            ORDER BY ser_code, cty_code, vrp_code

        IF @ref_table = 'SEC'
            SELECT    sec_code, sec_label
            FROM    T_SEC_sector
            ORDER BY sec_label

        IF @ref_table = 'SER'                -- OVEN 14.07.2005
            SELECT    ser_code,
                ser_type,
                icn_data_type,
                ser_name,
                ser_trigram,
                ser_vat_rate,
                ser_close_date
            FROM    T_SER_service
            ORDER BY ser_code

        IF @ref_table = 'STU'
            SELECT    stu_code,
                stu_unit_amount,
                stu_voucher_qty,
                stu_fv
            FROM    T_STU_standard_unit
            ORDER BY stu_code,stu_fv

        IF @ref_table = 'TMO'
            SELECT    tmo_code,
                tmo_label
            FROM    T_TMO_transport_mode
            ORDER BY tmo_label

        IF @ref_table = 'UTY'
            SELECT    uty_code,
                uty_label
            FROM    T_UTY_unit_type
            ORDER BY uty_label

        IF @ref_table = 'VAL'
            SELECT    vou_code,
                val_code,
                val_label,
                val_value,
                val_date,
                val_char
            FROM    T_VAL_value
            ORDER BY val_code

        IF @ref_table = 'VOU'
            SELECT  vou_code,
                vou_label,
                vou_name,
                vou_vat,
                vou_qty_std_env,            -- LRE 2003-11-07 Voucher standart quantity in envelope
                vou_valid_period,
                vou_trigram                -- JFL 2007-10-15
            FROM    T_VOU_voucher
            ORDER BY vou_code

        IF @ref_table = 'VRP'
            SELECT    vrp_code,
                ser_code,
                vrp_label
            FROM    T_VRP_volume_related_price
            ORDER BY vrp_code

        IF @ref_table = 'ZIP'                       -- OVEN - 17.01.2002
            SELECT    post_zip,
                post_office,
                district_town,
                zip_type
            FROM    T_ZIP_zip_post
            ORDER BY post_zip

        IF @ref_table = 'ZTL'                       -- OVEN - 4.42.2002 -- LRE 2003-10-10
            SELECT    ztl_zip,
                ztl_town,
                ztl_zip_type,
                drs_code
            FROM    T_ZTL_zip_town_list
            ORDER BY ztl_zip


        IF @ref_table = 'OPD'                 -- JFL - 22/9/2006
            SELECT     opd_code,
                opd_date,
                opd_number
            FROM T_OPD_open_day
            ORDER BY opd_date


    END



    Jako parametr OPRAVDU je nafest zadano v datasetu 'FCH' -

    EXEC S_RET_reference_tables 'FCH'

    Tohle mam definovaný jako zdroj datasetu.
    EDIT :  podotykam že se to týká pouze pokud vyplňuji zdroj PARAMETRU, pokud dataset zvolim pro samotny report tak je to O-K. (když zobrazuji data z tohohle datasetu na report - kolonky atd jsou spravně, ale jen pokud chci zvolit tento dataset jako zdroj parametrů)
    2. června 2008 7:37
  •  

    Co Vám zachytil profiler?

    Když změníte pořadí IFů ve storce, změní se Vám chování?

    5. června 2008 20:41
    Moderátor
  • Nedojde ke změně...( EDIT : aby bylo dobre pochopeno nedojde ke zmene k lepsimu, pouze se zmeni vysledek - ale vzdycky zustane prvni select ... ) Ale je to tak i u těch nejprimitivnějších procedur když je tam podmínka... Pokaždé ji to ignoruje a odpoví to prvním selectem v proceduře...
    6. června 2008 5:53
  •  

    Co zachytíte přesně tím Profilerem? Volá se ta storka, nebo se tam posílá přímo ten SELECT?

    Pokud teda přehodíte první dva IF, tak zase dostanete výsledek toho nově prvního?

    6. června 2008 21:06
    Moderátor
  • SET FMTONLY OFF; SET FMTONLY ON;EXEC S_RET_reference_tables 'FCH' SET FMTONLY OFF;


    Tohle mi zachyti profiler, omlouvam se ze odpovidam tak opozdene, nicmene funkcnost tohoto fora je velmi náhodná :-(
    EDIT: Tak když prohodim IFy tak se opět veme PRVNI select co je v ty storce ...
    10. června 2008 6:46
  • Okej, takže stačí napsat do datasetu

    Code Snippet
    SET FMTONLY OFF;  EXEC ....procedura.... a je to v pořádku :-)



    11. června 2008 7:31
  • Uff, tak to bych nečekal. Zřejmě BUG v ReportingServices...

     

    17. června 2008 14:22
    Moderátor