powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / А как правильно вызывать UDF?
19 сообщений из 19, страница 1 из 1
А как правильно вызывать UDF?
    #32581856
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишу в 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
А как правильно вызывать UDF?
    #32581925
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И на чем вообще можно написать UDF для MDX? На C# это возможно?
...
Рейтинг: 0 / 0
А как правильно вызывать UDF?
    #32582092
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ирина, я сейчас пишу UDF функцию.
Не знаю в каком формате возвращать данные чтобы получился сет из четырех числе
...
Рейтинг: 0 / 0
А как правильно вызывать UDF?
    #32582094
Ирина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
А как правильно вызывать UDF?
    #32582099
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я пишу на VB6
...
Рейтинг: 0 / 0
А как правильно вызывать UDF?
    #32582103
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема с подключением разрешилась.

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

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
А как правильно вызывать UDF?
    #32582111
Ирина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению, результатом 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
А как правильно вызывать UDF?
    #32582130
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ирина, а output параметры поддерживаются?
...
Рейтинг: 0 / 0
А как правильно вызывать UDF?
    #32582152
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как правильно в бейсике написать входящий параметр, если это массив?
...
Рейтинг: 0 / 0
А как правильно вызывать UDF?
    #32582166
Ирина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Old NickИрина, а output параметры поддерживаются?

Нет.

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

Ирина

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

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

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

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

Ирина

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

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

Public Static Function AggregateCustomersByVisits(ByRef a() As Variant) As Variant
AggregateCustomersByVisits = 0
End Function
...
Рейтинг: 0 / 0
А как правильно вызывать UDF?
    #32584309
Ирина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема не в 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
А как правильно вызывать UDF?
    #32585066
Фотография Old Nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А такой вариант тоже не помог

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

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

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

Ирина

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


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