PowerApps объединяют связанные таблицы

Я новичок в PowerApps и изучаю реляционные базы данных, прежде чем начинать проект в PowerApps (включая реляционные базы данных). Я пытаюсь выполнить простое соединение двух сущностей (напиток и человек), где у напитка есть поле BuyerID, которое относится к первичному идентификатору «человека». Итак, я попытался ForAll(Filter(drink, (name = "Americano") And (drink.BuyerID = human.PrimaryId) ), Collect(AmericanoDrinkers, {FirstName: human.firstName, LastName: human.lastName})) собрать группу людей, которые принесли американо, но получаю Invalid argument type ошибку с drink.BuyerID = human.PrimaryId. Любые идеи? Я пробовал менять = на in и т. Д. Вроде drink.BuyerID на drink[@BuyerID]. Обратите внимание, что тип данных drink.BuyerID - "Lookup", а human.PrimaryId - целое число. Могу ли я получить эту ошибку из-за разных типов? Также я уверен, что с данными нет ничего плохого, потому что при редактировании сущности напитка в Excel надстройка powerapps показывает связанных людей, когда выбран BuyerID.


person Aidan Williamson    schedule 22.11.2017    source источник


Ответы (3)


Теоретически вы хотите сделать следующее:

ClearCollect(AmericanoDrinkers,
    Filter(human,
        PrimaryId in Filter(drink, name="Americano").BuyerID
            )
        )
    )

На практике, в зависимости от того, какой у вас источник данных для напитков и / или людей, вы можете столкнуться с проблемами делегирования. Я не рекомендую использовать ForAll, если вы можете этого избежать, так как вы рискуете обратиться к источнику данных для каждой строки, тогда как формула, подобная той, которую я предлагаю, будет обрабатываться параллельно (при разрешении делегирования).

Если производительность вышеперечисленного неудовлетворительна, вы также можете попробовать этот двухэтапный подход:

ClearCollect(FilteredIds, GroupBy(Filter(drink, name="Americano"), "BuyerID", "AllRows"));
ClearCollect(AmericanoDrinkers, Filter(human, PrimaryId in FilteredIds.BuyerID))
person Meneghino    schedule 24.11.2017
comment
Хорошая мысль, но я получаю Невозможно автоматически преобразовать это текстовое значение в ошибку записи для PrimaryId, а human.PrimaryId получает Невозможно использовать значения таблицы в этом контексте. Также функция in не делегируется, но это уже другая история. - person Aidan Williamson; 05.12.2017
comment
Я только что протестировал, и мой первоначальный одноэтапный подход должен работать. Вы уверены, что включили .BuyerID? Это превращает таблицу в список значений, поэтому PrimaryId должен быть текстом, а не записью. В любом случае я добавил двухэтапный подход, так что вы даже можете проверить содержимое FilteredIds, чтобы проверить, все ли в порядке. - person Meneghino; 06.12.2017

Проблема заключалась только в настройке, я просто создал новое поле (BuyerID2) в сущности напитков и установил его как числовое значение, а не как поиск, как был BuyerID, и все 3 (мой исходный и два предоставленных Meneghino) решения работал нормально (хотя пришлось сменить drink.BuyerID = human.PrimaryId на BuyerID2 in human.PrimaryId).

person Aidan Williamson    schedule 07.12.2017

Вы можете попробовать использовать Gallery внутри галереи .... Я много раз использовал Gallery внутри галереи, это немного сбивает с толку, но кажется очень логичным и отлично работало для меня.

person Ritveak    schedule 12.07.2019