2016-04-01 1 views
2

Я работаю над проектом в SAS EG (7.1), которая включает в себя процесс зависимости и параллельное выполнение, как показано ниже:SAS Руководство предприятия - процесс зависимость и параллельное выполнение

enter image description here

У меня есть следующие вопросы :

  1. Есть ли способ получить или установить отношения между процессами программным путем (т.е. process_C -> program_D)? Техническое обслуживание становится проблематичным для сложных проектов. В идеале я хотел бы иметь возможность повторно создавать связи между процессами из внешней таблицы.
  2. Я запускаю весь процесс с помощью опции «Запуск ветки от <>». Предположим, что у нас есть только 2 процессора. Есть ли способ установить порядок выполнения между process_A, B, C? Критическим путем для всего потока является «begin -> process_C -> process_D -> end», поэтому мы хотели бы, чтобы он начинался с process_C, чтобы обеспечить минимальное время выполнения.

Благодарим вас заранее.

+0

Если вы еще этого не сделали - я бы посоветовал вам также спросить на community.sas.com, поскольку некоторые из таких людей, как Крис Х, вероятно, знают больше, чем кто-либо здесь; у нас есть только несколько пользователей EG. – Joe

ответ

1

Для 1, я думаю, что ответ «нет», если вы имеете в виду хорошо определенный программный метод SAS. Во всяком случае, для относительно ограниченной информации и примера, которые вы указали выше. Больше может быть возможно с сервером метаданных, а не с моей областью знаний.

может сделать некоторые из этого, по крайней мере, используя скрипты через Powershell или VBScript. API EG достаточно широко открыт и не все, что сложно использовать. Я не буду предлагать, как мое понимание этого также ограничено, но похоже, что нужно делать то, что вы предлагаете, хотя, вероятно, не easy.


Для вашего второго пункта:

Во-первых, EG обычно работает «сверху вниз», если он не имеет никакой другой информации о том, как обрабатывать конкретный выбор. Поэтому поставьте c-> d выше a/b, чтобы сначала обработать его.

Во-вторых, вы можете использовать условную обработку. Должна быть макрокоманда, которая сообщает вам, сколько у вас cpus (& SYSNCPU на моей машине, надеюсь, что и в других версиях). Вы можете использовать это значение для условной привязки к A, а затем B, в противоположность A + B одновременно. Я не уверен, насколько легко это было бы сделать гибким способом.