Разбор формулы

Автор RinatG, 26 мая 2020, 08:40:32

« назад - далее »

RinatG

Добрый вечер,
Пытаюсь сделать трюк из http://blog.atkcg.ru/almanax-vizualizacii-vypusk-19-qlikview-kak-sdelat-dva-znacheniya-v-odnoj-yachejke-tablicy/
Уперся в понимании формулы автора:
 =IF( _СТРОКА <= @(=Count({1}distinct STAT_BRANCH))*2   
   AND Match( FieldValue(`STAT_BRANCH`, Ceil(_СТРОКА/2)),   
                      `@(=CONCAT(distinct STAT_BRANCH, chr(39)&`,`&chr(39) ))`)   
  ,_СТРОКА)

Прошу подсказать, что за оператор @ и какую роль он выполняет?

govorun

Это что-то похожее на интерпритатор числа.
Например при загрузке некоторой строки при отсутствии заголовков (фиксированные записи)
LOAD @1:5 AS id    //значит, что символа с первого по 5-ый будут загружены в поле с именем ID
Если не известны имена полей загружаемой таблицы, а нужно загрузить 1, 4, 7 поля
LOAD
@1,
@4,
@7
FROM...
// где 1, 4, 7 - номера полей таблицы-источника

Ну вот как-то так...


RinatG

Но указанная формула не загружает данные, она вычисляет в Dimention прямой таблицы что то. Компилятор моего QV категорический отказывается принимать "@(=" - часть формулы.

govorun

Не работает - да и бог с ним.
Я с QV ни разу не сталкивался, посему в данном вопросе плохой советчик.
Попробуй заменить @ на $.

RinatG

Govorun попал в точку!
Только хотел поделиться находкой, а он уже предположил верное решение.
В общем делюсь: действительно автор заменил символ $ на @ и немного видоизменил синтаксис функции CONTACT. Обращение к справочнику QV и "математический тык" дали результаты. Верно будет так:
=Match(FieldValue('STAT_BRANCH', 1),$(=CONCAT(distinct chr(39)&STAT_BRANCH&chr(39), ',')))
здесь стоит обратить внимание на знак = без которого она не работает. Знак = необходим для того, чтобы компилятор или интерпретатор QV (не знаю что у него там) в первую очередь сформировал динамический список и только после этого применил функцию Match. Ну как то так.

Яндекс.Метрика