Mathematical calculations
udfMultiplyNumbers(Number1:Number, Number2:Number):Number = Number1 * Number2;
udfDivideNumbers(Number1:Number, Number2:Number):Number = Number1 / Number2;
udfAddNumbers(Number1:Number, Number2:Number):Number = Number1 + Number2;
udfSubtractNumbers(Number1:Number, Number2:Number):Number = Number1 - Number2;
udfCalculateVolumeOfCube(Length:Number, Width:Number, Height:Number):Number = Length * Width * Height;
udfCalculateVolumeOfSphere(PI:Number, Radius:Number):Number = 4 / 3 *PI * Radius ^ 3
udfCalculateAreaOfCircle(Radius:Number,PI:Number):Number = PI * Radius ^ 2
Water Calculations
Working as a hydro operator requires controlling the flow and storage of large volumes of water by monitoring and adjusting the amount of water travelling in water conveyances or passing through a hydraulic turbine to generate electricity.
I thought it would be handy to have functions to caluclate the flow and storage values.
Typical units of flow meaurement include cubic feet per second (CFS), Acre-Feet per day (ACFT/Day).
The typical unit of storage we use is Acre-Feet (ACFT).
There are several formulas to convert from flow to storage and vice-versa. I have created functions to allow the calculations to be made. They are outlined below:
udfCalculateAcreFeetPerDayFromCFS(CFS:Number):Number = udfMultiplyNumbers(CFS, 2);
udfCalculateAcreFeetPerHourFromCFS(CFS:Number):Number = udfDivideNumbers(CFS,12.1);
udfCalculateCFSfromAcreFeetPerDay(ACFTPerDay:Number):Number = udfDivideNumbers(ACFTPerDay,2);
udfCalculateCFSfromAcreFeetPerHour(ACFTPerDay:Number):Number = udfMultiplyNumbers(ACFTPerHour,12.1);
udfCalculateUnitLoadFromCFS(CFS:Number, WaterDutyCFS:Number):Number = udfMultiplyNmbers(CFS, udfDivideNumbers(WaterDutyCFS,1000));
udfCalculateUnitLoadFromACFT(ACFT:Number, WaterDutyACFT:Number):Number = udfMultiplyNmbers(ACFT, udfDivideNumbers(WaterDutyACFT,1000));
udfCalculateFlowFromLoadCFS(WaterDutyCFS:Number, Load:Number):Number = udfMultiplyNumbers(Load, udfDivideNumbers(1000,WaterDutyCFS));
udfCalculateFlowFromLoadACFT(WaterDutyACFT:Number, Load:Number):Number = udfMultiplyNumbers(Load, udfDivideNumbers(1000,WaterDutyACFT));
udfCalculateStorageChange(StartingStorage:Number, EndingStorage:Number):Number = StartingStorage - EndingStorage;
udfCalculateAverageInflow(StartingStorage:Number, EndingStorage:Number, DailyGeneration:Number, WaterDutyACFT:Number):Number = (DailyGeneration/WaterDutyACFT)+(StartingStorage-EndingStorage);
Temperature Conversions
udfFahrenheitToCelsius(DegF:Number):Number=Round( 5 / 9 * DegF,1);
udfCelsiusToFahrenheit(DegC:Number):Number= Round((9 / 5 * DegF)+32,1);
Text Formatting
Percentage
udfPercentage(Total:Number,Achievable:Number):Text = $"{Total / Achievable *100}%";
Currency format value to £GBP
udfCurrencyFormat(TotalValue:Number):Text = Text(TotalValue, "£#,##0.00");
Currency format value to $US
udfCurrencyFormat(TotalValue:Number):Text = Text(TotalValue, "$#,##0.00");
Calculate Working Days Between Two Dates (tweaks on Matthew Devaney's function)
5 x 8 Work Schedule
udfNetWorkDays5-8s(StartDate:DateTime, EndDate:DateTime):Number = Sum(
AddColumns(
ForAll(
Sequence(
DateDiff(
StartDate,
EndDate,
TimeUnit.Days
)+1
),
StartDate + Value
),
"IsWeekday",
Weekday(Value) in [2,3,4,5,6]
),
IsWeekday
);
4 x 10 Work Schedule
udfNetWorkDays4-10s(StartDate:DateTime, EndDate:DateTime):Number = Sum(
AddColumns(
ForAll(
Sequence(
DateDiff(
StartDate,
EndDate,
TimeUnit.Days
)+1
),
StartDate + Value
),
"IsWeekday",
Weekday(Value) in [2,3,4,5]
),
IsWeekday
);
Centering Controls in a Gallery or Container:
udfGetCenteredDimension(ParentDimension:Number, ChildDimension:Number):Number = (ParentDimension - ChildDimension) / 2;
To center an item in a gallery use these formulas in the X and Y properties:
X - udfGetCenteredDimension(Parent.TemplateWidth,Self.Width).
Y - udfGetCenteredDimension(Parent.TemplateHeight,Self.Height).
To center an item in a container use these formulas in the X and Y properties:
X - udfGetCenteredDimension(Parent.Width,Self.Width).
Y - udfGetCenteredDimension(Parent.Height,Self.Height).
Other Resources for User Defined Functions
See Matthew Devaneys article here: https://www.matthewdevaney.com/power-apps-user-defined-functions-write-code-once-and-reuse/
See Chris White's article here: Power Apps User Defined Functions - Platforms of Power
