Skip to content

Instantly share code, notes, and snippets.

View mountaindude's full-sized avatar
🏔️
Bringing DevOps to Qlik Sense - one tool at a time. Hello SenseOps!

Göran Sander mountaindude

🏔️
Bringing DevOps to Qlik Sense - one tool at a time. Hello SenseOps!
View GitHub Profile
@mountaindude
mountaindude / post-to-teams-from-qliksense.qvs
Last active November 25, 2022 06:00
Post to Microsoft Teams from Qlik Sense
// Define webhook for the Teams channel you're posting to.
// You need to create this webhook in Microsoft Teams, then paste the webhook URL in the string below
let vTeamsWebhook = 'https://outlook.office.com/webhook/......';
// You need a data connection called "PostMessageToTeams" for this app to reload correctly.
// >>>>>>>>>>>>>>>>>>>>>>>>>>>
// Define subs
@mountaindude
mountaindude / sense_create_qvd_load_table
Last active November 17, 2022 23:11
QlikView / Qlik Sense code to create table with all QVDs to load later in a script
// List all QVDs that should be loaded
// In this example the QVDs have a filename format of YYYYMMDD.qvd
//
// The rationale for loading QVDs this way, rather than using something like
// load "/some/path/*.qvd" where date > SomeDate
// is that the latter will have to test the date field of all lines within all QVDs in that directory.
// That might take a long time (and it will become slower over time, if new QVDs are added every day), whereas the method
// used in the code below offers (very close to) constant loading time.
//
For each Filename in 'D:\path\to\qvds'
@mountaindude
mountaindude / nicetrace.qvs
Created September 30, 2020 14:01
Qlik Sense NiceTrace function
// This Sub enables prettified output of text to the reload progress window of Qlik Sense.
// Use it to get timestamped trace messages, that also have a prefix that makes them easier
// to spot in the reload progress windows and reload logs.
//
// Usage example:
// call NiceTrace ('This is a debug message, including a variable $(vMetaDataQVDPath)\abc.qvd')
sub NiceTrace (vL.Msg)
// Restify Server CheatSheet.
// More about the API: http://mcavage.me/node-restify/#server-api
// Install restify with npm install restify
// 1.1. Creating a Server.
// http://mcavage.me/node-restify/#Creating-a-Server
var restify = require('restify');
@mountaindude
mountaindude / kubedump.sh
Created February 8, 2021 06:59 — forked from negz/kubedump.sh
Dump Kubernetes cluster resources as YAML
#!/usr/bin/env bash
set -e
CONTEXT="$1"
if [[ -z ${CONTEXT} ]]; then
echo "Usage: $0 KUBE-CONTEXT"
exit 1
fi
@mountaindude
mountaindude / app2json.js
Created June 21, 2016 10:56 — forked from mindspank/app2json.js
Sample use of serializeapp and buildapp #serializer #engineapi
var qsocks = require('qsocks')
var serializeApp = require('serializeapp')
var fs = require('fs-extra')
var Promise = require('promise')
function create(docname) {
qsocks.Connect({appname: docname})
.then(function(global) {
return global.openDoc(docname)
})
@mountaindude
mountaindude / sense_find_max_value_of_field
Created October 11, 2015 05:58
Fastest way of finding max/min values of a field in Sense or QV
// The obvious way of finding the max/min value of a field might something like this:
//
// LOAD max(salesDate) Resident dataTable;
//
// However, if dataTable is very large (hundred of millions of lines or more, with many columns), the above will be
// very slow, as we will end up traversing that entire table.
//
// Instead, the fastest method of achieving the desired result is to load the FieldValue()s.
// We then only look at the values of the salesDate field itself, and not the entire dataTable table.
// Performance gains by many orders of magnitude can be gained by using this method.
@mountaindude
mountaindude / esp32_oled_wifi.md
Created May 8, 2020 03:20 — forked from gabonator/esp32_oled_wifi.md
esp32 TTGO arduino compatible board with 128x64 pixel oled display and Wifi

esp32 TTGO arduino compatible board with 128x64 pixel oled display and Wifi

Front Back Pinout

Device description on banggood

  1. The main control chip using Le Xin ESP32, Tensilica LX6 dual core processor, clocked at 240MHz, computing capacity of up to 600DMIPS, 520 SRAM, 802.11 KB chip b/g/n HT40 Wi-Fi transceiver, baseband, and LWIP protocol stack, Bluetooth (Bluetooth dual-mode integrated
@mountaindude
mountaindude / RegisterNode.ps1
Created August 27, 2019 22:27 — forked from levi-turner/RegisterNode.ps1
Register a Qlik Node using Qlik CLI
<#
Run on the Central
#>
# Connect to Qlik Sense
# See https://github.com/ahaydon/Qlik-Cli/wiki/Establishing-a-connection for more connection options
Connect-Qlik
# Add the Node to the Cluster; store the password element of the response for the ZIP as $password
# nodePurpose: 0 (Production) / 1 (Development) / 2 (Both)
# engineEnabled, proxyEnabled, schedulerEnabled, $printingEnabled, $failoverCandidate as options
$password = New-QlikNode -hostname qlikserver2.domain.local -name qlikserver2 -nodePurpose 0 -engineEnabled -proxyEnabled
@mountaindude
mountaindude / date_variables.qvs
Last active January 23, 2018 10:43
QlikView and Qlik Sense date variables
let vStartOf2ndPreviousQuarter = Date(Floor(QuarterStart(Today(), -2)), 'YYYY-MM-DD');
let vStartOf2ndPreviousQuarterNum = Num(Date(Floor(QuarterStart(Today(), -2)), 'YYYY-MM-DD'));
let vStartOfPreviousQuarter = Date(Floor(QuarterStart(Today(), -1)), 'YYYY-MM-DD');
let vStartOfPreviousQuarterNum = Num(Date(Floor(QuarterStart(Today(), -1)), 'YYYY-MM-DD'));
let vStartOfCurrentQuarter = Date(Floor(QuarterStart(Today())), 'YYYY-MM-DD');
let vStartOfCurrentQuarterNum = Num(Date(Floor(QuarterStart(Today())), 'YYYY-MM-DD'));
let vStartOfPreviousMonth = Date(Floor(MonthStart(Today(), -1)), 'YYYY-MM-DD');