Добавление параметров Adomd программно C # - PullRequest
2 голосов
/ 10 февраля 2011

После полудня.

Я создаю веб-приложение и пытаюсь извлечь некоторые данные из куба SSAS.

У меня есть следующий MDX, который я хотел бы скопироватьв C #, но с добавлением нескольких параметров, то есть двух параметров, один для компании 123 и другой для местоположения 1:

@"SELECT NON EMPTY([Dim Unit].[All Units].[Category Group Name]) ON COLUMNS
                    FROM [Info]
                    WHERE ([Dim Company].[All Companies].&[123], 
                    [Dim Location].[All Locations].&[123]&[1])"; 

Теперь я могу запустить это с одним параметром:

 AdomdCommand cmdPDC = conPDC.CreateCommand();
        cmdPDC.CommandText = "SELECT [Dim Unit].[All Units].[Category Group Name].Members ON 0 FROM [Info] WHERE (StrToMember(@P1)";

        string companyid = "123";

        string sP1 = "[Dim Company].&" + company;

    cmdPDC.Parameters.Add(new AdomdParameter("P1", sP1));

Но как мне тогда реализовать второй параметр, например, если я хочу вставить параметр для местоположения?Я размышлял в духе ниже, но я не могу заставить маленького дерьма работать:

AdomdCommand cmdPDC = conPDC.CreateCommand();
        cmdPDC.CommandText = "SELECT [Dim Unit].[All Units].[Category Group Name].Members ON 0 FROM [Info] WHERE (StrToMember(@P1)," + "(StrToMember(@P2))";

        string companyid = "123";
        string locationid = "1";

        string sP1 = "[Dim Company].&" + company;
        string sP2 = "[Dim Location].&" + company + "&" + location;

        cmdPDC.Parameters.Add(new AdomdParameter("P1", sP1));
        cmdPDC.Parameters.Add(new AdomdParameter("P2", sP2));

Любая помощь или совет, с благодарностью полученные.

Ответы [ 2 ]

4 голосов
/ 11 февраля 2011

Решение!

AdomdCommand cmdPDC = conPDC.CreateCommand();
cmdPDC.CommandText = "SELECT NON EMPTY [Dim Unit].[All Units].[Category Name].Members ON 0 FROM [MY CUBE] WHERE (StrToMember(@CompanyId),StrToMember(@LocationId))";

string companyid = "[123]";
string locationid = "[1]";

string sCompanyId = "[Dim Company].&" + companyid;
string sLocationId = "[Dim Location].&" + companyid + "&" + locationid;

cmdPDC.Parameters.Add(new AdomdParameter("CompanyId", sCompanyId));
cmdPDC.Parameters.Add(new AdomdParameter("LocationId", sLocationId));

И несколько маленьких указателей.

Вы можете получить эту ошибку:

"Не удалось разрешить параметр X, так как на него есть ссылкаво внутреннем подвыражении "

Разрешение: вставляя @CompanyId в строку в кавычках, убедитесь, что параметр не заключен в апострофы (') - c # умный и преобразует тип данных и добавляет эти апострофыдля вас.Однако вы не сможете увидеть его в окне наблюдения, и все будет в порядке.

Все элементы возвращены, и может показаться, что ваши параметры игнорируются.

Решение: проверьте самый первый SELECT и убедитесь, что это SELECT NON EMPTY.

0 голосов
/ 05 ноября 2013
SELECT NON EMPTY { 
[Measures].[Phone Count], 
[Measures].[Mail Count], 
[Measures].[Individual Count] 
} ON COLUMNS 
FROM [PyramidReports-US] 
WHERE ( 
 (STRTOSET(@PoliticalGeographyByCD), 
 [Political Geography].[By CD].[State].currentmember ), 
 (STRTOSET(@GenderGender), 
 [Gender].[Gender].currentmember ), 
 (STRTOSET(@ModelAffinityAffinityQuartile), 
 [Model Affinity].[Affinity Quartile].currentmember 
  ) 

Как насчет такого запроса, который использует currentmember для заполнения параметров?

...