Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / А как правильно вызывать UDF? / 19 сообщений из 19, страница 1 из 1
29.06.2004, 17:37
    #32581856
Old Nick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А как правильно вызывать UDF?
Пишу в MDX Sample Application

use library Class1.AggregateCustomersByVisits

with set s1 as 'AggregateCustomersByVisits(SetToArray(Customers.CustomerKey.Members))'
select
{Measures.Population} on columns,
Crossjoin({Sections.Members}, s1) on rows
from Freq

но происходит ругань:

Unable to open cellset

Syntax error, expecting end of statement but found extra text, near: '.AggregateCustomersByVisits

Что не так я написал?
...
Рейтинг: 0 / 0
29.06.2004, 17:57
    #32581925
Old Nick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А как правильно вызывать UDF?
И на чем вообще можно написать UDF для MDX? На C# это возможно?
...
Рейтинг: 0 / 0
29.06.2004, 19:38
    #32582092
Old Nick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А как правильно вызывать UDF?
Ирина, я сейчас пишу UDF функцию.
Не знаю в каком формате возвращать данные чтобы получился сет из четырех числе
...
Рейтинг: 0 / 0
29.06.2004, 19:38
    #32582094
Ирина
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А как правильно вызывать UDF?
Old Nickuse library Class1.AggregateCustomersByVisits

Вы забили " вокруг имени.

Код: plaintext
Class1.AggregateCustomersByVisits

В АS2000 UDF должен быть COM component, так что по-идее можно написать на C# и зарегистрировать regasm, но во-первых, я так никогда не делала. А во-вторых на VB легче и точно знаешь что правильно зарегистрируешь.


Ирина

----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
29.06.2004, 19:40
    #32582099
Old Nick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А как правильно вызывать UDF?
Я пишу на VB6
...
Рейтинг: 0 / 0
29.06.2004, 19:43
    #32582103
Old Nick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А как правильно вызывать UDF?
Проблема с подключением разрешилась.

написал такую функцию

Public Static Function AggregateCustomersByVisits(ByVal a As Variant) As Variant
Dim result(4) As Integer
result(0) = 1
result(1) = 2
result(2) = 3
result(3) = 4
AggregateCustomersByVisits = result
End Function

и такую

Public Static Function AggregateCustomersByVisits(ByVal a As Variant) As Variant
Dim result As String
result = "1, 2, 3, 4"
AggregateCustomersByVisits = result
End Function

пишет что не может ковертировать выражение в сет.
...
Рейтинг: 0 / 0
29.06.2004, 19:52
    #32582111
Ирина
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А как правильно вызывать UDF?
К сожалению, результатом UDF не может быть массив. Так что первая ф-я работать не будет. Если чесно, то я не очень помню можно ли возвращать Variant, лучше определите ее как строку( As string).
Но самое главное: эта ошибка выдается, потому что строку в сет нужно переводить ф-ей StringToSet:
Код: plaintext
1.
with set s1 as 'StrToSet(AgregateCustomersByVisits(SetToArray(Customers.CustomerKey.Members)))'
Но, в данном случае это тоже не поможет, так вы возвращаете строку не с именами членов и не в правильном синтаске сета( {member1, member2..}), a произвольную строку.

Я бы предложила вернуть строку, а потом на клиенте ее отпарсить.

Код: plaintext
1.
with member measures.x as 'StrToSet(AgregateCustomersByVisits(SetToArray(Customers.CustomerKey.Members)))'



Ирина

----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
29.06.2004, 20:25
    #32582130
Old Nick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А как правильно вызывать UDF?
Ирина, а output параметры поддерживаются?
...
Рейтинг: 0 / 0
29.06.2004, 20:55
    #32582152
Old Nick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А как правильно вызывать UDF?
А как правильно в бейсике написать входящий параметр, если это массив?
...
Рейтинг: 0 / 0
29.06.2004, 21:23
    #32582166
Ирина
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А как правильно вызывать UDF?
Old NickИрина, а output параметры поддерживаются?

Нет.

Old NickА как правильно в бейсике написать входящий параметр, если это массив
Сейчас дойду до работу и пришлю Вам пример.

Ирина

----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
29.06.2004, 21:50
    #32582180
Владимир Штепа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А как правильно вызывать UDF?
Old NickА как правильно в бейсике написать входящий параметр, если это массив?

авторPublic Function MyFunc(ByRef MyStrArray() as String) as String
...
MyFunc = lSomeString
End Function
...
Рейтинг: 0 / 0
29.06.2004, 21:53
    #32582181
Владимир Штепа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А как правильно вызывать UDF?
Old NickА как правильно в бейсике написать входящий параметр, если это массив?

А вообще заведите себе книжку Г. Споффорда "MDX-Solutions with Microsoft Anylysis Services".
...
Рейтинг: 0 / 0
30.06.2004, 00:00
    #32582237
Владимир Штепа
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А как правильно вызывать UDF?
Ирина[quot Old Nick]Сейчас дойду до работу

От стоянки или через всю Краснолуновку пешком? - не ближний свет однако.
Уже 3 часа топаете...
...
Рейтинг: 0 / 0
30.06.2004, 00:15
    #32582243
Ирина
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А как правильно вызывать UDF?
Так Вы же уже ответили.

Ирина

----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
30.06.2004, 10:41
    #32582608
Ирина
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А как правильно вызывать UDF?
Ops, a napisanno-to ne pravilno. StrToArray peredaet v UDF ne imena members, a ih znacheniya. Poetomu

Код: plaintext
1.
Public Function MyFunc(ByRef MyStrArray() as Integer) as String 
zavisit ot togo, kakoj data type imeet vashe measure. Vistors naverno Integer, a sales double.

or
Код: plaintext
1.
Public Function MyFunc(ByRef MyStrArray() as Variant) as String

P.S. Prostite za translit.

Ирина

----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
30.06.2004, 12:30
    #32583032
Old Nick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А как правильно вызывать UDF?
Ирина, а Вы уверены что нужно ByRef писать?

Такая вот процедура выдает результат #ERR

Public Static Function AggregateCustomersByVisits(ByRef a() As Variant) As Variant
AggregateCustomersByVisits = 0
End Function
...
Рейтинг: 0 / 0
30.06.2004, 22:19
    #32584309
Ирина
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А как правильно вызывать UDF?
Проблема не в ByRef, а в типах данных. Вот пример ф-и которая работает с массивом.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Function PrintArray(Values() As Double) As Double
Dim Start As Integer
Dim Finish As Integer
Dim i1, i2 As Integer

Open "c:\myset.txt" For Append As # 1 
        Print # 1 , "1"
Close # 1 

For i2 = LBound(Values,  2 ) To UBound(Values,  2 )
    For i1 = LBound(Values,  1 ) To UBound(Values,  1 )
Open "c:\myset.txt" For Append As # 1 
        If (Not IsEmpty(Values(i1, i2))) Then
            Print # 1 , CStr(Values(i1, i2))
        Else
            Print # 1 , "Empty"
        End If
Close # 1 
    Next i1
Next i2
PrintArray =  1 
End Function


Ирина

----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
01.07.2004, 13:12
    #32585066
Old Nick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А как правильно вызывать UDF?
А такой вариант тоже не помог

Public Static Function AggregateCustomersByVisits(a() As Double) As Double
On Error GoTo lab
AggregateCustomersByVisits = 1
lab:
AggregateCustomersByVisits = 5
End Function

Тоже #ERR
...
Рейтинг: 0 / 0
01.07.2004, 19:43
    #32586098
Ирина
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А как правильно вызывать UDF?
1. А что ошибка говорит?(доубл кликните на нее, и Вы сможете увидеть текст ошибки). Возможно это инфинит рекурсион, тогда нужно попробовать перенести calculated Member с measures на customers, или наоборот.

2. Попробуйте запустить мою UDF, тогда будет видно на какой стадии ошибка, если ошибка внутри UDF.

Ирина

----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / А как правильно вызывать UDF? / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]