#powerbi #ssas #ssas-tabular
Вопрос:
У меня есть базы данных SQL Server, для которых я пишу отчеты PowerBI.
Таблицы фактов в этих базах данных могут быть немного громоздкими (1 000 000 000 строк), поэтому я использую табличные службы Analysis Services посередине-в основном для определения разделов с контролируемым обновлением. Отчеты не могут напрямую попадать на серверы SQL, им нужны все эти строки, и отчеты не могут отставать более чем на 15 минут.
Около 90% значений, которые мне нужно показать, — это длительность, которая определяется в базовых таблицах как целые секунды или миллисекунды.
В большинстве случаев эти значения должны отображаться в формате чч:мм:сс.
PowerBI не поддерживает тип длительности (который, по моему мнению, является массивным, массивным WTF), но относительно легко добавить меру в таблицу, содержащую значение длительности в секундах, и преобразовать ее в hh:mm:ss с помощью DAX:
var duration = Sum/Average/Min/Max([SOMEFIELD])
var hours = Int(duration / 60)
var minutes = Int(Mod(duration - (hours * 60), 60) / 3600)
var seconds = RoundUp(Mod(Mod(duration - (hours * 60), 60), 3600), 0)
var h = If(hours > 9, "" amp; hours, Right("0" amp; hours, 2))
var m = Right("0" amp; minutes, 2)
var s = Right("0" amp; seconds, 2)
return If(IsBlank(duration), Blank(), h amp; ":" amp; m amp; ":" amp; s
Эта формула отлично работает при добавлении в качестве меры в PowerBI.
Но, мы говорим о 3-11 разах за отчет, для 150 отчетов. Как некоторые из вас, возможно, уже заметили, некоторые из этих DAX немного нервничают, и я определенно захочу вернуться к ним в какой-то момент-но не 800 раз.
Мой вопрос: как сделать так, чтобы мне не приходилось поддерживать 800 аналогичных копий этого кода?
- Насколько я знаю, нет способа поделиться формулами DAX.
- Сохранение модели PowerBI и ее повторное использование позволяет сохранить модель, которая, насколько я могу судить, не включает в себя локально добавленные меры. Не тогда, когда она основана на табличной модели служб SSAS.
- Поскольку я работаю над табличной моделью служб SSAS, я фактически не могу добавлять поля в модель.
- Я могу добавить поле в табличную модель SSAS и использовать эту формулу DAX, но это не работает-оно решается на сервере SSAS и превращается в текст. Это означает, что вы можете вычислить поле и добавить его, но оно ничего не знает о области действия-вы просто получаете сумму/Среднее значение/Мин/Макс всех строк.
- Установка значения FormatString в поле службы SSAS
hh:mm:ss
не работает, так как это не поле фактического времени и не вычисляемое поле.
Если я что-нибудь сделаю с ним со стороны SSAS, поле появится в виде строки и будет расплющено или полностью лишено контекста, вот что я говорю.
Есть какие-нибудь мысли?
Ответ №1:
Проблема оказалась в том, что я добавлял значения hh:mm:ss в модель через AMO как CalculatedColumn
s, а не Measure
как s.