![]() |
#21 |
Участник
|
Цитата:
Сообщение от fed
![]() Ну я не вполне понимаю, что считается исходной задачей, но я бы попробовал создать calculated field, которое бы конкатенировало значения аналитик из упомянутых мною таблиц, без использования каких-либо дополнительных view.
Ну и вообще - хотелось просто Mazzy указать, что его представления о финансовой аналитике - несколько устаревшие, мы не знаем заранее, что именно будем выбирать - это делает пользователь, выбирая нужную ему иерархию из атрибутов. по твоему подходу два вопроса: - как вообще можно сделать выборку значений из всей таблицы, зная только recId выбранных атрибутов? я не понимаю, как увязать на уровней связей таблиц имя поля значений с конкретной колонкой в той "всеобъемлющей" таблице (подозреваю хитрый ход на уровне прямого запроса в сикеле?) - как это будет масштабироваться для тех атрибутов, которых ещё нет?
__________________
Felix nihil admirari |
|
![]() |
#22 |
Moderator
|
Цитата:
Сообщение от wojzeh
![]() а что именно непонятно в постановке задачи?
мы не знаем заранее, что именно будем выбирать - это делает пользователь, выбирая нужную ему иерархию из атрибутов. по твоему подходу два вопроса: - как вообще можно сделать выборку значений из всей таблицы, зная только recId выбранных атрибутов? я не понимаю, как увязать на уровней связей таблиц имя поля значений с конкретной колонкой в той "всеобъемлющей" таблице (подозреваю хитрый ход на уровне прямого запроса в сикеле?) - как это будет масштабироваться для тех атрибутов, которых ещё нет? |
|
![]() |
#23 |
Участник
|
Цитата:
допустим, конкатенация - это специфика именно моей задачи, можем и опустить эту часть в рамках более широкого исследования. хотя я не понимаю, как ты собираешься делать динамическую выборку колонок для группировки в аггрегации.
__________________
Felix nihil admirari |
|
![]() |
#24 |
Участник
|
Цитата:
2. другими словами, они и этот пункт начали делать и выкинули? госпади... что за люди. а остальные хитровыделанные таблицы и поля финансовой аналитики остались? и это хитро-кастомное поле для ввода фин.аналитики тоже осталось? а поиск со стороны пользователя то есть? о-о-очень неохота возобновлять виртуальную машину в ажуре и открывать среду разработки. |
|
![]() |
#25 |
Участник
|
__________________
Felix nihil admirari |
|
![]() |
#26 |
Участник
|
по финансовой аналитике насколько я помню не было.
по inventDim - был. |
|
![]() |
#27 |
Участник
|
Ну, не дави из меня слезу, Мань. Про маму твою ничего не скажу. Не знаю. А папашку твоего героицкого видеть приходилось. На фронте он, правда, не воевал, но шнифер был знаменитый. Громил сейфы, будто косточки из компота.
__________________
Felix nihil admirari |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#28 |
Moderator
|
Цитата:
Сообщение от wojzeh
![]() нормальная реакция на уровне рефлексов. покажешь вариант? вот у нас есть только DimensionHierarchy, которую выбрал юзер. дальше как?
допустим, конкатенация - это специфика именно моей задачи, можем и опустить эту часть в рамках более широкого исследования. хотя я не понимаю, как ты собираешься делать динамическую выборку колонок для группировки в аггрегации.
|
|
![]() |
#29 |
Moderator
|
Цитата:
Сообщение от fed
![]()
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
![]() |
#30 |
Участник
|
очень вдохновляют. так-то можно вообще что угодно закодить.
интересно, как быстро это будет работать (вариант с 100500 колонок до неба мне сразу не нравится) кстати, пустые значения нам тоже нужны.
__________________
Felix nihil admirari |
|
![]() |
#31 |
Участник
|
а кто вообще говорил про какие-то формы? хотим через data entity всё показывать наружу, например
__________________
Felix nihil admirari |
|
![]() |
#32 |
Участник
|
Цитата:
X++: /// Each enterprise can expose different dimension attributes. Therefore, we have determine what dimension attributes /// columns are exposed, then concatenate the fields separated by the account delimiter. /// Example: dimensionField1 - + dimensionField2 - + dimensionField3 ... /// </remarks> private static server str displayValue() { str displayValueSql; str accountDelimiterSql; str dimensionValueColumns; str accountDelimiterEscapedSql; SysDictEnum delimiterDictEnum = new SysDictEnum(enumnum(DimensionSegmentDelimiter)); int enumValue = delimiterDictEnum.firstValue(); for (int i = 1; i <= delimiterDictEnum.values(); i++) { str enumLabel = delimiterDictEnum.index2Label(enumValue); accountDelimiterSql += strfmt( "WHEN %1 THEN '%2'\n", delimiterDictEnum.index2Value(enumValue), enumLabel); accountDelimiterEscapedSql += strfmt( "WHEN %1 THEN '%2'\n", delimiterDictEnum.index2Value(enumValue), DimensionSetEntity::generateEscapedDelimiter(enumLabel)); enumValue = delimiterDictEnum.nextValue(enumValue); } // Get the list of all dimension attributes that have metadata columns dimensionValueColumns = DimensionSchemaAndDataSynchronizationUtility::getSynchronizedDimensionValueColumnNames( tablestr(DimensionAttributeValueSet)); if (strLen(dimensionValueColumns) == 0) { // No table extension columns. displayValueSql = SysComputedColumn::returnLiteral(''); } else { str errorMessage = strReplace("@Dimension:DimensionEntitiesDimensionStructureNotCreated", "'", "''"); LanguageId systemLanguageId = SystemParameters::find().SystemLanguageId; // Determine the error message based on system language if (systemLanguageId != '') { errorMessage = strReplace(SysLabel::labelId2String2("@Dimension:DimensionEntitiesDimensionStructureNotCreated", systemLanguageId), "'", "''");; } //Create view sql displayValueSql = strfmt( @" SELECT ( SELECT CASE WHEN NonNullDisplayValue IS NOT NULL THEN NonNullDisplayValue ELSE '%4' END FROM ( -- Remove initial delimiter SELECT STUFF( (SELECT -- Prepend with delimiter and escape internal delimiters DIMENSIONSEGMENTDELIMITER + COALESCE( REPLACE(REPLACE(DIMLIST.DISPLAYVALUE, '\', '\\'), DIMENSIONSEGMENTDELIMITER, DIMENSIONSEGMENTDELIMITERESCAPED), '') FROM (SELECT TOP (1) DH.RECID FROM DIMENSIONHIERARCHY DH JOIN DIMENSIONHIERARCHYINTEGRATION DHI ON DHI.DIMENSIONHIERARCHY = DH.RECID AND DHI.ISDEFAULT = 1 AND DHI.PARTITION = T1.PARTITION WHERE DH.PARTITION = T1.PARTITION AND DH.STRUCTURETYPE = %2 ) AS DH JOIN DIMENSIONHIERARCHYLEVEL DHL ON DHL.DIMENSIONHIERARCHY = DH.RECID AND DHL.PARTITION = T1.PARTITION JOIN DIMENSIONATTRIBUTE DA ON DA.RECID = DHL.DIMENSIONATTRIBUTE AND DA.PARTITION = T1.PARTITION LEFT JOIN (SELECT DIMENSIONATTRIBUTE, DISPLAYVALUE FROM (SELECT * FROM DIMENSIONATTRIBUTEVALUESET DAVS WHERE DAVS.PARTITION = T1.PARTITION AND DAVS.RECID = T1.RECID) P UNPIVOT (DISPLAYVALUE for DIMENSIONATTRIBUTE IN (%3)) AS DIMENSIONVALUECOLUMNNAME ) AS DIMLIST ON DIMLIST.DIMENSIONATTRIBUTE = REPLACE(DA.DIMENSIONVALUECOLUMNNAME COLLATE Database_Default, '.', '$') ORDER BY DHL.DIMENSIONHIERARCHY, DHL.LEVEL_ FOR XML PATH(''), TYPE ).value('(./text())[1]', 'NVARCHAR(MAX)'), 1, LEN(DIMENSIONSEGMENTDELIMITER), '') AS NonNullDisplayValue) AS DisplayValueFormat) FROM (SELECT TOP(1) --Determine the account delimiter CASE DIMENSIONSEGMENTDELIMITER %1 END AS DIMENSIONSEGMENTDELIMITER, --Determine the account delimiter escaped CASE DIMENSIONSEGMENTDELIMITER %5 END AS DIMENSIONSEGMENTDELIMITERESCAPED FROM DIMENSIONPARAMETERS WHERE DIMENSIONPARAMETERS.PARTITION = T1.PARTITION ) AS DIMENSIONPARAMETERS ", accountDelimiterSql, enum2int(DimensionHierarchyType::DataEntityDefaultDimensionFormat), dimensionValueColumns, errorMessage, accountDelimiterEscapedSql); } return displayValueSql; }
__________________
Felix nihil admirari |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|