Welcome to Sign in | Join | Help
in Search

Agregare diferita pe diverse dimensiuni

Last post 03-19-2009, 10:55 AM by B_gd_n[ ]Sahlean. 6 replies.
Sort Posts: Previous Next
  •  12-10-2008, 11:43 AM 6359

    Agregare diferita pe diverse dimensiuni


    Am cautat fara succes in tot felul de surse, dar nu am gasit cum pot face ca o anumita valoare sa se agrege diferit pe unele dimensiuni.

    Exemplu concret:
    -avem un tabel cu structura

    Pe linii - Produs (dimensiune)
    Pe coloane - Client (dimensiune)
    Masura - Valoare

    Structura care ar trebui sa o obtin din cub:

    Produs               Ceapa              Cartofi               Mere           TOTAL

    Clienti                
    Marius                 10                       20                  30               60
    Gogu                   20                       10                   0                30               
    Gigel                     5                          7                    6                  6  
    TOTAL                 11,66                  12,3                12               32         

    Deci pe linie - agregarea e suma, dar pe coloane - agregarea e medie.
  •  12-11-2008, 2:25 PM 6382 in reply to 6359

    Re: Agregare diferita pe diverse dimensiuni

    Deci inteleg ca tu vinzi produsele 'Marius', 'Gogu' si 'Gigel' unor clienti numiti 'Ceapa' si 'Cartofi' ?
    Posteaza te rog structura tabelelor, DDL-ul cu care le creezi si DML-ul cu care le populezi.

    http://rusanu.com
  •  03-18-2009, 4:26 PM 6917 in reply to 6359

    Re: Agregare diferita pe diverse dimensiuni

    O solutie ar fi utilizarea membrilor calculati, iar acolo scrii un MDX care sa tina cont daca e un total (o suma agregata) pe dimensiune.
  •  03-18-2009, 4:43 PM 6918 in reply to 6917

    Re: Agregare diferita pe diverse dimensiuni

    Când se ajunge la crearea măsurilor se poate adăuga o măsură calculată bazată pe funcţia de agrgare AVERAGE OVER TIME.  La tabela de fapte se adauga NEW NAMED CALCULATION unde la Expression se scrie formula care se calculează iar aceasta poate fi: [Ceapa]+[Cartofi]+[Mere].

    Înainte de toate acestea ar fi bine să se răspundă la întrebarea adresată de Remus.

     


    Cătălin D.
  •  03-19-2009, 9:23 AM 6922 in reply to 6359

    Re: Agregare diferita pe diverse dimensiuni

    Serj K:

    Am cautat fara succes in tot felul de surse, dar nu am gasit cum pot face ca o anumita valoare sa se agrege diferit pe unele dimensiuni.

    Exemplu concret:
    -avem un tabel cu structura

    Pe linii - Produs (dimensiune)
    Pe coloane - Client (dimensiune)
    Masura - Valoare

    Structura care ar trebui sa o obtin din cub:

    Produs               Ceapa              Cartofi               Mere           TOTAL

    Clienti                
    Marius                 10                       20                  30               60
    Gogu                   20                       10                   0                30               
    Gigel                     5                          7                    6                  6  
    TOTAL                 11,66                  12,3                12               32         

    Deci pe linie - agregarea e suma, dar pe coloane - agregarea e medie.

    Nu cred ca poti rezolva problema doar in MDX sau/şi din server-ul Analysis Services.
    Soluţia ar fi să apelezi interogarea MDX din T-SQL sau rezultatele generate din interogarea MDX să le duci într-un generator de rapoarte ...

    În cazul tău, poţi încerca să adaptezi această soluţie care pentru mine a funcţionat:
    sp_configure 'show advanced options' , 1
    RECONFIGURE
    GO
    sp_configure 'ad hoc distributed queries' , 1
    RECONFIGURE
    GO

    SELECT 1 AS Aux, CAST("[Produs].[Produs].[Grupa].[MEMBER_CAPTION]" AS VARCHAR(255)) AS Produs,
    CAST(ISNULL("[Timp].[Calendar].[An].&[2005]",0) AS MONEY) AS Vanzari2005,
    CAST(ISNULL("[Timp].[Calendar].[An].&[2006]",0) AS MONEY) AS Vanzari2006,
    CAST(ISNULL("[Timp].[Calendar].[An].&[2007]",0) AS MONEY) AS Vanzari2007
    FROM OPENROWSET
    ('MSOLAP',
    'DATASOURCE=localhost;Initial Catalog=BazaDeDateAS;',
    'SELECT {[Produs].[Produs].[Grupa]} ON ROWS,{[Timp].[Calendar].[An]} ON COLUMNS FROM CubVanzari WHERE Valoare') AS Cub

    UNION ALL
    SELECT 2 AS Aux, 'Total' AS Total, AVG(Vanzari2005) AS Medie2005, AVG(Vanzari2006) AS Medie2006, AVG(Vanzari2007) AS
    FROM
    (
    SELECT CAST("[Produs].[Produs].[Grupa].[MEMBER_CAPTION]" AS VARCHAR(255)) AS Produs,
    CAST(ISNULL("[Timp].[Calendar].[An].&[2005]",0) AS MONEY) AS Vanzari2005,
    CAST(ISNULL("[Timp].[Calendar].[An].&[2006]",0) AS MONEY) AS Vanzari2006,
    CAST(ISNULL("[Timp].[Calendar].[An].&[2007]",0) AS MONEY) AS Vanzari2007
    FROM OPENROWSET
    ('MSOLAP',
    'DATASOURCE=localhost;Initial Catalog=BazaDeDateAS;',
    'SELECT {[Produs].[Produs].[Grupa]} ON ROWS,{[Timp].[Calendar].[An]} ON COLUMNS FROM CubVanzari WHERE Valoare') AS Cub
    ) AS TsqlQuery
    Medie2007
    ORDER BY Aux

    EXEC sp_configure 'ad hoc distributed queries' , 0
    RECONFIGURE
    GO

    sp_configure 'show advanced options' , 0
    RECONFIGURE
    GO

  •  03-19-2009, 10:24 AM 6925 in reply to 6922

    Re: Agregare diferita pe diverse dimensiuni

    Nu am folosit aşa ceva însă se poate modifica o măsură la proprietatea AggregateFunction (click dreapa pe o măsură) şi în loc de sum (funcţia de agregare default) se poate selecta AverageOfChildren. Însă atenţie pentru că trebuie legată de o dimensiune de tip TIME şi asta pentru că funcţia de agregare amintită are un comportament semiaditiv (http://msdn.microsoft.com/en-us/library/ms175356.aspx).

    pt mai multe detalii: http://groups.google.com/group/microsoft.public.sqlserver.olap/msg/c662e201b99678bc?pli=1

    (alternativa expusă în link, pentru a nu se folosi o dimensiune de tip time, se pot adăuga măsuri de tip COUNT şi SUM şi una care să facă SUM()/COUNT()).


    Cătălin D.
  •  03-19-2009, 10:55 AM 6926 in reply to 6925

    Re: Agregare diferita pe diverse dimensiuni

    Cred ca omul vrea ca valorile agregate Client + Produs să fie obţinute prin însumare (funcţia agregată SUM) şi doar TOTALurile de la produse (de exemplu) să fie o medie. Îmi dau şi eu cu presupusul pentru că cerinţele nu sunt suficient de clare.
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems