select p.ts::date, count(distinct p.obj_uuid) as unique_vm_cnt, count(distinct p.obj_uuid) FILTER (WHERE p.value=1) as unique_vm_cnt_on, round((sum(p.value)/12.)::numeric,1) as vm_h, -- 5 minute sampling round((sum(p.value)/12.*32.18)::numeric,2) as cost, round((sum(p.value)/12./24)::numeric, 1) as avg_roundclock_vm from gpu.vm JOIN gpu.vm_power_state p on (vm.obj_uuid=p.obj_uuid) where 1=1 AND p.ts >= AND p.ts < AND vm.client_id like GROUP BY p.ts::date ORDER BY 1 qComputing:#getTickCount()-request.startTickCount# select max(capacity_resource.timestamp) as dt_load from ngcloud_ru.capacity_resource qComputingAge:#getTickCount()-request.startTickCount# qCharge:#getTickCount()-request.startTickCount# Отчет по PAYG Факт потребления по основной базе биллинга, спецификации из DWH. Без детализации по бакетам, VDC и т.д. Все запросы кэшированы на 25 минут.
Внимание! округление вверх при расчете метрик get, put S3. Расчетные суммы могут содержать погрешности округления, поэтому окончательный расчет стоимости (количество * цену) должен выполняться в бухгалтерской программе. Если у клиента больше 1 действующего допника с услугами PAYG, то данные в отчете могут быть замножены, в этом случае считать вручную
Даты актуальности пока проверять вручную. Обращать внимание на замножение строк.
Период с по Только PAYG checked/> WZ по вхождению, с регистром Код по вхождению
Часов в периоде: #hours# Строк в отчете: #qCharge.recordCount#
Актуальность данных: VCD Computing: class="err">>#dateFormat(qComputingAge.dt_load,'YYYY-MM-DD')# #timeFormat(qComputingAge.dt_load,'HH:mm:ss.lXX')# VCD Storage: class="err">>#dateFormat(qStorageAge.dt_load,'YYYY-MM-DD')# #timeFormat(qStorageAge.dt_load,'HH:mm:ss.lXX')# S3 хранение: class="err">>#dateFormat(qS3VolAge.dt_load,'YYYY-MM-DD')# #timeFormat(qS3VolAge.dt_load,'HH:mm:ss.lXX')# S3 операции и трафик: class="err">>#dateFormat(qS3OpsTrfAge.dt_load,'YYYY-MM-DD')# #timeFormat(qS3OpsTrfAge.dt_load,'HH:mm:ss.lXX')#
class="gray">
Услуга Артикул специф. Кол-во специф. Артикул метр. Детализация Кол-во метр. Free Tier. Опл. объем Ед.изм. Цена ₽ со скид., с НДС Стоимость ₽ с НДС     Компонент Польз. наим. GPL с НДС Скидка% Дата НОУ Дата КОУ Ключ строки Сырая метрика Приведен­ная метрика Цена ₽ до ск. с НДС Цена ₽ co ск. с НДС без окр. Service Quantity Service Discount Component Quantity Component Discount Договор Допник Сделка Конечник
#wz# #contragent# (сводка) ответственный: class="err">#responsible# #responsible_email#
#currentRow# #abstract_service#: #modifier# style="background:lightgreen;color:black;">#s_code# "err r""r">#component_quantity# #m_code# #dimension1# #request.roundSafe(metric,3)# #free_tier# #unit# [#ed_izm#] #gaussianRound(discounted_price,2)# #component# #user_description# #gaussianRoundSafe(price,2)# #component_discount# #dateFormat(serviceStart,'YYYY-MM-DD')# #dateFormat(serviceEnd,'YYYY-MM-DD')# #line_key# #request.roundSafe(raw_metric,3)# #request.roundSafe(metric,3)# #price# #discounted_price# #service_quantity# #service_discount# #component_quantity# #component_discount# #contract# #additional_agreement# #deal# #WZE#
Итого #code#: #round(final_metric_dimension_1,3)# #free_tier# #max(ceiling(final_metric_dimension_1) - free_tier, 0)# #unit# [#ed_izm#] #current_price# #gaussianRoundSafe(cost_dimension_1,2)#
Итого #wz# #contragent#: #accum_cost_svc#
string function gaussianRoundSafe(any num, numeric precision = 0, string default="") { return (isNumeric(arguments.num)) ? gaussianRound(arguments.num, arguments.precision) : arguments.default; } function gaussianRound(numeric number, numeric precision = 0) { var factor = 10 ^ precision; var scaledNumber = number * factor; var absScaled = abs(scaledNumber); var sign = sgn(scaledNumber); var floored = int(absScaled); // If it's not ending in exactly .5, use standard rounding or precision scaling if (absScaled - floored != 0.5) { return round(number * factor) / factor; } // If it is exactly .5, round towards the nearest even number if (floored % 2 != 0) { // Nearest even is UP return (floored + 1) * sign / factor; } else { // Nearest even is DOWN return floored * sign / factor; } }