2016-09-08 6 views
0

В настоящее время я работаю с Power BI Desktop и SQL Server 2014 на POC (доказательство концепции), запрошенным моим начальником (), он сказал, что мы были способный делать то, что я прошу, не зная, возможно ли это или нет ...).Вызовите хранимую процедуру из Power BI с параметром DAX

Я могу видеть результат хранимой процедуры в мощности BI, когда я создаю новый источник данных из SQL Server с инструкцией SQL (напечатанного в дополнительные опции)

Запрос: Sql.Database("SERVER\INSTANCE", "DatabaseName", [Query="EXECUTE [dbo].[StoredProcedureName]"])
Источник: How to use SQL Server stored procedures in Microsoft PowerBI?

Я также способен показывать мой логин Windows, используя формулуUSERNAME()DAX.

Мы используем много хранимых процедур, которые принимают вход в систему как параметр, и я знаю, что USERNAME() не будет возвращать то же значение, когда отчет Power BI будет опубликован в Интернете, поэтому мне нужно создать таблицу, которая позволит мне сделать переписку между входом пользователя Windows в свою учетную запись Power BI (адрес электронной почты).

Мой вопрос прост: я хочу знать, могу ли я вызвать хранимую процедуру с помощью Power BI, используя результат USERNAME() в качестве параметра этой хранимой процедуры.

Любой помощь ценится, я совсем застрял в тот момент, когда я не использовал мощность BI перед ...

+0

У других может быть решение, но AFAIK этот сценарий не поддерживается. –

+0

@MikeHoney Я был очень уверен, что он не был поддержан, но стоило ничего не спросить ... Спасибо, что ответили на мой пост – Jae

ответ

1

не есть способ сделать то, что вы просите сделать (возьмите результат USERNAME() в DAX, затем передайте его как параметр хранимой процедуре в Редакторе запросов).

я не знаю способ, чтобы захватить текущую информацию о пользователе из редакторов запросов непосредственно, хотя эта статья имеет некоторые рекомендации, которые могут работать: https://querypower.com/2017/04/03/4-ways-to-get-username-in-power-query/

То, что я скажу, что мощность BI действительно включает строку уровень функция безопасности, которые я настоятельно рекомендую задуматься: https://powerbi.microsoft.com/en-us/documentation/powerbi-admin-rls/

безопасность на уровень строк также может быть реализована в SSAS: https://powerbi.microsoft.com/en-us/documentation/powerbi-desktop-tutorial-row-level-security-onprem-ssas-tabular/

Это потребует изменить свой дизайн таким образом, что вместо того, чтобы иметь хранимую процедуру, которая принимает текст pa для пользователя, а затем возвращать данные только для этого пользователя в то время, когда пользователь запускает отчет, ваша модель вместо этого будет извлекать данные для всех пользователей, а Power BI затем будет использовать RLS для фильтрации результатов для лица, просматривающего ваш отчет.

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

Еще одно преимущество заключается в том, что вы будете использовать встроенные средства обеспечения безопасности, предлагаемые Power BI, а не сворачивание собственного решения с помощью собственных таблиц сопоставления. (Не то, чтобы ваше решение было плохим, но есть больше риска и меньше поддержки, если вы откатываете свое собственное решение на основе собственной таблицы сопоставлений.)

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

Смежные вопросы