2015-09-28 2 views
1

Мы используем Excel 2013 и Power Pivot для сборки модулей, которые состоят из нескольких сводных таблиц, которые вытягивают данные из одной таблицы Power Pivot, которая запрашивает наш склад данных T-SQL.Динамический параметр в элементе Power Pivot

Чтобы упростить и полностью автоматизировать этот модуль, мы хотели создать текстовое поле, которое позволит пользователю вводить значение (например, идентификатор клиента), а затем использовать это значение в качестве параметра в запросе Power Pivot.

Возможно ли передать параметр в запросе Power Pivot, который размещен в текстовом поле вне запроса?

ответ

1

Вместо того, чтобы передавать параметр SQL-запросу источника данных, почему бы не использовать сводную таблицу filter or slicer, чтобы позволить пользователям динамически фильтровать данные? Это намного быстрее, чем обновление данных из источника.

Если по какой-то причине вам нужно передать это непосредственно в запросе источника, you'll have to do some VBA work.

+0

Хотя это будет работать с меньшим набором данных, оно не будет работать, когда набор данных вырастет до нескольких миллионов записей. Когда наши данные фильтруются, это несколько сотен записей, но нефильтрованное, оно становится неуправляемым в Excel (3 миллиона записей). Мы также хотели бы удалить любую информацию, не связанную с этим конкретным модулем (например, данные другого пользователя). – cryocaustik

+0

Power Pivot может обрабатывать многие миллионы записей без проблем. Я сделал очень сложные модели с 40M + строками в таблице основных фактов, которая по-прежнему высокоэффективна. При этом, если вам необходимо реализовать безопасность, передача этого параметра в исходный запрос является неправильным способом. Вы должны либо реализовать безопасность в исходной базе данных, либо использовать табличную модель SSAS вместо Power Pivot, потому что вы также можете реализовать безопасность на уровне строк в этой программе. – greggyb

+0

Вы правы относительно предела размера, я оговорился; Я имел в виду, что мы не хотим превращать файл, который должен быть несколько МБ в файл, который находится над ГБ. Мы могли бесконечно спорить о том, как есть другие способы сделать что-то, но мой вопрос состоял в том, можно ли сделать это с помощью PoverPivot или PowerQuery; если нет, круто, если это возможно, еще лучше! : D – cryocaustik

2

Вы также можете передать слайсер или выбор COMBOBOX к ячейке. Определите имя для этой ячейки. Поместите эту ячейку (и другие, если вы используете несколько текстовых переменных) в таблице. Для удобства я обычно называю эту таблицу «Параметры». Затем вы можете «прочитать» параметры для своего запроса и отбросить их в своих запросах.

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

пусть Parameter_Table = Excel.CurrentWorkbook() {[Name = "Параметр"]} [Содержание], XXX_Value = Parameter_Table {1} [Значение], YYY_Value = Parameter_Table {2} [Значение], ZZZ_Value = Parameter_Table {3} [Значение],

ввести запрос, в котором вместо того, чтобы искать, скажем, вручную набранный в клиенте под названием «BigDataCo» вы замените «BigDataCo» на XXX_Value.

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

+0

Я подам вам эту попытку. Благодарю вас! – cryocaustik

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