Обработка неиспользуемых листов
Преимущества:
- Повышение производительности
- Уменьшение объектов для тех. поддержки
- Уменьшение визуального шума
Цель
Здесь есть три основные цели:
- Удалить (или возможно изменить) неиспользуемые «базовые» листы приложения. Это позволит увеличить сосредоточенность внимания на тех листах и объектах, которые действительно нужны и используются. Также, убрать беспорядок, и повысить производительность сайта.
- Держать листы «Сообщество» (Community sheets) под контролем. В больших средах, где включена возможность создавать личные листы, количество частных (личные листы в опубликованном приложении), а также листов сообщества может быстро выйти из-под контроля, особенно если «базовые» листы приложения не покрывают запросов конечного пользователя, заставляя его создавать свои собственные листы.
- Выявить причины, «почему» пользователи не используют определенные «базовые» листы и/или почему они создают и публикуют множество листов сообщества, поскольку содержимое этих страниц потенциально может/могло быть частью опубликованного приложения.
Предлагаемые предварительные действия
Журнал по аудиту
Начиная с релиза февраль 2019, добавили улучшение, включающее по умолчанию логирования использования листов. Это дает возможность оценивать использование листов, а также управлять количеством листов в приложениях, ограничивая их только теми, что используются.
Убедитесь, что Audit Activity log level установлен на Basic для каждого движка.
Примечание
Хотя это настройка по умолчанию, администратору Qlik все равно рекомендуется убедиться, что выбрано в данный момент для текущей среды.
Монитор операций
На этой странице используется Монитор операций (Operations Monitor). Пожалуйста, обратитесь к странице Монитора операций для ознакомления с соответствующей документацией.
Убедитесь, что Монитор операций работает
Перейдите к приложениям Мониторинга (Monitoring apps) и нажмите кнопку «Подробности» (значок информации) рядом с приложением «Монитор операций». Убедитесь, что данные приложения актуальны.
Если «Монитор операций» не обновлен, обратитесь к документации Монитора операций для получения сведений о настройке и действиях по устранению неполадок.
Выявление неиспользуемых листов
Информация об использовании листов отображается в Мониторе операций на листе «Использование листов» (Sheet usage).
В качестве примера мы выберем приложение «Информационную панель телеметрии» (Telemetry Dashboard) на одном из наших редко используемых внутренних серверов. Мы видим, что к базовому листу профилирования приложений (App Profiling) не обращались уже почти ровно год.
Рекомендуется, добавить поле «Владелец» (App Owner) в таблицу «Использование листов» (Sheet Usage), поскольку в этой таблице уже содержится соответствующая информация, необходимая для отчета об использовании, а поле «Владелец» даст информацию о том, к кому обращаться.
Что касается временных рамок для листов, которые не используются (или используются минимально), рекомендуется выбрать значение > 90 дней в поле «Диапазон последний активности» (Latest Activity Range), но вы можете выбрать тот, что лучше подходит вашей организации.
Предлагаемые действия
После того, как таблица построена и определены фильтры и временные рамки, предлагается связаться с владельцами вручную или программно через что-то вроде NPrinting. Рекомендуется, чтобы ответственность за решение о том, что делать с этими неиспользуемыми листами, лежала на владельце. Следовательно, владельцы приложений могут нести ответственность за то, чтобы связаться с владельцами неиспользуемых листов сообщества для их индивидуальной очистки. «Базовые» листы следует рассматривать как наиболее важные листы, к которым следует обращаться, а за ними следует листы сообщества.
В дополнение к вышесказанному, вполне возможно, что пользователи не используют листы, потому что они потенциально не расположены (упорядочены) должным образом, пользователи не знают о них, не понимают, как их использовать, или возможно, не интересуются данными, представленными на них. Вместо того, чтобы просто удалить их, владельцам приложений рекомендуется понять, почему они не используются для улучшения приложений и общего взаимодействия с Qlik.
Массовое удаление листов сообщества
Для приведенного ниже фрагмента сценария требуется Qlik CLI для Windows.
Примечание «Базовые» листы никогда не следует удалять программно.
Примечание По возможности всегда следует удалять листы сообщества вручную, оставив эту ответственность владельцу приложений. При этом, если потенциально есть тысячи листов сообщества, которые необходимо удалить, и это первый раз, когда организация запускает такой процесс, можно программно удалить их. Как правило, это будет разовая операция, выполняемая не чаще раза в месяц, для своевременной поддержки порядка.
Приведенный ниже скрипт отметит все листы сообщества тегом UnusedCommunitySheet. Необходимо подготовить, файл Excel (XLSX), в котором указаны идентификаторы листы с названием столбца Sheet id, экспортированные до этого с помощью приложения Монитора операций (Operations Monitor) и листа «Использование листов» (Sheet Usage).
В приведенном ниже скрипте предполагается, что желаемый Тег уже создан, например UnusedCommunitySheet.
Скрипт для пометки тегами неиспользуемых листов сообщества
# Требуется модуль ImportExcel # Требуется: `Install-Module -Name ImportExcel` # Функция пометки листов с id из Excel # Предполагается, что тег существует, например, UnusedCommunitySheet # Код проверки GUID, на который имеется ссылка: https://pscustomobject.github.io/powershell/functions/PowerShell-Validate-Guid-copy/ ################ ## Параметры## ################ # Предполагается, что используются учетные данные по умолчанию для Qlik CLI для Windows Connection # имя машины $computerName = '<machine-name>' # leave empty if windows auth is on default VP $virtualProxyPrefix = '/default' # set the number of days back for the app created date # fully qualified path to excel file with sheet ids $inputXlsxPath = '<absolute file path>/<filename>.xlsx' # column number of sheet id column in Excel file $sheetIdColumnNumber = '9' # the desired name of the tag to tag sheets with - it must exist in the QRS $tagName = 'UnusedCommunitySheet' # directory for the output file $outFilePath = 'C:\' # desired filename of the output file $outFileName = 'tagged_community_sheets' ################ ##### Main ##### ################ # set the output file path $outFile = ($outFilePath + $outFileName + '.csv') # set the computer name for the Qlik connection call $computerNameFull = ($computerName + $virtualProxyPrefix).ToString() # if the output file already exists, remove it if (Test-Path $outFile) { Remove-Item $outFile } # function to validate GUIDs function Test-IsGuid { [OutputType([bool])] param ( [Parameter(Mandatory = $true)] [string]$ObjectGuid ) [regex]$guidRegex = '(?im)^[{(]?[0-9A-F]{8}[-]?(?:[0-9A-F]{4}[-]?){3}[0-9A-F]{12}[)}]?$' return $ObjectGuid -match $guidRegex } # import sheet ids from excel $data = Import-Excel $inputXlsxPath -DataOnly -StartColumn $sheetIdColumnNumber -EndColumn $($sheetIdColumnNumber + 1) # validate GUIDs and only use those (handles nulls/choosing wrong column) $sheetIds = $data | foreach { $_.psobject.Properties } | where Value -is string | foreach { If(Test-IsGuid -ObjectGuid $_.Value) {$_.Value} } # connect to Qlik Connect-Qlik -ComputerName $computerNameFull -UseDefaultCredentials -TrustAllCerts # add headers to output csv Add-Content -Path $outFile -Value $('SheetObjectName,SheetObjectSheetId,SheetObjectAppId,SheetObjectAppName') # GET desired tag JSON $tagsJson = Get-QlikTag -filter "name eq '$tagName'" -raw # get the id of the tag $tagId = $tagsJson.id # if the tag exists if($tagsJson) { # for each tag foreach ($sheetId in $sheetIds) { # GET the object, ensuring it is a community sheet $sheetObjJson = Get-QlikObject -filter "published eq true and approved eq false and id eq $sheetId" -full -raw # if the object exists and is a community sheet if ($sheetObjJson) { # set a flag to check if the tag is already assigned to the sheet $tagAlreadyThere = $false # get the current tags assigned to sheet, if any $currentTags = $sheetObjJson.tags $currentTags # for each tag foreach ($tag in $currentTags) { # if the target tag is already there, set the flag to "true" if ($tagId -eq $tag.id) { $tagAlreadyThere = $true break } else { continue } } # get the sheet name, app id, and app name $sheetObjName = $sheetObjJson.name $sheetObjAppId = $sheetObjJson.app.id $sheetObjAppName = $sheetObjJson.app.name # if the tag isn't already there, add it if (!$tagAlreadyThere) { $sheetObjJson.tags += $tagsJson # convert to JSON for the PUT $sheetObjJson = $sheetObjJson | ConvertTo-Json # PUT the sheet with the new tag Invoke-QlikPut -path /qrs/app/object/$sheetId -body $sheetObjJson } # write output Add-Content -Path $outFile -Value $($sheetObjName + ',' + $sheetId + ',' + $sheetObjAppId + ',' + $sheetObjAppName) } # the sheet is not a community sheet else { $sheetId + ' is not a community sheet. Skipping.' } } } # the tag doesn't exist else { "Tag: '" + $tagName + "' doesn't exist. Please create it in the QMC." }
Скрипт для удаления листов с тегами
Примечание Настоятельно рекомендуется сделать резервную копию вашего сайта и приложений, прежде чем начинать программное удаления листов. Удаленные листа нельзя будет вернуть. Указатели листов хранятся в базе данных репозитория (qrs), а листы находятся внутри самих qvfs.
Чтобы полностью удалить листы как из приложения, так и из базы данных репозитория, необходимо использовать Qlik Engine JSON API. Для работы с этим API в скрипте примере используется Enigma.js.
Примечание Если вы будете использовать QRS API для удаления листов вместо Engine API, будут удалены только «указатели» на эти листы – сама информация о листах, хранящаяся внутри qvf, не будет удалена. Поэтому необходимо использовать именно Engine API для программного удаления, поскольку он очищает и то, и другое.
Требования
- NodeJS
NodeJS используется для взаимодействия с Qlik Engine JSON API. Чтобы убедиться, что NodeJS установлен и правильно настроен, выполните в cmd.exe следующие команды: cmd.exe:
- node --version
- npm --version
ШАГИ
-
Загрузите отсюда указанные ниже файлы и поместите их в нужную папку.
- remove_tagged_community_sheets.js
- package.json
- Измените следующие обязательные переменные в remove_tagged_community_sheets.js
- host
- TAG_TO_SEARCH_FOR
- Откройте командную строку (cmd.exe) и перейдите к папке на шаге 1.
- Введитеnpm install
- Чтобы запустить программу, введите node remove_tagged_community_sheets.js
- Следите за log.txt и output.csv