:: Visual Foxpro, Foxpro for DOS
запрос OLAP через ADOMD
AndyNigmatec
Автор

Сообщений: 1573
Откуда: Волгоград
Дата регистрации: 28.06.2015
Вопрос наверное не совсем по фоксу, но поскольку покамест другого не одолел, то делаю по старинке в "горячо любимом" )))

Кратко предыстория: затеялись большие начальники в мск (головное предприятие) все "расширить и углУбить" в связи с чем были найдены соответствующие люди - и запилили OLAP-сервер настроив там соответствующий (ну как они думают нашей специфике куб. Ессно теперь все обязаны пользовать и радоваться.

Денек подр...помучившись с работой сего добра в экселе стало ясно что это мягко говоря неудобно. В этой связи пришлось малость помучить гугль на предмет иметь хотя бы общее представление о сути вопроса. Инет - сила, и возможное решение практически сразу всплыло - MDX-запросы. Вопчем вот с ними родимыми и знакомлюсь мал-по-малу. Общий принцип уловил, далее - как пойдет.

Теперь к сути, подключиться и выполнить пару-тройку запросов удалось. Делал (не дословно, но близко) так:

TEXT TO lcQueryText TEXTMERGE NOSHOW
WITH
MEMBER [Measures].[docsum0] AS ([Measures].[SalesAmt])-([Measures].[RetnSalesAmt])
MEMBER [Measures].[sk] AS ([Measures].[DiscMAmt]+[Measures].[DiscGAmt])
SELECT
{
[Measures].[DelayWDMax],
[Measures].[docsum0],
[Measures].[SalesGoodsQty],
[Measures].[sk],
[Measures].[NProfitsAmt],
[Measures].[PaysAmt]
} ON COLUMNS,
NON EMPTY
(
[Clients].[ClientId].[ClientId],
[Clients].[PriceList].[PriceList]
) ON ROWS
FROM
[Sales]
WHERE
({[Dates].[YMD].[Day].&[<<lcTextDate1>>]:[Dates].[YMD].[Day].&[<<lcTextDate2>>]})
ENDTEXT
lcADODBconnection = CreateObject("ADODB.Connection")
lcADODBconnection.ConnectionString = "...тра-та-та...."
TRY
lcADODBconnection.Open()
CATCH TO loErr
MESSAGEBOX(loErr.message)
ENDTRY
IF lcADODBconnection.State=1
loOLAPCellSet = CreateObject("ADOMD.Cellset")
loOLAPCellSet.ActiveConnection = lcADODBconnection
loOLAPCellSet.Open(lcQueryText)
IF loOLAPCellSet.State=1
...
тут обходим нужные loOLAPCellSet.Axes(i).Positions(j).Members(k)
и
loOLAPCellSet.Item(jk).Value
...
loOLAPCellSet.Close()
ENDIF
lcADODBconnection.Close()
ENDIF

В чем вопрос: почему-то значения некоторого столбца [SalesGoodsQty] (которые предполагаются числовыми - это кол-во товара)
loOLAPCellSet.Item(jk).Value - не определены, хотя его loOLAPCellSet.Item(jk).FormattedValue содержит верное строковое представление целого числа, типа " 166" ... другие же значения (суммы отгрузки и прочее - там все нормально сидит в .Value ).

Никак не пойму что я упустил из виду, может кто натолкнет на путь истинный?



Исправлено 2 раз(а). Последнее : AndyNigmatec, 23.09.17 12:27
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 22 qw2 FaustGreen  (Гостей: 20)

© 2000-2024 Fox Club 
Яндекс.Метрика